@koda-sl/baker-cli 0.467.0 → 0.469.0-dev.42f26270e

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1329) hide show
  1. package/README.md +1 -1
  2. package/dist/account-6NWSUUTH.js +79 -0
  3. package/dist/account-EXUIK7VG.js +49 -0
  4. package/dist/account-KPLG4UNB.js +80 -0
  5. package/dist/account-reads-K6MST5DN.js +218 -0
  6. package/dist/account-writes-O6Y3KHZB.js +66 -0
  7. package/dist/accounts-5C2QHHU7.js +114 -0
  8. package/dist/accounts-LTZZP27H.js +75 -0
  9. package/dist/accounts-MU26YCEM.js +77 -0
  10. package/dist/accounts-VYONSKXS.js +611 -0
  11. package/dist/accounts-WLHVHUUA.js +115 -0
  12. package/dist/actions-QY2I22BD.js +55 -0
  13. package/dist/active-entities-P4ZYHVPM.js +103 -0
  14. package/dist/activities-KHM4CFEC.js +74 -0
  15. package/dist/ad-group-writes-CRQ33NI6.js +170 -0
  16. package/dist/ad-groups-DM2DCCZ5.js +68 -0
  17. package/dist/ad-writes-QKEXXECL.js +174 -0
  18. package/dist/add-A3AFSUTG.js +105 -0
  19. package/dist/add-GPYOE3VN.js +302 -0
  20. package/dist/add-P2Z3RCOZ.js +97 -0
  21. package/dist/add-ZEVLJ7QH.js +104 -0
  22. package/dist/add-accounts-BSRQB5AH.js +91 -0
  23. package/dist/ads-745D2QUU.js +128 -0
  24. package/dist/ads-ICQUMWUY.js +77 -0
  25. package/dist/ads-TY7BFS7J.js +113 -0
  26. package/dist/ads-Z4PVVPRJ.js +40 -0
  27. package/dist/adsets-FJ3GL7MB.js +176 -0
  28. package/dist/advertisers-RPPJ7FMZ.js +120 -0
  29. package/dist/advertisers-UVNHL2BG.js +125 -0
  30. package/dist/analytics-7BR6NDAA.js +433 -0
  31. package/dist/analytics-GJ7BKYFA.js +1976 -0
  32. package/dist/animate-TV45C73G.js +480 -0
  33. package/dist/assign-3AJ7AI6Q.js +77 -0
  34. package/dist/audience-size-DQIVTKZM.js +94 -0
  35. package/dist/audiences-EKGB5ZZK.js +78 -0
  36. package/dist/audiences-GZQDSFAY.js +268 -0
  37. package/dist/audiences-XLEM3JTG.js +85 -0
  38. package/dist/audit-6S3BMT6U.js +88 -0
  39. package/dist/audit-NOJITEGX.js +151 -0
  40. package/dist/autocomplete-DFYSW45W.js +111 -0
  41. package/dist/avatars-7MTWZCWH.js +38 -0
  42. package/dist/bid-pricing-WAUBZE7C.js +99 -0
  43. package/dist/brand-SMESMZMW.js +22 -0
  44. package/dist/brief-S3T37JDF.js +490 -0
  45. package/dist/businesses-IABNYECE.js +53 -0
  46. package/dist/campaign-groups-MLLJJLPY.js +95 -0
  47. package/dist/campaign-writes-6KEEDTCE.js +170 -0
  48. package/dist/campaign-writes-UTU4TIAA.js +165 -0
  49. package/dist/campaigns-GJET6IXF.js +107 -0
  50. package/dist/campaigns-JTW76Y7Z.js +109 -0
  51. package/dist/campaigns-LMGKUFCJ.js +76 -0
  52. package/dist/campaigns-UDUPBJM4.js +110 -0
  53. package/dist/canvas-PFBTWPHV.js +46 -0
  54. package/dist/capabilities-PWTQ2H4N.js +144 -0
  55. package/dist/cards-2KIVOYBQ.js +85 -0
  56. package/dist/catalog-U5S5OK2Z.js +64 -0
  57. package/dist/catalogs-YQDX4VHF.js +128 -0
  58. package/dist/changes-FED2XHMK.js +135 -0
  59. package/dist/chatgpt-ITDTY4AY.js +47 -0
  60. package/dist/chats-FS4TPCRQ.js +262 -0
  61. package/dist/chunk-2645YOF3.js +74 -0
  62. package/dist/chunk-2GHUUGRW.js +60 -0
  63. package/dist/chunk-3EYIJEXL.js +296 -0
  64. package/dist/chunk-3T4643A7.js +509 -0
  65. package/dist/chunk-44VFVT2B.js +136 -0
  66. package/dist/chunk-4YHBBTPZ.js +26 -0
  67. package/dist/chunk-5EDNV7AQ.js +159 -0
  68. package/dist/chunk-5ELFRA2T.js +1743 -0
  69. package/dist/chunk-6LJLYXHU.js +207 -0
  70. package/dist/chunk-6VB3WG7F.js +149 -0
  71. package/dist/chunk-7FNZ5BR6.js +312 -0
  72. package/dist/chunk-7FNZ5BR6.js.map +1 -0
  73. package/dist/chunk-7K6XF6YH.js +166 -0
  74. package/dist/chunk-A66KNFQ4.js +111 -0
  75. package/dist/chunk-A66KNFQ4.js.map +1 -0
  76. package/dist/chunk-AAEPZ3RE.js +1830 -0
  77. package/dist/chunk-AR7PU7BB.js +76 -0
  78. package/dist/chunk-B2PXWGSW.js +23992 -0
  79. package/dist/chunk-B2PXWGSW.js.map +1 -0
  80. package/dist/chunk-B3NSI5L6.js +275 -0
  81. package/dist/chunk-BDQ6B2AY.js +172 -0
  82. package/dist/chunk-C4A5UGTT.js +215 -0
  83. package/dist/chunk-C6SWZLTS.js +56 -0
  84. package/dist/chunk-CAMX6OHF.js +3182 -0
  85. package/dist/chunk-CAMX6OHF.js.map +1 -0
  86. package/dist/chunk-CARKHRQZ.js +23 -0
  87. package/dist/chunk-DDF4AOFW.js +455 -0
  88. package/dist/chunk-DPE2HC4T.js +84 -0
  89. package/dist/chunk-DQTIHRUR.js +5187 -0
  90. package/dist/chunk-E7LZVODT.js +98 -0
  91. package/dist/chunk-EPH7MKYM.js +846 -0
  92. package/dist/chunk-FPZEETMK.js +96 -0
  93. package/dist/chunk-FYHGXUN5.js +106 -0
  94. package/dist/chunk-GHIRWLAT.js +191 -0
  95. package/dist/chunk-HHHGZHTW.js +66 -0
  96. package/dist/chunk-HLRH2WXZ.js +297 -0
  97. package/dist/chunk-I2DNBEV6.js +4227 -0
  98. package/dist/chunk-I2DNBEV6.js.map +1 -0
  99. package/dist/chunk-I45DDK5A.js +45 -0
  100. package/dist/chunk-IAQVHCXA.js +197 -0
  101. package/dist/chunk-IMKOG6IV.js +96 -0
  102. package/dist/chunk-IOA3BQGW.js +136 -0
  103. package/dist/chunk-IRF6I27L.js +622 -0
  104. package/dist/chunk-IVC6KLVK.js +98 -0
  105. package/dist/chunk-IVZ7TBV3.js +363 -0
  106. package/dist/chunk-J4MRSTXQ.js +94 -0
  107. package/dist/chunk-JTGZYIPL.js +75 -0
  108. package/dist/chunk-JVPSRSQE.js +3151 -0
  109. package/dist/chunk-JXH7PG5U.js +533 -0
  110. package/dist/chunk-KCA5CDCU.js +2109 -0
  111. package/dist/chunk-KCA5CDCU.js.map +1 -0
  112. package/dist/chunk-KCOIUHQO.js +58 -0
  113. package/dist/chunk-KONRD6ID.js +57 -0
  114. package/dist/chunk-KVM5I6MP.js +55 -0
  115. package/dist/chunk-L3EIZ7OV.js +223 -0
  116. package/dist/chunk-L3EIZ7OV.js.map +1 -0
  117. package/dist/chunk-L7J2EP3C.js +817 -0
  118. package/dist/chunk-LAYWOVXE.js +172 -0
  119. package/dist/chunk-LYPYD2W5.js +206 -0
  120. package/dist/chunk-MGWBII65.js +333 -0
  121. package/dist/chunk-MH74GWNI.js +310 -0
  122. package/dist/chunk-MILNMRQE.js +6667 -0
  123. package/dist/chunk-MSCFMNJP.js +456 -0
  124. package/dist/chunk-MSCFMNJP.js.map +1 -0
  125. package/dist/chunk-NGB4ZYZV.js +51 -0
  126. package/dist/chunk-NGQZSQTY.js +541 -0
  127. package/dist/chunk-NIBT5IJ6.js +337 -0
  128. package/dist/chunk-NICTNU5R.js +46 -0
  129. package/dist/chunk-NXARJZWV.js +65 -0
  130. package/dist/chunk-NZF4RZQ6.js +188 -0
  131. package/dist/chunk-OBRBP424.js +42 -0
  132. package/dist/chunk-OF2XWJB6.js +1442 -0
  133. package/dist/chunk-OFIBMBMA.js +84 -0
  134. package/dist/chunk-OPS3XZRZ.js +67 -0
  135. package/dist/chunk-OSQ5ZCCK.js +274 -0
  136. package/dist/chunk-OWFOQOKV.js +19 -0
  137. package/dist/chunk-OZCYADOC.js +74 -0
  138. package/dist/chunk-P5T7OZKV.js +26 -0
  139. package/dist/chunk-PAK2FQFQ.js +74 -0
  140. package/dist/chunk-PARNHNTP.js +76 -0
  141. package/dist/chunk-PEJQXLY4.js +382 -0
  142. package/dist/chunk-PGIDDRRZ.js +25 -0
  143. package/dist/chunk-QJYN5EEA.js +346 -0
  144. package/dist/chunk-QK6PBPHL.js +1599 -0
  145. package/dist/chunk-QVBU3AV5.js +486 -0
  146. package/dist/chunk-QVNMLGP7.js +225 -0
  147. package/dist/chunk-R3AL2MDF.js +106 -0
  148. package/dist/chunk-R777VW73.js +494 -0
  149. package/dist/chunk-RPJYEJDQ.js +6188 -0
  150. package/dist/chunk-RSUXHLTC.js +433 -0
  151. package/dist/chunk-SENTWJ47.js +304 -0
  152. package/dist/chunk-SEPPFM5S.js +228 -0
  153. package/dist/chunk-SI4UJAWX.js +610 -0
  154. package/dist/chunk-SMUBQFWI.js +160 -0
  155. package/dist/chunk-SQ7DRYCC.js +150 -0
  156. package/dist/chunk-SQWQDLAJ.js +169 -0
  157. package/dist/chunk-SWEMPOSU.js +103 -0
  158. package/dist/chunk-TREEFO3C.js +174 -0
  159. package/dist/chunk-UHEMNHQJ.js +76 -0
  160. package/dist/chunk-UKBVKVRG.js +35 -0
  161. package/dist/chunk-UQ7Z3LS3.js +97 -0
  162. package/dist/chunk-WDR33O6G.js +125 -0
  163. package/dist/chunk-WQWZIGJA.js +474 -0
  164. package/dist/chunk-WSMUAEDW.js +665 -0
  165. package/dist/chunk-WX34KNTM.js +139 -0
  166. package/dist/chunk-X5MTXAN6.js +92 -0
  167. package/dist/chunk-Y74DTGZM.js +175 -0
  168. package/dist/chunk-YHEBXQW3.js +4410 -0
  169. package/dist/chunk-YMHYBQRY.js +592 -0
  170. package/dist/chunk-YXPR5IMS.js +133 -0
  171. package/dist/chunk-Z3GHDRUA.js +52 -0
  172. package/dist/chunk-ZCUOX3KZ.js +111 -0
  173. package/dist/chunk-ZQJMMVM4.js +1079 -0
  174. package/dist/claim-EI5N4A47.js +197 -0
  175. package/dist/cli.js +77 -38
  176. package/dist/cli.js.map +1 -1
  177. package/dist/client-27EKS6NO.js +19 -0
  178. package/dist/code-UJGLMXFF.js +76 -0
  179. package/dist/companies-CZTP6IHE.js +195 -0
  180. package/dist/complete-3QGPPKMF.js +81 -0
  181. package/dist/config-ZE2VGIWJ.js +88 -0
  182. package/dist/connect-TLXPTBJQ.js +42 -0
  183. package/dist/content-H3JSXJDS.js +85 -0
  184. package/dist/conversation-LF2TSYGP.js +93 -0
  185. package/dist/conversion-report-4R54PSAO.js +125 -0
  186. package/dist/conversion-upload-command-S3Z24A3E.js +438 -0
  187. package/dist/conversion-writes-FTEVGZ42.js +120 -0
  188. package/dist/conversions-GK7AETBW.js +135 -0
  189. package/dist/conversions-QS6SHY2T.js +76 -0
  190. package/dist/countries-N6QRDL3M.js +82 -0
  191. package/dist/create-4273VLWV.js +59 -0
  192. package/dist/create-7CQ3UUBV.js +207 -0
  193. package/dist/create-BHCH355C.js +235 -0
  194. package/dist/create-P4CJHMQL.js +130 -0
  195. package/dist/creatives-BEJAG3KH.js +182 -0
  196. package/dist/creatives-KYQGTI3K.js +51 -0
  197. package/dist/creatives-NZ5QO6GE.js +87 -0
  198. package/dist/credentials-YDPXORLZ.js +287 -0
  199. package/dist/critique-BH7X2YMB.js +1449 -0
  200. package/dist/critique-WI6RJPVE.js +213 -0
  201. package/dist/crm-MJ2JTVJ4.js +224 -0
  202. package/dist/crm-VQGN324C.js +318 -0
  203. package/dist/crop-7GN4HNRS.js +113 -0
  204. package/dist/currency-JU2KJL5M.js +88 -0
  205. package/dist/custom-conversions-RP4QBTB3.js +125 -0
  206. package/dist/customers-Y3WQXTMW.js +56 -0
  207. package/dist/decide-E76GNTLK.js +199 -0
  208. package/dist/delete-6OAL62TH.js +69 -0
  209. package/dist/delete-6U33BZA3.js +66 -0
  210. package/dist/delete-AHKK4OLO.js +54 -0
  211. package/dist/delete-BNJ6CLRE.js +63 -0
  212. package/dist/delete-NSMWNT6G.js +71 -0
  213. package/dist/delete-NZGAMH5L.js +71 -0
  214. package/dist/demographics-RKEEKNDS.js +138 -0
  215. package/dist/describe-PNYNA24Q.js +97 -0
  216. package/dist/describe-UR7JDT6A.js +97 -0
  217. package/dist/dimensions-2RKIUOFQ.js +101 -0
  218. package/dist/discard-QL7CZECC.js +66 -0
  219. package/dist/discover-AOZAQTHH.js +93 -0
  220. package/dist/discover-MG6IPEPQ.js +172 -0
  221. package/dist/domain-Z5XEKZK5.js +98 -0
  222. package/dist/download-5YLBWRLM.js +299 -0
  223. package/dist/draft-5PHDYG3Z.js +281 -0
  224. package/dist/draft-D5UXZOCI.js +217 -0
  225. package/dist/draft-KRLI7NMU.js +328 -0
  226. package/dist/draft-MYXJYP44.js +100 -0
  227. package/dist/draft-OOONTI3H.js +307 -0
  228. package/dist/draft-RDWGFLQF.js +233 -0
  229. package/dist/draft-RWQ524FL.js +306 -0
  230. package/dist/draft-WOEBIUS5.js +103 -0
  231. package/dist/engine/index.js +13 -13
  232. package/dist/env-A3LNICIR.js +43 -0
  233. package/dist/experiment-D5XXSX34.js +1397 -0
  234. package/dist/export-XT4W2QRS.js +168 -0
  235. package/dist/extract-N7XCALAO.js +113 -0
  236. package/dist/facets-RRSMESZC.js +114 -0
  237. package/dist/favorites-BCEDYFGC.js +178 -0
  238. package/dist/feed-56OKTKB2.js +177 -0
  239. package/dist/feedback-VT5OFS4L.js +66 -0
  240. package/dist/feedback-record-BRKYBCTO.js +175 -0
  241. package/dist/fetch-7Y5I5R4I.js +176 -0
  242. package/dist/fetch-QLSTBRU3.js +139 -0
  243. package/dist/find-BFPQFKBM.js +134 -0
  244. package/dist/fit-67A4DTQV.js +45 -0
  245. package/dist/flows-3D2JZRSV.js +247 -0
  246. package/dist/follow-XTF3P6HJ.js +94 -0
  247. package/dist/follow-competitors-IGIZLWSE.js +112 -0
  248. package/dist/following-BCVT7335.js +113 -0
  249. package/dist/fonts-54NRDXMH.js +34 -0
  250. package/dist/forecast-HAYOQZM7.js +104 -0
  251. package/dist/forecast-MVZ3KC2V.js +168 -0
  252. package/dist/funding-ADGAOVHJ.js +85 -0
  253. package/dist/funnel-JMTQM66R.js +394 -0
  254. package/dist/ga4-EODX3BLY.js +55 -0
  255. package/dist/generate-GBFCMDDB.js +262 -0
  256. package/dist/get-DYO32OOJ.js +78 -0
  257. package/dist/get-LEHJQWSB.js +63 -0
  258. package/dist/get-LZ7D3ECW.js +59 -0
  259. package/dist/get-UHXFWSDG.js +63 -0
  260. package/dist/get-WDVKP3KN.js +61 -0
  261. package/dist/get-Y2JH43JN.js +56 -0
  262. package/dist/get-YQNLA2U7.js +92 -0
  263. package/dist/gif-OMNWBH2P.js +94 -0
  264. package/dist/google-I52FWBG4.js +3190 -0
  265. package/dist/google-UMXRJBEC.js +136 -0
  266. package/dist/google-ads-6CIJMSZU.js +195 -0
  267. package/dist/group-H7GSELQP.js +43 -0
  268. package/dist/group-ON6VSABL.js +43 -0
  269. package/dist/gsc-GWT3XS6Q.js +30 -0
  270. package/dist/history-AYS4Y2B2.js +133 -0
  271. package/dist/history-R4UN3RDS.js +67 -0
  272. package/dist/hubspot-3FGLZWCQ.js +779 -0
  273. package/dist/icon-2BJJI76Q.js +137 -0
  274. package/dist/ideas-FORVDDIU.js +32 -0
  275. package/dist/images-ZBW3VJ54.js +90 -0
  276. package/dist/improve-AC366L6D.js +86 -0
  277. package/dist/ingest-2E25R57K.js +107 -0
  278. package/dist/ingest-CNYO3QO4.js +23 -0
  279. package/dist/insights-CYYRH2Z7.js +423 -0
  280. package/dist/insights-UXG7UM6V.js +122 -0
  281. package/dist/inspect-ZMUPILGB.js +189 -0
  282. package/dist/inspiration-QB4S3DMJ.js +53 -0
  283. package/dist/intent-6O25RUJM.js +95 -0
  284. package/dist/job-YC7DB63V.js +202 -0
  285. package/dist/job-create-6SFRJGQZ.js +109 -0
  286. package/dist/job-status-ILDJJFE3.js +74 -0
  287. package/dist/keep-XSR2BGJ7.js +78 -0
  288. package/dist/keyword-gap-7INCORTM.js +130 -0
  289. package/dist/keyword-metrics-P2CGT52I.js +197 -0
  290. package/dist/keywords-for-site-NQWXZAHW.js +128 -0
  291. package/dist/landing-H5PBNIXB.js +28 -0
  292. package/dist/landings-EJB44ZC3.js +151 -0
  293. package/dist/languages-ENP4VD37.js +55 -0
  294. package/dist/languages-USSQXXKG.js +40 -0
  295. package/dist/launches-6A2DB2CU.js +19 -0
  296. package/dist/layerize-24V6CBJP.js +190 -0
  297. package/dist/leads-57SAJJVP.js +90 -0
  298. package/dist/leads-DVANT2Y4.js +293 -0
  299. package/dist/learn-J4AZFB3S.js +203 -0
  300. package/dist/library-SWZCNISN.js +109 -0
  301. package/dist/lighthouse-DNFAIYJW.js +75 -0
  302. package/dist/line-item-writes-YYHWSRNO.js +208 -0
  303. package/dist/line-items-AG57EWW4.js +103 -0
  304. package/dist/link-MFV7GZGU.js +64 -0
  305. package/dist/linkedin-NZ4B4XD5.js +1008 -0
  306. package/dist/list-3YCOZGDO.js +51 -0
  307. package/dist/list-ARXNAR54.js +151 -0
  308. package/dist/list-AZLVAMKH.js +57 -0
  309. package/dist/list-DMS5JXFD.js +63 -0
  310. package/dist/list-DWWJSATF.js +50 -0
  311. package/dist/list-GT3Z4FP7.js +76 -0
  312. package/dist/list-HMKUDCC7.js +65 -0
  313. package/dist/list-RB2YPELW.js +303 -0
  314. package/dist/locations-BWR57DBT.js +67 -0
  315. package/dist/locations-P6D62A7Y.js +40 -0
  316. package/dist/log-E5QKCPLW.js +92 -0
  317. package/dist/logo-NJX3MBIB.js +18 -0
  318. package/dist/lookup-P42SS2PI.js +22 -0
  319. package/dist/make-XHJCIMDV.js +633 -0
  320. package/dist/map-663JJAWP.js +404 -0
  321. package/dist/mcp-LBHA56XH.js +463 -0
  322. package/dist/media-HO7BUHS3.js +15 -0
  323. package/dist/media-XTEUETJW.js +89 -0
  324. package/dist/media-sources-24ZIRZ5K.js +32 -0
  325. package/dist/members-YHP5AFHN.js +44 -0
  326. package/dist/meta-2DVRGWQY.js +69 -0
  327. package/dist/metrics-JZFE7QEY.js +152 -0
  328. package/dist/models-P426RWLB.js +155 -0
  329. package/dist/normalize-4CA6PRTP.js +806 -0
  330. package/dist/normalize-KI3H6PIJ.js +141 -0
  331. package/dist/options-WWKYT42M.js +121 -0
  332. package/dist/organization-V5XB4UZV.js +79 -0
  333. package/dist/organization-V5XB4UZV.js.map +1 -0
  334. package/dist/output-BMVGPVDO.js +24 -0
  335. package/dist/page-3QQ5YTPB.js +105 -0
  336. package/dist/pages-JJPINALE.js +66 -0
  337. package/dist/performance-3LV66WB6.js +24 -0
  338. package/dist/pinterest-PY4IN2HA.js +96 -0
  339. package/dist/pixels-EWMWYO62.js +108 -0
  340. package/dist/pixels-KBNSAR3Z.js +60 -0
  341. package/dist/plan-ES2CQAM7.js +207 -0
  342. package/dist/preview-JZ3RTTGM.js +169 -0
  343. package/dist/profile-LBMP7LZG.js +159 -0
  344. package/dist/profile-LBMP7LZG.js.map +1 -0
  345. package/dist/promoted-tweet-writes-VVYERLEE.js +180 -0
  346. package/dist/promoted-tweets-IIZSTAZ2.js +119 -0
  347. package/dist/properties-DCGIYAUT.js +101 -0
  348. package/dist/publish-JB62BHIT.js +322 -0
  349. package/dist/query-2QW6F77B.js +61 -0
  350. package/dist/query-R52ZZVAJ.js +236 -0
  351. package/dist/query-VMM7WUVR.js +247 -0
  352. package/dist/questionnaire-Y4CG6C2J.js +93 -0
  353. package/dist/read-YKDOJWQ7.js +141 -0
  354. package/dist/reddit-FBJK7WSP.js +26 -0
  355. package/dist/refresh-FECT4G2H.js +94 -0
  356. package/dist/release-VLMNN6ZK.js +60 -0
  357. package/dist/relevant-pages-H2PGC2KL.js +99 -0
  358. package/dist/remove-AN3M44KY.js +48 -0
  359. package/dist/remove-YHA5KSIQ.js +50 -0
  360. package/dist/reopen-Q2I6YJAE.js +63 -0
  361. package/dist/rerun-52T2HVEB.js +84 -0
  362. package/dist/research-DYO7YJCJ.js +262 -0
  363. package/dist/research-PJVN7NK5.js +62 -0
  364. package/dist/reset-AKULZS2F.js +54 -0
  365. package/dist/reset-ZRSKUTDZ.js +54 -0
  366. package/dist/resolve-HUUWAN4P.js +121 -0
  367. package/dist/retry-FQLZAHVP.js +60 -0
  368. package/dist/retry-SMWZCG5M.js +62 -0
  369. package/dist/retry-failed-5LIE6TEY.js +45 -0
  370. package/dist/run-6ZXSQNYU.js +65 -0
  371. package/dist/run-NC7FBPX3.js +59 -0
  372. package/dist/scaffold-ad-HU3XZNAD.js +1548 -0
  373. package/dist/scaffold-static-ad-ZLVWXEMT.js +971 -0
  374. package/dist/scaffold-video-P47NS63O.js +872 -0
  375. package/dist/schedule-IR4VWC3B.js +66 -0
  376. package/dist/schedule-IVI2MUCE.js +61 -0
  377. package/dist/scheduled-agents-OYSZHC2D.js +49 -0
  378. package/dist/schema-6UQ44CN7.js +63 -0
  379. package/dist/schema-KZ5AKVOA.js +132 -0
  380. package/dist/scrape-XEAYZKOL.js +2241 -0
  381. package/dist/screenshot-3D27DMQF.js +102 -0
  382. package/dist/search-4KC24VST.js +91 -0
  383. package/dist/search-A6QHEMD6.js +92 -0
  384. package/dist/search-FX6G524Z.js +174 -0
  385. package/dist/search-QPSEDI3B.js +224 -0
  386. package/dist/search-XTO25YD7.js +26 -0
  387. package/dist/search-copy-VN5GYYEK.js +168 -0
  388. package/dist/seeds-5V5ENQXJ.js +101 -0
  389. package/dist/select-PSYW24UO.js +94 -0
  390. package/dist/sends-WGVYTYGH.js +309 -0
  391. package/dist/sequences-U2RTLNMC.js +146 -0
  392. package/dist/set-prompt-MOOJMT3G.js +185 -0
  393. package/dist/setup-links-Z7RUPZ34.js +141 -0
  394. package/dist/shared-FUHFWNPF.js +31 -0
  395. package/dist/site-M4WDZKOS.js +177 -0
  396. package/dist/sitemaps-RRIXMGPC.js +87 -0
  397. package/dist/sites-LPZ4CRD6.js +101 -0
  398. package/dist/skills-MD3XUHDB.js +47 -0
  399. package/dist/sources-FGQR6O2O.js +30 -0
  400. package/dist/sources-FTICTPMW.js +421 -0
  401. package/dist/stale-U7V4JA5Q.js +63 -0
  402. package/dist/stats-H7KAPNQO.js +34 -0
  403. package/dist/status-CQOEVUO4.js +62 -0
  404. package/dist/sticker-N62W7CN6.js +94 -0
  405. package/dist/stock-FVLWUDVF.js +179 -0
  406. package/dist/studio-HAFREZ2U.js +49 -0
  407. package/dist/sync-GKEITRE7.js +54 -0
  408. package/dist/sync-J4BDPJFG.js +54 -0
  409. package/dist/sync-WD7EHL5I.js +265 -0
  410. package/dist/sync-definition-OEN2H52T.js +52 -0
  411. package/dist/tag-manager-BKK227XG.js +43 -0
  412. package/dist/tags-635XZ5EN.js +20 -0
  413. package/dist/tags-7YBWA53Y.js +20 -0
  414. package/dist/tags-BBQRSPPY.js +224 -0
  415. package/dist/tags-GBD5PMAV.js +26 -0
  416. package/dist/tags-ZDHZ5BVI.js +20 -0
  417. package/dist/targeting-constants-7O3C4YQ3.js +118 -0
  418. package/dist/targeting-criteria-UMH6DWEM.js +113 -0
  419. package/dist/targets-4LXD45G6.js +102 -0
  420. package/dist/templates-K6LNDYMC.js +178 -0
  421. package/dist/testimonials-WK6TRGZU.js +32 -0
  422. package/dist/themes-YQL34CHP.js +94 -0
  423. package/dist/top-companies-GSA374H3.js +108 -0
  424. package/dist/translate-WJADKXVA.js +598 -0
  425. package/dist/triggers-73RT2ATK.js +141 -0
  426. package/dist/tweets-I67XFC75.js +123 -0
  427. package/dist/unfollow-FXJVGTY3.js +46 -0
  428. package/dist/unlink-L6IA3GTM.js +67 -0
  429. package/dist/unstage-M4MNQBVM.js +95 -0
  430. package/dist/unstage-TCG43LSV.js +84 -0
  431. package/dist/update-247ADVOY.js +63 -0
  432. package/dist/update-3VGGNWW4.js +98 -0
  433. package/dist/update-7AP6HCOJ.js +142 -0
  434. package/dist/update-WH7AYAU3.js +155 -0
  435. package/dist/upload-XOYOPYAU.js +126 -0
  436. package/dist/upload-YXJDNDJH.js +150 -0
  437. package/dist/upscale-57WGAUOE.js +109 -0
  438. package/dist/url-options-3WB4OCDI.js +130 -0
  439. package/dist/url-params-F6FPAQIS.js +98 -0
  440. package/dist/use-LQUZTNPC.js +95 -0
  441. package/dist/validate-UN2BKVSQ.js +88 -0
  442. package/dist/variant-TJZ7XSZF.js +338 -0
  443. package/dist/videos-MUJA4PP4.js +39 -0
  444. package/dist/view-BITF6POV.js +121 -0
  445. package/dist/viewer-check-UC4DRQNY.js +68 -0
  446. package/dist/viewer-check-UC4DRQNY.js.map +1 -0
  447. package/dist/web-6NE4HDQW.js +140 -0
  448. package/dist/winners-TLGCUW44.js +113 -0
  449. package/dist/winning-ads-HPVK6CM4.js +84 -0
  450. package/dist/write-commands-4YV2IADK.js +737 -0
  451. package/dist/write-commands-NWQQJ4NA.js +1015 -0
  452. package/dist/write-commands-PNZFKWTT.js +713 -0
  453. package/dist/write-commands-VSLV4X2O.js +206 -0
  454. package/dist/x-2BR4SXMI.js +47 -0
  455. package/package.json +1 -1
  456. package/dist/account-2VTEV5C3.js +0 -79
  457. package/dist/account-HZC6X2PH.js +0 -49
  458. package/dist/account-MLX2MQTO.js +0 -80
  459. package/dist/account-reads-FCETXYI7.js +0 -218
  460. package/dist/account-writes-UNVXSLMV.js +0 -66
  461. package/dist/accounts-4P54UY6F.js +0 -115
  462. package/dist/accounts-6UNBLIUH.js +0 -75
  463. package/dist/accounts-GVTZN4VE.js +0 -114
  464. package/dist/accounts-PSNCMJLI.js +0 -611
  465. package/dist/accounts-XVQVPFDG.js +0 -77
  466. package/dist/actions-MEKXFKDN.js +0 -55
  467. package/dist/active-entities-UGHMVRWH.js +0 -103
  468. package/dist/activities-2J7FTZMN.js +0 -74
  469. package/dist/ad-group-writes-2YEZNT5Q.js +0 -170
  470. package/dist/ad-groups-YXVIPI7B.js +0 -68
  471. package/dist/ad-writes-HBNG55VT.js +0 -174
  472. package/dist/add-2FHPLALV.js +0 -105
  473. package/dist/add-JEMGWBRH.js +0 -104
  474. package/dist/add-JP76KCCY.js +0 -97
  475. package/dist/add-OZIORHYQ.js +0 -302
  476. package/dist/add-accounts-M5Y4DQFM.js +0 -91
  477. package/dist/ads-DB5NDHX5.js +0 -128
  478. package/dist/ads-NDV3GOIW.js +0 -40
  479. package/dist/ads-QBXR7IPO.js +0 -77
  480. package/dist/ads-W2IPUWHQ.js +0 -113
  481. package/dist/adsets-PY5ZKGBO.js +0 -176
  482. package/dist/advertisers-7BN7X2IH.js +0 -120
  483. package/dist/advertisers-BVAZ4XUX.js +0 -125
  484. package/dist/analytics-CQMJG7S4.js +0 -1976
  485. package/dist/analytics-S6P7FO7Z.js +0 -433
  486. package/dist/animate-QEHFEQHZ.js +0 -480
  487. package/dist/assign-NNI5YU4M.js +0 -77
  488. package/dist/audience-size-BCKF7ETB.js +0 -94
  489. package/dist/audiences-NTT3HZN7.js +0 -85
  490. package/dist/audiences-QWJ34WIW.js +0 -268
  491. package/dist/audiences-UUIYQFS6.js +0 -78
  492. package/dist/audit-3IEVQLR4.js +0 -151
  493. package/dist/audit-OWXTLQC4.js +0 -88
  494. package/dist/autocomplete-5PN6N7DQ.js +0 -111
  495. package/dist/avatars-3PC7FTU3.js +0 -38
  496. package/dist/bid-pricing-S5IU2BQW.js +0 -99
  497. package/dist/brand-XVXQ7VAU.js +0 -22
  498. package/dist/brief-SZSPXGG4.js +0 -490
  499. package/dist/businesses-ZH67AXR6.js +0 -53
  500. package/dist/campaign-groups-SBUN3CVL.js +0 -95
  501. package/dist/campaign-writes-2LMGW7FW.js +0 -165
  502. package/dist/campaign-writes-4N3LQJL2.js +0 -170
  503. package/dist/campaigns-5FH5THMS.js +0 -76
  504. package/dist/campaigns-66OOGMDW.js +0 -110
  505. package/dist/campaigns-CYPLOBK3.js +0 -109
  506. package/dist/campaigns-QUQQYMIO.js +0 -107
  507. package/dist/canvas-3GSDOZTI.js +0 -46
  508. package/dist/capabilities-UP52NQJ7.js +0 -144
  509. package/dist/cards-RSMTBND3.js +0 -85
  510. package/dist/catalog-YDDBFPRO.js +0 -64
  511. package/dist/catalogs-3IYC53GK.js +0 -128
  512. package/dist/changes-U263PWVD.js +0 -135
  513. package/dist/chatgpt-O64OJE6R.js +0 -47
  514. package/dist/chats-FP44JQYE.js +0 -262
  515. package/dist/chunk-35ENAFJX.js +0 -46
  516. package/dist/chunk-3KIH22M7.js +0 -207
  517. package/dist/chunk-4DM6OAQ6.js +0 -2065
  518. package/dist/chunk-4DM6OAQ6.js.map +0 -1
  519. package/dist/chunk-4FCLXJYW.js +0 -1442
  520. package/dist/chunk-4OSBBGG5.js +0 -304
  521. package/dist/chunk-57UECM77.js +0 -98
  522. package/dist/chunk-5Q3XCLMS.js +0 -455
  523. package/dist/chunk-65BQAJMH.js +0 -136
  524. package/dist/chunk-6GFJFTG6.js +0 -75
  525. package/dist/chunk-6GKC2PBR.js +0 -160
  526. package/dist/chunk-6HPIWZHS.js +0 -76
  527. package/dist/chunk-73B3RQJC.js +0 -610
  528. package/dist/chunk-7MQVCSA7.js +0 -310
  529. package/dist/chunk-7NTION5F.js +0 -26
  530. package/dist/chunk-7VHPAGPK.js +0 -228
  531. package/dist/chunk-A3VUXG5G.js +0 -1079
  532. package/dist/chunk-AQ4HEXUH.js +0 -1830
  533. package/dist/chunk-AUWN3C2K.js +0 -474
  534. package/dist/chunk-B3SPFCKC.js +0 -494
  535. package/dist/chunk-CBCGVPHB.js +0 -125
  536. package/dist/chunk-CECS3DHZ.js +0 -333
  537. package/dist/chunk-CHFKTRB5.js +0 -665
  538. package/dist/chunk-CHSNHVYF.js +0 -3182
  539. package/dist/chunk-CHSNHVYF.js.map +0 -1
  540. package/dist/chunk-D24DJ7DB.js +0 -67
  541. package/dist/chunk-D5MF337I.js +0 -97
  542. package/dist/chunk-DL2W4N7J.js +0 -52
  543. package/dist/chunk-DLUWHZCE.js +0 -225
  544. package/dist/chunk-ECBHE5S6.js +0 -51
  545. package/dist/chunk-EXZ2NIKX.js +0 -111
  546. package/dist/chunk-F3FSD6BO.js +0 -96
  547. package/dist/chunk-F5XU546T.js +0 -23
  548. package/dist/chunk-FEELV5IV.js +0 -150
  549. package/dist/chunk-G3KO2HFZ.js +0 -35
  550. package/dist/chunk-GKXMIXEV.js +0 -166
  551. package/dist/chunk-GQPGUJZ2.js +0 -76
  552. package/dist/chunk-GT4UFORX.js +0 -296
  553. package/dist/chunk-GWM4DCAK.js +0 -4410
  554. package/dist/chunk-GZ6YS7TG.js +0 -106
  555. package/dist/chunk-H7JOVRHO.js +0 -106
  556. package/dist/chunk-HF5V7TWU.js +0 -592
  557. package/dist/chunk-HM25R6XJ.js +0 -433
  558. package/dist/chunk-HQSCJYZO.js +0 -26
  559. package/dist/chunk-HWSUW5PX.js +0 -169
  560. package/dist/chunk-I7R3YSZF.js +0 -346
  561. package/dist/chunk-IJDF7D4U.js +0 -139
  562. package/dist/chunk-IK2S7QGF.js +0 -363
  563. package/dist/chunk-INI7U2SZ.js +0 -188
  564. package/dist/chunk-INJHF7AF.js +0 -172
  565. package/dist/chunk-J2QOKD2F.js +0 -76
  566. package/dist/chunk-J57EXXFU.js +0 -175
  567. package/dist/chunk-JE5NMVRX.js +0 -274
  568. package/dist/chunk-JHLGXB6K.js +0 -45
  569. package/dist/chunk-JSEPE5EP.js +0 -23992
  570. package/dist/chunk-JSEPE5EP.js.map +0 -1
  571. package/dist/chunk-JSKBCXI5.js +0 -3151
  572. package/dist/chunk-KB5HBQEK.js +0 -25
  573. package/dist/chunk-KB5XJHQX.js +0 -216
  574. package/dist/chunk-KB5XJHQX.js.map +0 -1
  575. package/dist/chunk-KCCWCK6L.js +0 -6667
  576. package/dist/chunk-KTL2D7NT.js +0 -96
  577. package/dist/chunk-KWTKAYCG.js +0 -1599
  578. package/dist/chunk-LHNL6JM2.js +0 -309
  579. package/dist/chunk-LHNL6JM2.js.map +0 -1
  580. package/dist/chunk-ML7DLFFY.js +0 -4227
  581. package/dist/chunk-ML7DLFFY.js.map +0 -1
  582. package/dist/chunk-MPXDQWYI.js +0 -57
  583. package/dist/chunk-NAMEFVWL.js +0 -1743
  584. package/dist/chunk-NBYP5N4X.js +0 -509
  585. package/dist/chunk-NOSWSBLW.js +0 -382
  586. package/dist/chunk-O3LHCQ7Q.js +0 -136
  587. package/dist/chunk-P5H2BL4J.js +0 -92
  588. package/dist/chunk-P66JWKAL.js +0 -533
  589. package/dist/chunk-PA5MYVQY.js +0 -66
  590. package/dist/chunk-Q676JHJA.js +0 -58
  591. package/dist/chunk-QDOVBGKZ.js +0 -149
  592. package/dist/chunk-QN5VAYER.js +0 -622
  593. package/dist/chunk-QNEX7FEC.js +0 -174
  594. package/dist/chunk-QTL4NJ5I.js +0 -65
  595. package/dist/chunk-QXDEZKAR.js +0 -455
  596. package/dist/chunk-QXDEZKAR.js.map +0 -1
  597. package/dist/chunk-R3GZRH43.js +0 -98
  598. package/dist/chunk-R7CQCE3E.js +0 -103
  599. package/dist/chunk-RFJ3S47F.js +0 -172
  600. package/dist/chunk-RV67UWHI.js +0 -5187
  601. package/dist/chunk-TMQ5LHZ3.js +0 -159
  602. package/dist/chunk-TRLVH7T3.js +0 -846
  603. package/dist/chunk-UUBFYAVE.js +0 -337
  604. package/dist/chunk-UXTZ5MBE.js +0 -56
  605. package/dist/chunk-V43RLLZE.js +0 -55
  606. package/dist/chunk-V4UFNEHE.js +0 -541
  607. package/dist/chunk-V5L5QD7R.js +0 -60
  608. package/dist/chunk-VAYFVC5B.js +0 -297
  609. package/dist/chunk-VFSLIDXA.js +0 -42
  610. package/dist/chunk-VHMNSO2B.js +0 -84
  611. package/dist/chunk-VOH2QWVG.js +0 -275
  612. package/dist/chunk-WESRVXFS.js +0 -133
  613. package/dist/chunk-WILN7TD6.js +0 -84
  614. package/dist/chunk-WXC3I4CT.js +0 -6188
  615. package/dist/chunk-X4DLIDFW.js +0 -197
  616. package/dist/chunk-XUMMI5WJ.js +0 -817
  617. package/dist/chunk-YONSWWCF.js +0 -215
  618. package/dist/chunk-YT74ZEVP.js +0 -206
  619. package/dist/chunk-Z5KBRTB2.js +0 -191
  620. package/dist/chunk-ZBKBTTHD.js +0 -74
  621. package/dist/chunk-ZFIYN7KP.js +0 -19
  622. package/dist/chunk-ZLU5QDLU.js +0 -486
  623. package/dist/chunk-ZNNC6B75.js +0 -94
  624. package/dist/chunk-ZO2YLHRW.js +0 -74
  625. package/dist/chunk-ZPJE6D7W.js +0 -74
  626. package/dist/claim-Y5HNMIGT.js +0 -197
  627. package/dist/client-LY2JCQS2.js +0 -19
  628. package/dist/code-7CBNYUPU.js +0 -76
  629. package/dist/companies-KXL2F27Q.js +0 -195
  630. package/dist/complete-Y47RTEZU.js +0 -81
  631. package/dist/config-7COTFJWK.js +0 -88
  632. package/dist/connect-VOCZSB3W.js +0 -42
  633. package/dist/content-OXMONMHJ.js +0 -85
  634. package/dist/conversation-DJLUJC2V.js +0 -93
  635. package/dist/conversion-report-ZRNV7X7D.js +0 -125
  636. package/dist/conversion-upload-command-IMHHSGYU.js +0 -438
  637. package/dist/conversion-writes-7N5UDQGH.js +0 -120
  638. package/dist/conversions-CRRH74GZ.js +0 -135
  639. package/dist/conversions-QOXRO26I.js +0 -76
  640. package/dist/countries-UXAUGSBR.js +0 -82
  641. package/dist/create-4HHYBOZF.js +0 -59
  642. package/dist/create-FVIVHA37.js +0 -207
  643. package/dist/create-XSXCJ2IS.js +0 -235
  644. package/dist/create-YTCXQUUX.js +0 -130
  645. package/dist/creatives-6DJPLVV7.js +0 -182
  646. package/dist/creatives-F26GDJG2.js +0 -51
  647. package/dist/creatives-ONKKGW5T.js +0 -87
  648. package/dist/credentials-6W4YNIWY.js +0 -287
  649. package/dist/critique-EFZPHFIS.js +0 -213
  650. package/dist/critique-JNWRNCVW.js +0 -1449
  651. package/dist/crm-E3BPZUW3.js +0 -224
  652. package/dist/crm-MAZU2GZR.js +0 -318
  653. package/dist/crop-3ZV5BFCA.js +0 -113
  654. package/dist/currency-PGLGLRKU.js +0 -88
  655. package/dist/custom-conversions-TV23XQHW.js +0 -125
  656. package/dist/customers-I2EHMEX3.js +0 -56
  657. package/dist/decide-EGQ3CRHI.js +0 -199
  658. package/dist/delete-A5NP6I7U.js +0 -54
  659. package/dist/delete-MN6GZAZH.js +0 -66
  660. package/dist/delete-MUPTLWHI.js +0 -71
  661. package/dist/delete-QMIJ5Z3V.js +0 -63
  662. package/dist/delete-R2SEUSLV.js +0 -69
  663. package/dist/delete-ZGBBWFAW.js +0 -71
  664. package/dist/demographics-3DHCGMUR.js +0 -138
  665. package/dist/describe-4O3VCV6L.js +0 -97
  666. package/dist/describe-FCTM53MM.js +0 -97
  667. package/dist/dimensions-AD4VS5AH.js +0 -101
  668. package/dist/discard-7QUFDYVK.js +0 -66
  669. package/dist/discover-6XSPNZYE.js +0 -172
  670. package/dist/discover-UQXQUPNO.js +0 -93
  671. package/dist/domain-NRPTYLT2.js +0 -98
  672. package/dist/download-IE6XLFHM.js +0 -299
  673. package/dist/draft-24B2O3SG.js +0 -217
  674. package/dist/draft-ENA7S4Y7.js +0 -103
  675. package/dist/draft-FGPMNIZK.js +0 -306
  676. package/dist/draft-MGKJ5RYI.js +0 -100
  677. package/dist/draft-PPRDQDGW.js +0 -307
  678. package/dist/draft-R5RZ72PS.js +0 -328
  679. package/dist/draft-S6VPKZYY.js +0 -233
  680. package/dist/draft-VVDI2OR3.js +0 -281
  681. package/dist/env-YLOVBOAE.js +0 -43
  682. package/dist/experiment-PHFP6IBM.js +0 -1397
  683. package/dist/export-R2IMUCQO.js +0 -168
  684. package/dist/extract-OQP3TSQG.js +0 -113
  685. package/dist/facets-HFX6SZT6.js +0 -114
  686. package/dist/favorites-NS73FDG5.js +0 -178
  687. package/dist/feed-SQPOB7SP.js +0 -177
  688. package/dist/feedback-XHSJBBEJ.js +0 -66
  689. package/dist/feedback-record-Z7Z4AW2L.js +0 -175
  690. package/dist/fetch-PQ3NOPIE.js +0 -139
  691. package/dist/fetch-TPRDJJGI.js +0 -176
  692. package/dist/find-Y22AANDE.js +0 -134
  693. package/dist/fit-XJPM6573.js +0 -45
  694. package/dist/flows-NF3IHOVV.js +0 -247
  695. package/dist/follow-N3DQZV7M.js +0 -94
  696. package/dist/follow-competitors-BZPCBGIB.js +0 -112
  697. package/dist/following-KESWTEBR.js +0 -113
  698. package/dist/fonts-3FX3OYEQ.js +0 -34
  699. package/dist/forecast-CYSEUIS4.js +0 -168
  700. package/dist/forecast-MO4PAKTH.js +0 -104
  701. package/dist/funding-G6S4UVU5.js +0 -85
  702. package/dist/funnel-MM4AXAE7.js +0 -394
  703. package/dist/ga4-2QHOA4RO.js +0 -55
  704. package/dist/generate-F4FDRDAW.js +0 -262
  705. package/dist/get-3P2EQLP3.js +0 -63
  706. package/dist/get-FJB3X44Z.js +0 -61
  707. package/dist/get-HV2VIJYO.js +0 -78
  708. package/dist/get-LHL6CGOR.js +0 -56
  709. package/dist/get-MBGO4VJD.js +0 -63
  710. package/dist/get-NOKSZPIV.js +0 -59
  711. package/dist/get-WHC4SRYK.js +0 -92
  712. package/dist/gif-SFYVDLCU.js +0 -94
  713. package/dist/google-MY45TUC4.js +0 -3190
  714. package/dist/google-XRAMIES5.js +0 -136
  715. package/dist/google-ads-DMOYC7OY.js +0 -195
  716. package/dist/group-6RDJTWVN.js +0 -43
  717. package/dist/group-TZJCKHKS.js +0 -43
  718. package/dist/gsc-HD6UFRYM.js +0 -30
  719. package/dist/history-2WBZRPPE.js +0 -67
  720. package/dist/history-PY5BYL7T.js +0 -133
  721. package/dist/hubspot-WQ6P3TZL.js +0 -779
  722. package/dist/icon-BMCDFGMN.js +0 -137
  723. package/dist/ideas-VLHUTFHP.js +0 -32
  724. package/dist/images-C4TBUPXM.js +0 -90
  725. package/dist/improve-P6F2HXYQ.js +0 -86
  726. package/dist/ingest-SXT33KE6.js +0 -23
  727. package/dist/ingest-V42IQ2FN.js +0 -107
  728. package/dist/insights-DI4W3D2Y.js +0 -423
  729. package/dist/insights-X75LRPS3.js +0 -122
  730. package/dist/inspect-YO5ER5OK.js +0 -189
  731. package/dist/inspiration-MDCCU2CF.js +0 -53
  732. package/dist/intent-A4SOIFKK.js +0 -95
  733. package/dist/job-QDLPQFIT.js +0 -202
  734. package/dist/job-create-6XKD5GEC.js +0 -109
  735. package/dist/job-status-MH7CGLWC.js +0 -74
  736. package/dist/keep-42SLV4CR.js +0 -78
  737. package/dist/keyword-gap-D4P2CC2L.js +0 -130
  738. package/dist/keyword-metrics-JLTZ4533.js +0 -197
  739. package/dist/keywords-for-site-UCUPPHVX.js +0 -128
  740. package/dist/landing-JWD3U2K5.js +0 -28
  741. package/dist/landings-5IYXHA5Z.js +0 -151
  742. package/dist/languages-HX4FD3GX.js +0 -40
  743. package/dist/languages-SRFGW6Z3.js +0 -55
  744. package/dist/launches-7U4TPNO3.js +0 -108
  745. package/dist/launches-7U4TPNO3.js.map +0 -1
  746. package/dist/layerize-U672AXED.js +0 -190
  747. package/dist/leads-MXUQISOC.js +0 -293
  748. package/dist/leads-WMKTJWW5.js +0 -90
  749. package/dist/learn-C4AJ2JDS.js +0 -203
  750. package/dist/library-RPFXNER4.js +0 -109
  751. package/dist/lighthouse-SJ4QNLUS.js +0 -75
  752. package/dist/line-item-writes-N5XUSGEM.js +0 -208
  753. package/dist/line-items-QIBNOEOH.js +0 -103
  754. package/dist/link-ZC6MH7AP.js +0 -64
  755. package/dist/linkedin-MIEUUP4J.js +0 -1008
  756. package/dist/list-GQ65MC2N.js +0 -65
  757. package/dist/list-HT4HZWF4.js +0 -63
  758. package/dist/list-K56J7FZW.js +0 -51
  759. package/dist/list-LLBBUXTM.js +0 -151
  760. package/dist/list-LYRCC67M.js +0 -303
  761. package/dist/list-M4Z3WYPM.js +0 -76
  762. package/dist/list-SXYVDDMU.js +0 -57
  763. package/dist/list-XFIOXFB2.js +0 -50
  764. package/dist/locations-PQWB7EGC.js +0 -40
  765. package/dist/locations-WNSET6RM.js +0 -67
  766. package/dist/log-SXXIU7ZP.js +0 -92
  767. package/dist/logo-4JOWGJ5A.js +0 -18
  768. package/dist/lookup-QGGSAHOO.js +0 -22
  769. package/dist/make-6OQBIYWC.js +0 -633
  770. package/dist/map-YMFE54VT.js +0 -404
  771. package/dist/mcp-QAZ4XLMN.js +0 -463
  772. package/dist/media-2SWDJDA6.js +0 -15
  773. package/dist/media-O5L7GO72.js +0 -89
  774. package/dist/media-sources-LF6I6AYP.js +0 -32
  775. package/dist/members-RGK6FRVY.js +0 -44
  776. package/dist/meta-37L6QBOZ.js +0 -69
  777. package/dist/metrics-WVG3IUMH.js +0 -152
  778. package/dist/models-5QWYGJ7Y.js +0 -155
  779. package/dist/normalize-5G6MMOAB.js +0 -141
  780. package/dist/normalize-P5Q3F7FU.js +0 -806
  781. package/dist/options-TYQL4KRW.js +0 -121
  782. package/dist/output-ZL62UZHQ.js +0 -24
  783. package/dist/page-FZ7IZ5CV.js +0 -105
  784. package/dist/pages-SS7TZTHV.js +0 -66
  785. package/dist/performance-2K425XAN.js +0 -24
  786. package/dist/pinterest-UETS7U7U.js +0 -96
  787. package/dist/pixels-D73GQFGM.js +0 -60
  788. package/dist/pixels-LCTMLKGP.js +0 -108
  789. package/dist/plan-4HLITU3A.js +0 -207
  790. package/dist/preview-RU54Z4EM.js +0 -169
  791. package/dist/profile-NQOIBLJL.js +0 -150
  792. package/dist/profile-NQOIBLJL.js.map +0 -1
  793. package/dist/promoted-tweet-writes-YIZGFYZO.js +0 -180
  794. package/dist/promoted-tweets-D5NKZ3FS.js +0 -119
  795. package/dist/properties-ZUDQH3LE.js +0 -101
  796. package/dist/publish-WDHGUTNP.js +0 -322
  797. package/dist/query-26T7XATH.js +0 -236
  798. package/dist/query-IJVVSB54.js +0 -61
  799. package/dist/query-SHUOHXTO.js +0 -247
  800. package/dist/questionnaire-7AEVHZDR.js +0 -93
  801. package/dist/read-UYSQAXRV.js +0 -141
  802. package/dist/reddit-YBEYPDZP.js +0 -26
  803. package/dist/refresh-NKBJT47F.js +0 -94
  804. package/dist/release-4UPLYFTE.js +0 -60
  805. package/dist/relevant-pages-OI7GTPOK.js +0 -99
  806. package/dist/remove-2KACTXKP.js +0 -48
  807. package/dist/remove-HEL2YO3Q.js +0 -50
  808. package/dist/reopen-3RWFCQU2.js +0 -63
  809. package/dist/rerun-LM52CBPS.js +0 -84
  810. package/dist/research-547KDC54.js +0 -62
  811. package/dist/research-VW37GQ5K.js +0 -262
  812. package/dist/reset-LHQJDSVK.js +0 -54
  813. package/dist/reset-OIRUQHMS.js +0 -54
  814. package/dist/resolve-2N35OI2Y.js +0 -121
  815. package/dist/retry-EZRMUB4I.js +0 -62
  816. package/dist/retry-GXH7SCNK.js +0 -60
  817. package/dist/retry-failed-NWLH6WHK.js +0 -45
  818. package/dist/run-DWR24LCU.js +0 -65
  819. package/dist/run-PLUL33QX.js +0 -59
  820. package/dist/scaffold-ad-W4RZXLDX.js +0 -1548
  821. package/dist/scaffold-static-ad-IPJYRAOT.js +0 -971
  822. package/dist/scaffold-video-XBII4YLS.js +0 -872
  823. package/dist/schedule-QZPDYWHK.js +0 -61
  824. package/dist/schedule-S547HPUT.js +0 -66
  825. package/dist/scheduled-agents-DWSVPMZP.js +0 -49
  826. package/dist/schema-O4JTYZEY.js +0 -132
  827. package/dist/schema-SQIP75WG.js +0 -63
  828. package/dist/scrape-TI6S2W7I.js +0 -2241
  829. package/dist/screenshot-XFAYY4WW.js +0 -102
  830. package/dist/search-4HIOKYFR.js +0 -26
  831. package/dist/search-D2IV7KFJ.js +0 -92
  832. package/dist/search-IZPDHRJ4.js +0 -224
  833. package/dist/search-KFDL2IGG.js +0 -91
  834. package/dist/search-L3RYKE3G.js +0 -174
  835. package/dist/search-copy-QZXCAGK4.js +0 -168
  836. package/dist/seeds-VUNZMHZH.js +0 -101
  837. package/dist/select-IAHFSSDX.js +0 -94
  838. package/dist/sends-UT4WXVOS.js +0 -309
  839. package/dist/sequences-5RAGZE7L.js +0 -146
  840. package/dist/set-prompt-WVQ4AI66.js +0 -185
  841. package/dist/setup-links-DFGWE4CV.js +0 -141
  842. package/dist/shared-3CGGKICB.js +0 -31
  843. package/dist/site-4XF273BE.js +0 -177
  844. package/dist/sitemaps-3WDYQHYR.js +0 -87
  845. package/dist/sites-G4DQ2Z2X.js +0 -101
  846. package/dist/skills-PA26HXEP.js +0 -47
  847. package/dist/sources-M46IYW42.js +0 -421
  848. package/dist/sources-PZXOSE4S.js +0 -30
  849. package/dist/stale-M64FB7J3.js +0 -63
  850. package/dist/stats-6DPPYSP3.js +0 -34
  851. package/dist/status-C6UZ45WO.js +0 -62
  852. package/dist/sticker-MC2IAIQB.js +0 -94
  853. package/dist/stock-B7LKMKUK.js +0 -179
  854. package/dist/studio-EQ2L6OBJ.js +0 -49
  855. package/dist/sync-CLZDZL5F.js +0 -54
  856. package/dist/sync-V26UBMAN.js +0 -265
  857. package/dist/sync-VYOJ7G6S.js +0 -54
  858. package/dist/sync-definition-2SGGHSKR.js +0 -52
  859. package/dist/tag-manager-KIHXVFMF.js +0 -43
  860. package/dist/tags-6RGJF4GS.js +0 -20
  861. package/dist/tags-FGCZJZWK.js +0 -20
  862. package/dist/tags-JN475JPP.js +0 -26
  863. package/dist/tags-ODT4WI57.js +0 -20
  864. package/dist/tags-SURC65KF.js +0 -224
  865. package/dist/targeting-constants-6Y5J2PPZ.js +0 -118
  866. package/dist/targeting-criteria-NMZD3CK6.js +0 -113
  867. package/dist/targets-L4M53NRI.js +0 -102
  868. package/dist/templates-5AC4336C.js +0 -178
  869. package/dist/testimonials-YN2AB7U7.js +0 -32
  870. package/dist/themes-BYRMCXYR.js +0 -94
  871. package/dist/top-companies-X75ZLN4Y.js +0 -108
  872. package/dist/translate-YPVSDMH6.js +0 -598
  873. package/dist/triggers-GBKVEQZF.js +0 -141
  874. package/dist/tweets-KTM7HX5R.js +0 -123
  875. package/dist/unfollow-WBBTVEHE.js +0 -46
  876. package/dist/unlink-ORHXBQKH.js +0 -67
  877. package/dist/unstage-2R23KGQG.js +0 -84
  878. package/dist/unstage-GYBJZWCZ.js +0 -95
  879. package/dist/update-2VOYUTLV.js +0 -155
  880. package/dist/update-JTFWVXRB.js +0 -142
  881. package/dist/update-VKPYJXNK.js +0 -63
  882. package/dist/update-YTDA3XJ3.js +0 -98
  883. package/dist/upload-NA62W5RS.js +0 -150
  884. package/dist/upload-V42RNE7Q.js +0 -126
  885. package/dist/upscale-RXJUBHXN.js +0 -109
  886. package/dist/url-options-LZIHCPP4.js +0 -130
  887. package/dist/url-params-5SRJGPT6.js +0 -98
  888. package/dist/use-MHPNS4V4.js +0 -95
  889. package/dist/validate-IIOV3YJK.js +0 -88
  890. package/dist/variant-ZFCWILPG.js +0 -338
  891. package/dist/videos-MIHTMO3G.js +0 -39
  892. package/dist/view-PYCGDGT2.js +0 -121
  893. package/dist/viewer-check-65TIGVAJ.js +0 -68
  894. package/dist/web-2ACSE34L.js +0 -140
  895. package/dist/winners-AI4PVSOI.js +0 -113
  896. package/dist/winning-ads-2ZOUOAYM.js +0 -84
  897. package/dist/write-commands-34L5LJIB.js +0 -713
  898. package/dist/write-commands-5TJ3LQ5F.js +0 -737
  899. package/dist/write-commands-GLIDTGI3.js +0 -1015
  900. package/dist/write-commands-R3UCCBUI.js +0 -206
  901. package/dist/x-V7V47E4N.js +0 -47
  902. /package/dist/{account-2VTEV5C3.js.map → account-6NWSUUTH.js.map} +0 -0
  903. /package/dist/{account-HZC6X2PH.js.map → account-EXUIK7VG.js.map} +0 -0
  904. /package/dist/{account-MLX2MQTO.js.map → account-KPLG4UNB.js.map} +0 -0
  905. /package/dist/{account-reads-FCETXYI7.js.map → account-reads-K6MST5DN.js.map} +0 -0
  906. /package/dist/{account-writes-UNVXSLMV.js.map → account-writes-O6Y3KHZB.js.map} +0 -0
  907. /package/dist/{accounts-GVTZN4VE.js.map → accounts-5C2QHHU7.js.map} +0 -0
  908. /package/dist/{accounts-6UNBLIUH.js.map → accounts-LTZZP27H.js.map} +0 -0
  909. /package/dist/{accounts-XVQVPFDG.js.map → accounts-MU26YCEM.js.map} +0 -0
  910. /package/dist/{accounts-PSNCMJLI.js.map → accounts-VYONSKXS.js.map} +0 -0
  911. /package/dist/{accounts-4P54UY6F.js.map → accounts-WLHVHUUA.js.map} +0 -0
  912. /package/dist/{actions-MEKXFKDN.js.map → actions-QY2I22BD.js.map} +0 -0
  913. /package/dist/{active-entities-UGHMVRWH.js.map → active-entities-P4ZYHVPM.js.map} +0 -0
  914. /package/dist/{activities-2J7FTZMN.js.map → activities-KHM4CFEC.js.map} +0 -0
  915. /package/dist/{ad-group-writes-2YEZNT5Q.js.map → ad-group-writes-CRQ33NI6.js.map} +0 -0
  916. /package/dist/{ad-groups-YXVIPI7B.js.map → ad-groups-DM2DCCZ5.js.map} +0 -0
  917. /package/dist/{ad-writes-HBNG55VT.js.map → ad-writes-QKEXXECL.js.map} +0 -0
  918. /package/dist/{add-2FHPLALV.js.map → add-A3AFSUTG.js.map} +0 -0
  919. /package/dist/{add-OZIORHYQ.js.map → add-GPYOE3VN.js.map} +0 -0
  920. /package/dist/{add-JP76KCCY.js.map → add-P2Z3RCOZ.js.map} +0 -0
  921. /package/dist/{add-JEMGWBRH.js.map → add-ZEVLJ7QH.js.map} +0 -0
  922. /package/dist/{add-accounts-M5Y4DQFM.js.map → add-accounts-BSRQB5AH.js.map} +0 -0
  923. /package/dist/{ads-DB5NDHX5.js.map → ads-745D2QUU.js.map} +0 -0
  924. /package/dist/{ads-QBXR7IPO.js.map → ads-ICQUMWUY.js.map} +0 -0
  925. /package/dist/{ads-W2IPUWHQ.js.map → ads-TY7BFS7J.js.map} +0 -0
  926. /package/dist/{ads-NDV3GOIW.js.map → ads-Z4PVVPRJ.js.map} +0 -0
  927. /package/dist/{adsets-PY5ZKGBO.js.map → adsets-FJ3GL7MB.js.map} +0 -0
  928. /package/dist/{advertisers-7BN7X2IH.js.map → advertisers-RPPJ7FMZ.js.map} +0 -0
  929. /package/dist/{advertisers-BVAZ4XUX.js.map → advertisers-UVNHL2BG.js.map} +0 -0
  930. /package/dist/{analytics-S6P7FO7Z.js.map → analytics-7BR6NDAA.js.map} +0 -0
  931. /package/dist/{analytics-CQMJG7S4.js.map → analytics-GJ7BKYFA.js.map} +0 -0
  932. /package/dist/{animate-QEHFEQHZ.js.map → animate-TV45C73G.js.map} +0 -0
  933. /package/dist/{assign-NNI5YU4M.js.map → assign-3AJ7AI6Q.js.map} +0 -0
  934. /package/dist/{audience-size-BCKF7ETB.js.map → audience-size-DQIVTKZM.js.map} +0 -0
  935. /package/dist/{audiences-UUIYQFS6.js.map → audiences-EKGB5ZZK.js.map} +0 -0
  936. /package/dist/{audiences-QWJ34WIW.js.map → audiences-GZQDSFAY.js.map} +0 -0
  937. /package/dist/{audiences-NTT3HZN7.js.map → audiences-XLEM3JTG.js.map} +0 -0
  938. /package/dist/{audit-OWXTLQC4.js.map → audit-6S3BMT6U.js.map} +0 -0
  939. /package/dist/{audit-3IEVQLR4.js.map → audit-NOJITEGX.js.map} +0 -0
  940. /package/dist/{autocomplete-5PN6N7DQ.js.map → autocomplete-DFYSW45W.js.map} +0 -0
  941. /package/dist/{avatars-3PC7FTU3.js.map → avatars-7MTWZCWH.js.map} +0 -0
  942. /package/dist/{bid-pricing-S5IU2BQW.js.map → bid-pricing-WAUBZE7C.js.map} +0 -0
  943. /package/dist/{brand-XVXQ7VAU.js.map → brand-SMESMZMW.js.map} +0 -0
  944. /package/dist/{brief-SZSPXGG4.js.map → brief-S3T37JDF.js.map} +0 -0
  945. /package/dist/{businesses-ZH67AXR6.js.map → businesses-IABNYECE.js.map} +0 -0
  946. /package/dist/{campaign-groups-SBUN3CVL.js.map → campaign-groups-MLLJJLPY.js.map} +0 -0
  947. /package/dist/{campaign-writes-4N3LQJL2.js.map → campaign-writes-6KEEDTCE.js.map} +0 -0
  948. /package/dist/{campaign-writes-2LMGW7FW.js.map → campaign-writes-UTU4TIAA.js.map} +0 -0
  949. /package/dist/{campaigns-QUQQYMIO.js.map → campaigns-GJET6IXF.js.map} +0 -0
  950. /package/dist/{campaigns-CYPLOBK3.js.map → campaigns-JTW76Y7Z.js.map} +0 -0
  951. /package/dist/{campaigns-5FH5THMS.js.map → campaigns-LMGKUFCJ.js.map} +0 -0
  952. /package/dist/{campaigns-66OOGMDW.js.map → campaigns-UDUPBJM4.js.map} +0 -0
  953. /package/dist/{canvas-3GSDOZTI.js.map → canvas-PFBTWPHV.js.map} +0 -0
  954. /package/dist/{capabilities-UP52NQJ7.js.map → capabilities-PWTQ2H4N.js.map} +0 -0
  955. /package/dist/{cards-RSMTBND3.js.map → cards-2KIVOYBQ.js.map} +0 -0
  956. /package/dist/{catalog-YDDBFPRO.js.map → catalog-U5S5OK2Z.js.map} +0 -0
  957. /package/dist/{catalogs-3IYC53GK.js.map → catalogs-YQDX4VHF.js.map} +0 -0
  958. /package/dist/{changes-U263PWVD.js.map → changes-FED2XHMK.js.map} +0 -0
  959. /package/dist/{chatgpt-O64OJE6R.js.map → chatgpt-ITDTY4AY.js.map} +0 -0
  960. /package/dist/{chats-FP44JQYE.js.map → chats-FS4TPCRQ.js.map} +0 -0
  961. /package/dist/{chunk-ZBKBTTHD.js.map → chunk-2645YOF3.js.map} +0 -0
  962. /package/dist/{chunk-V5L5QD7R.js.map → chunk-2GHUUGRW.js.map} +0 -0
  963. /package/dist/{chunk-GT4UFORX.js.map → chunk-3EYIJEXL.js.map} +0 -0
  964. /package/dist/{chunk-NBYP5N4X.js.map → chunk-3T4643A7.js.map} +0 -0
  965. /package/dist/{chunk-65BQAJMH.js.map → chunk-44VFVT2B.js.map} +0 -0
  966. /package/dist/{chunk-7NTION5F.js.map → chunk-4YHBBTPZ.js.map} +0 -0
  967. /package/dist/{chunk-TMQ5LHZ3.js.map → chunk-5EDNV7AQ.js.map} +0 -0
  968. /package/dist/{chunk-NAMEFVWL.js.map → chunk-5ELFRA2T.js.map} +0 -0
  969. /package/dist/{chunk-3KIH22M7.js.map → chunk-6LJLYXHU.js.map} +0 -0
  970. /package/dist/{chunk-QDOVBGKZ.js.map → chunk-6VB3WG7F.js.map} +0 -0
  971. /package/dist/{chunk-GKXMIXEV.js.map → chunk-7K6XF6YH.js.map} +0 -0
  972. /package/dist/{chunk-AQ4HEXUH.js.map → chunk-AAEPZ3RE.js.map} +0 -0
  973. /package/dist/{chunk-GQPGUJZ2.js.map → chunk-AR7PU7BB.js.map} +0 -0
  974. /package/dist/{chunk-VOH2QWVG.js.map → chunk-B3NSI5L6.js.map} +0 -0
  975. /package/dist/{chunk-INJHF7AF.js.map → chunk-BDQ6B2AY.js.map} +0 -0
  976. /package/dist/{chunk-YONSWWCF.js.map → chunk-C4A5UGTT.js.map} +0 -0
  977. /package/dist/{chunk-UXTZ5MBE.js.map → chunk-C6SWZLTS.js.map} +0 -0
  978. /package/dist/{chunk-F5XU546T.js.map → chunk-CARKHRQZ.js.map} +0 -0
  979. /package/dist/{chunk-5Q3XCLMS.js.map → chunk-DDF4AOFW.js.map} +0 -0
  980. /package/dist/{chunk-WILN7TD6.js.map → chunk-DPE2HC4T.js.map} +0 -0
  981. /package/dist/{chunk-RV67UWHI.js.map → chunk-DQTIHRUR.js.map} +0 -0
  982. /package/dist/{chunk-57UECM77.js.map → chunk-E7LZVODT.js.map} +0 -0
  983. /package/dist/{chunk-TRLVH7T3.js.map → chunk-EPH7MKYM.js.map} +0 -0
  984. /package/dist/{chunk-F3FSD6BO.js.map → chunk-FPZEETMK.js.map} +0 -0
  985. /package/dist/{chunk-GZ6YS7TG.js.map → chunk-FYHGXUN5.js.map} +0 -0
  986. /package/dist/{chunk-Z5KBRTB2.js.map → chunk-GHIRWLAT.js.map} +0 -0
  987. /package/dist/{chunk-PA5MYVQY.js.map → chunk-HHHGZHTW.js.map} +0 -0
  988. /package/dist/{chunk-VAYFVC5B.js.map → chunk-HLRH2WXZ.js.map} +0 -0
  989. /package/dist/{chunk-JHLGXB6K.js.map → chunk-I45DDK5A.js.map} +0 -0
  990. /package/dist/{chunk-X4DLIDFW.js.map → chunk-IAQVHCXA.js.map} +0 -0
  991. /package/dist/{chunk-KTL2D7NT.js.map → chunk-IMKOG6IV.js.map} +0 -0
  992. /package/dist/{chunk-O3LHCQ7Q.js.map → chunk-IOA3BQGW.js.map} +0 -0
  993. /package/dist/{chunk-QN5VAYER.js.map → chunk-IRF6I27L.js.map} +0 -0
  994. /package/dist/{chunk-R3GZRH43.js.map → chunk-IVC6KLVK.js.map} +0 -0
  995. /package/dist/{chunk-IK2S7QGF.js.map → chunk-IVZ7TBV3.js.map} +0 -0
  996. /package/dist/{chunk-ZNNC6B75.js.map → chunk-J4MRSTXQ.js.map} +0 -0
  997. /package/dist/{chunk-6GFJFTG6.js.map → chunk-JTGZYIPL.js.map} +0 -0
  998. /package/dist/{chunk-JSKBCXI5.js.map → chunk-JVPSRSQE.js.map} +0 -0
  999. /package/dist/{chunk-P66JWKAL.js.map → chunk-JXH7PG5U.js.map} +0 -0
  1000. /package/dist/{chunk-Q676JHJA.js.map → chunk-KCOIUHQO.js.map} +0 -0
  1001. /package/dist/{chunk-MPXDQWYI.js.map → chunk-KONRD6ID.js.map} +0 -0
  1002. /package/dist/{chunk-V43RLLZE.js.map → chunk-KVM5I6MP.js.map} +0 -0
  1003. /package/dist/{chunk-XUMMI5WJ.js.map → chunk-L7J2EP3C.js.map} +0 -0
  1004. /package/dist/{chunk-RFJ3S47F.js.map → chunk-LAYWOVXE.js.map} +0 -0
  1005. /package/dist/{chunk-YT74ZEVP.js.map → chunk-LYPYD2W5.js.map} +0 -0
  1006. /package/dist/{chunk-CECS3DHZ.js.map → chunk-MGWBII65.js.map} +0 -0
  1007. /package/dist/{chunk-7MQVCSA7.js.map → chunk-MH74GWNI.js.map} +0 -0
  1008. /package/dist/{chunk-KCCWCK6L.js.map → chunk-MILNMRQE.js.map} +0 -0
  1009. /package/dist/{chunk-ECBHE5S6.js.map → chunk-NGB4ZYZV.js.map} +0 -0
  1010. /package/dist/{chunk-V4UFNEHE.js.map → chunk-NGQZSQTY.js.map} +0 -0
  1011. /package/dist/{chunk-UUBFYAVE.js.map → chunk-NIBT5IJ6.js.map} +0 -0
  1012. /package/dist/{chunk-35ENAFJX.js.map → chunk-NICTNU5R.js.map} +0 -0
  1013. /package/dist/{chunk-QTL4NJ5I.js.map → chunk-NXARJZWV.js.map} +0 -0
  1014. /package/dist/{chunk-INI7U2SZ.js.map → chunk-NZF4RZQ6.js.map} +0 -0
  1015. /package/dist/{chunk-VFSLIDXA.js.map → chunk-OBRBP424.js.map} +0 -0
  1016. /package/dist/{chunk-4FCLXJYW.js.map → chunk-OF2XWJB6.js.map} +0 -0
  1017. /package/dist/{chunk-VHMNSO2B.js.map → chunk-OFIBMBMA.js.map} +0 -0
  1018. /package/dist/{chunk-D24DJ7DB.js.map → chunk-OPS3XZRZ.js.map} +0 -0
  1019. /package/dist/{chunk-JE5NMVRX.js.map → chunk-OSQ5ZCCK.js.map} +0 -0
  1020. /package/dist/{chunk-ZFIYN7KP.js.map → chunk-OWFOQOKV.js.map} +0 -0
  1021. /package/dist/{chunk-ZO2YLHRW.js.map → chunk-OZCYADOC.js.map} +0 -0
  1022. /package/dist/{chunk-HQSCJYZO.js.map → chunk-P5T7OZKV.js.map} +0 -0
  1023. /package/dist/{chunk-ZPJE6D7W.js.map → chunk-PAK2FQFQ.js.map} +0 -0
  1024. /package/dist/{chunk-6HPIWZHS.js.map → chunk-PARNHNTP.js.map} +0 -0
  1025. /package/dist/{chunk-NOSWSBLW.js.map → chunk-PEJQXLY4.js.map} +0 -0
  1026. /package/dist/{chunk-KB5HBQEK.js.map → chunk-PGIDDRRZ.js.map} +0 -0
  1027. /package/dist/{chunk-I7R3YSZF.js.map → chunk-QJYN5EEA.js.map} +0 -0
  1028. /package/dist/{chunk-KWTKAYCG.js.map → chunk-QK6PBPHL.js.map} +0 -0
  1029. /package/dist/{chunk-ZLU5QDLU.js.map → chunk-QVBU3AV5.js.map} +0 -0
  1030. /package/dist/{chunk-DLUWHZCE.js.map → chunk-QVNMLGP7.js.map} +0 -0
  1031. /package/dist/{chunk-H7JOVRHO.js.map → chunk-R3AL2MDF.js.map} +0 -0
  1032. /package/dist/{chunk-B3SPFCKC.js.map → chunk-R777VW73.js.map} +0 -0
  1033. /package/dist/{chunk-WXC3I4CT.js.map → chunk-RPJYEJDQ.js.map} +0 -0
  1034. /package/dist/{chunk-HM25R6XJ.js.map → chunk-RSUXHLTC.js.map} +0 -0
  1035. /package/dist/{chunk-4OSBBGG5.js.map → chunk-SENTWJ47.js.map} +0 -0
  1036. /package/dist/{chunk-7VHPAGPK.js.map → chunk-SEPPFM5S.js.map} +0 -0
  1037. /package/dist/{chunk-73B3RQJC.js.map → chunk-SI4UJAWX.js.map} +0 -0
  1038. /package/dist/{chunk-6GKC2PBR.js.map → chunk-SMUBQFWI.js.map} +0 -0
  1039. /package/dist/{chunk-FEELV5IV.js.map → chunk-SQ7DRYCC.js.map} +0 -0
  1040. /package/dist/{chunk-HWSUW5PX.js.map → chunk-SQWQDLAJ.js.map} +0 -0
  1041. /package/dist/{chunk-R7CQCE3E.js.map → chunk-SWEMPOSU.js.map} +0 -0
  1042. /package/dist/{chunk-QNEX7FEC.js.map → chunk-TREEFO3C.js.map} +0 -0
  1043. /package/dist/{chunk-J2QOKD2F.js.map → chunk-UHEMNHQJ.js.map} +0 -0
  1044. /package/dist/{chunk-G3KO2HFZ.js.map → chunk-UKBVKVRG.js.map} +0 -0
  1045. /package/dist/{chunk-D5MF337I.js.map → chunk-UQ7Z3LS3.js.map} +0 -0
  1046. /package/dist/{chunk-CBCGVPHB.js.map → chunk-WDR33O6G.js.map} +0 -0
  1047. /package/dist/{chunk-AUWN3C2K.js.map → chunk-WQWZIGJA.js.map} +0 -0
  1048. /package/dist/{chunk-CHFKTRB5.js.map → chunk-WSMUAEDW.js.map} +0 -0
  1049. /package/dist/{chunk-IJDF7D4U.js.map → chunk-WX34KNTM.js.map} +0 -0
  1050. /package/dist/{chunk-P5H2BL4J.js.map → chunk-X5MTXAN6.js.map} +0 -0
  1051. /package/dist/{chunk-J57EXXFU.js.map → chunk-Y74DTGZM.js.map} +0 -0
  1052. /package/dist/{chunk-GWM4DCAK.js.map → chunk-YHEBXQW3.js.map} +0 -0
  1053. /package/dist/{chunk-HF5V7TWU.js.map → chunk-YMHYBQRY.js.map} +0 -0
  1054. /package/dist/{chunk-WESRVXFS.js.map → chunk-YXPR5IMS.js.map} +0 -0
  1055. /package/dist/{chunk-DL2W4N7J.js.map → chunk-Z3GHDRUA.js.map} +0 -0
  1056. /package/dist/{chunk-EXZ2NIKX.js.map → chunk-ZCUOX3KZ.js.map} +0 -0
  1057. /package/dist/{chunk-A3VUXG5G.js.map → chunk-ZQJMMVM4.js.map} +0 -0
  1058. /package/dist/{claim-Y5HNMIGT.js.map → claim-EI5N4A47.js.map} +0 -0
  1059. /package/dist/{client-LY2JCQS2.js.map → client-27EKS6NO.js.map} +0 -0
  1060. /package/dist/{code-7CBNYUPU.js.map → code-UJGLMXFF.js.map} +0 -0
  1061. /package/dist/{companies-KXL2F27Q.js.map → companies-CZTP6IHE.js.map} +0 -0
  1062. /package/dist/{complete-Y47RTEZU.js.map → complete-3QGPPKMF.js.map} +0 -0
  1063. /package/dist/{config-7COTFJWK.js.map → config-ZE2VGIWJ.js.map} +0 -0
  1064. /package/dist/{connect-VOCZSB3W.js.map → connect-TLXPTBJQ.js.map} +0 -0
  1065. /package/dist/{content-OXMONMHJ.js.map → content-H3JSXJDS.js.map} +0 -0
  1066. /package/dist/{conversation-DJLUJC2V.js.map → conversation-LF2TSYGP.js.map} +0 -0
  1067. /package/dist/{conversion-report-ZRNV7X7D.js.map → conversion-report-4R54PSAO.js.map} +0 -0
  1068. /package/dist/{conversion-upload-command-IMHHSGYU.js.map → conversion-upload-command-S3Z24A3E.js.map} +0 -0
  1069. /package/dist/{conversion-writes-7N5UDQGH.js.map → conversion-writes-FTEVGZ42.js.map} +0 -0
  1070. /package/dist/{conversions-CRRH74GZ.js.map → conversions-GK7AETBW.js.map} +0 -0
  1071. /package/dist/{conversions-QOXRO26I.js.map → conversions-QS6SHY2T.js.map} +0 -0
  1072. /package/dist/{countries-UXAUGSBR.js.map → countries-N6QRDL3M.js.map} +0 -0
  1073. /package/dist/{create-4HHYBOZF.js.map → create-4273VLWV.js.map} +0 -0
  1074. /package/dist/{create-FVIVHA37.js.map → create-7CQ3UUBV.js.map} +0 -0
  1075. /package/dist/{create-XSXCJ2IS.js.map → create-BHCH355C.js.map} +0 -0
  1076. /package/dist/{create-YTCXQUUX.js.map → create-P4CJHMQL.js.map} +0 -0
  1077. /package/dist/{creatives-6DJPLVV7.js.map → creatives-BEJAG3KH.js.map} +0 -0
  1078. /package/dist/{creatives-F26GDJG2.js.map → creatives-KYQGTI3K.js.map} +0 -0
  1079. /package/dist/{creatives-ONKKGW5T.js.map → creatives-NZ5QO6GE.js.map} +0 -0
  1080. /package/dist/{credentials-6W4YNIWY.js.map → credentials-YDPXORLZ.js.map} +0 -0
  1081. /package/dist/{critique-JNWRNCVW.js.map → critique-BH7X2YMB.js.map} +0 -0
  1082. /package/dist/{critique-EFZPHFIS.js.map → critique-WI6RJPVE.js.map} +0 -0
  1083. /package/dist/{crm-E3BPZUW3.js.map → crm-MJ2JTVJ4.js.map} +0 -0
  1084. /package/dist/{crm-MAZU2GZR.js.map → crm-VQGN324C.js.map} +0 -0
  1085. /package/dist/{crop-3ZV5BFCA.js.map → crop-7GN4HNRS.js.map} +0 -0
  1086. /package/dist/{currency-PGLGLRKU.js.map → currency-JU2KJL5M.js.map} +0 -0
  1087. /package/dist/{custom-conversions-TV23XQHW.js.map → custom-conversions-RP4QBTB3.js.map} +0 -0
  1088. /package/dist/{customers-I2EHMEX3.js.map → customers-Y3WQXTMW.js.map} +0 -0
  1089. /package/dist/{decide-EGQ3CRHI.js.map → decide-E76GNTLK.js.map} +0 -0
  1090. /package/dist/{delete-R2SEUSLV.js.map → delete-6OAL62TH.js.map} +0 -0
  1091. /package/dist/{delete-MN6GZAZH.js.map → delete-6U33BZA3.js.map} +0 -0
  1092. /package/dist/{delete-A5NP6I7U.js.map → delete-AHKK4OLO.js.map} +0 -0
  1093. /package/dist/{delete-QMIJ5Z3V.js.map → delete-BNJ6CLRE.js.map} +0 -0
  1094. /package/dist/{delete-ZGBBWFAW.js.map → delete-NSMWNT6G.js.map} +0 -0
  1095. /package/dist/{delete-MUPTLWHI.js.map → delete-NZGAMH5L.js.map} +0 -0
  1096. /package/dist/{demographics-3DHCGMUR.js.map → demographics-RKEEKNDS.js.map} +0 -0
  1097. /package/dist/{describe-FCTM53MM.js.map → describe-PNYNA24Q.js.map} +0 -0
  1098. /package/dist/{describe-4O3VCV6L.js.map → describe-UR7JDT6A.js.map} +0 -0
  1099. /package/dist/{dimensions-AD4VS5AH.js.map → dimensions-2RKIUOFQ.js.map} +0 -0
  1100. /package/dist/{discard-7QUFDYVK.js.map → discard-QL7CZECC.js.map} +0 -0
  1101. /package/dist/{discover-UQXQUPNO.js.map → discover-AOZAQTHH.js.map} +0 -0
  1102. /package/dist/{discover-6XSPNZYE.js.map → discover-MG6IPEPQ.js.map} +0 -0
  1103. /package/dist/{domain-NRPTYLT2.js.map → domain-Z5XEKZK5.js.map} +0 -0
  1104. /package/dist/{download-IE6XLFHM.js.map → download-5YLBWRLM.js.map} +0 -0
  1105. /package/dist/{draft-VVDI2OR3.js.map → draft-5PHDYG3Z.js.map} +0 -0
  1106. /package/dist/{draft-24B2O3SG.js.map → draft-D5UXZOCI.js.map} +0 -0
  1107. /package/dist/{draft-R5RZ72PS.js.map → draft-KRLI7NMU.js.map} +0 -0
  1108. /package/dist/{draft-MGKJ5RYI.js.map → draft-MYXJYP44.js.map} +0 -0
  1109. /package/dist/{draft-PPRDQDGW.js.map → draft-OOONTI3H.js.map} +0 -0
  1110. /package/dist/{draft-S6VPKZYY.js.map → draft-RDWGFLQF.js.map} +0 -0
  1111. /package/dist/{draft-FGPMNIZK.js.map → draft-RWQ524FL.js.map} +0 -0
  1112. /package/dist/{draft-ENA7S4Y7.js.map → draft-WOEBIUS5.js.map} +0 -0
  1113. /package/dist/{env-YLOVBOAE.js.map → env-A3LNICIR.js.map} +0 -0
  1114. /package/dist/{experiment-PHFP6IBM.js.map → experiment-D5XXSX34.js.map} +0 -0
  1115. /package/dist/{export-R2IMUCQO.js.map → export-XT4W2QRS.js.map} +0 -0
  1116. /package/dist/{extract-OQP3TSQG.js.map → extract-N7XCALAO.js.map} +0 -0
  1117. /package/dist/{facets-HFX6SZT6.js.map → facets-RRSMESZC.js.map} +0 -0
  1118. /package/dist/{favorites-NS73FDG5.js.map → favorites-BCEDYFGC.js.map} +0 -0
  1119. /package/dist/{feed-SQPOB7SP.js.map → feed-56OKTKB2.js.map} +0 -0
  1120. /package/dist/{feedback-XHSJBBEJ.js.map → feedback-VT5OFS4L.js.map} +0 -0
  1121. /package/dist/{feedback-record-Z7Z4AW2L.js.map → feedback-record-BRKYBCTO.js.map} +0 -0
  1122. /package/dist/{fetch-TPRDJJGI.js.map → fetch-7Y5I5R4I.js.map} +0 -0
  1123. /package/dist/{fetch-PQ3NOPIE.js.map → fetch-QLSTBRU3.js.map} +0 -0
  1124. /package/dist/{find-Y22AANDE.js.map → find-BFPQFKBM.js.map} +0 -0
  1125. /package/dist/{fit-XJPM6573.js.map → fit-67A4DTQV.js.map} +0 -0
  1126. /package/dist/{flows-NF3IHOVV.js.map → flows-3D2JZRSV.js.map} +0 -0
  1127. /package/dist/{follow-N3DQZV7M.js.map → follow-XTF3P6HJ.js.map} +0 -0
  1128. /package/dist/{follow-competitors-BZPCBGIB.js.map → follow-competitors-IGIZLWSE.js.map} +0 -0
  1129. /package/dist/{following-KESWTEBR.js.map → following-BCVT7335.js.map} +0 -0
  1130. /package/dist/{fonts-3FX3OYEQ.js.map → fonts-54NRDXMH.js.map} +0 -0
  1131. /package/dist/{forecast-MO4PAKTH.js.map → forecast-HAYOQZM7.js.map} +0 -0
  1132. /package/dist/{forecast-CYSEUIS4.js.map → forecast-MVZ3KC2V.js.map} +0 -0
  1133. /package/dist/{funding-G6S4UVU5.js.map → funding-ADGAOVHJ.js.map} +0 -0
  1134. /package/dist/{funnel-MM4AXAE7.js.map → funnel-JMTQM66R.js.map} +0 -0
  1135. /package/dist/{ga4-2QHOA4RO.js.map → ga4-EODX3BLY.js.map} +0 -0
  1136. /package/dist/{generate-F4FDRDAW.js.map → generate-GBFCMDDB.js.map} +0 -0
  1137. /package/dist/{get-HV2VIJYO.js.map → get-DYO32OOJ.js.map} +0 -0
  1138. /package/dist/{get-3P2EQLP3.js.map → get-LEHJQWSB.js.map} +0 -0
  1139. /package/dist/{get-NOKSZPIV.js.map → get-LZ7D3ECW.js.map} +0 -0
  1140. /package/dist/{get-MBGO4VJD.js.map → get-UHXFWSDG.js.map} +0 -0
  1141. /package/dist/{get-FJB3X44Z.js.map → get-WDVKP3KN.js.map} +0 -0
  1142. /package/dist/{get-LHL6CGOR.js.map → get-Y2JH43JN.js.map} +0 -0
  1143. /package/dist/{get-WHC4SRYK.js.map → get-YQNLA2U7.js.map} +0 -0
  1144. /package/dist/{gif-SFYVDLCU.js.map → gif-OMNWBH2P.js.map} +0 -0
  1145. /package/dist/{google-MY45TUC4.js.map → google-I52FWBG4.js.map} +0 -0
  1146. /package/dist/{google-XRAMIES5.js.map → google-UMXRJBEC.js.map} +0 -0
  1147. /package/dist/{google-ads-DMOYC7OY.js.map → google-ads-6CIJMSZU.js.map} +0 -0
  1148. /package/dist/{group-TZJCKHKS.js.map → group-H7GSELQP.js.map} +0 -0
  1149. /package/dist/{group-6RDJTWVN.js.map → group-ON6VSABL.js.map} +0 -0
  1150. /package/dist/{gsc-HD6UFRYM.js.map → gsc-GWT3XS6Q.js.map} +0 -0
  1151. /package/dist/{history-PY5BYL7T.js.map → history-AYS4Y2B2.js.map} +0 -0
  1152. /package/dist/{history-2WBZRPPE.js.map → history-R4UN3RDS.js.map} +0 -0
  1153. /package/dist/{hubspot-WQ6P3TZL.js.map → hubspot-3FGLZWCQ.js.map} +0 -0
  1154. /package/dist/{icon-BMCDFGMN.js.map → icon-2BJJI76Q.js.map} +0 -0
  1155. /package/dist/{ideas-VLHUTFHP.js.map → ideas-FORVDDIU.js.map} +0 -0
  1156. /package/dist/{images-C4TBUPXM.js.map → images-ZBW3VJ54.js.map} +0 -0
  1157. /package/dist/{improve-P6F2HXYQ.js.map → improve-AC366L6D.js.map} +0 -0
  1158. /package/dist/{ingest-V42IQ2FN.js.map → ingest-2E25R57K.js.map} +0 -0
  1159. /package/dist/{ingest-SXT33KE6.js.map → ingest-CNYO3QO4.js.map} +0 -0
  1160. /package/dist/{insights-DI4W3D2Y.js.map → insights-CYYRH2Z7.js.map} +0 -0
  1161. /package/dist/{insights-X75LRPS3.js.map → insights-UXG7UM6V.js.map} +0 -0
  1162. /package/dist/{inspect-YO5ER5OK.js.map → inspect-ZMUPILGB.js.map} +0 -0
  1163. /package/dist/{inspiration-MDCCU2CF.js.map → inspiration-QB4S3DMJ.js.map} +0 -0
  1164. /package/dist/{intent-A4SOIFKK.js.map → intent-6O25RUJM.js.map} +0 -0
  1165. /package/dist/{job-QDLPQFIT.js.map → job-YC7DB63V.js.map} +0 -0
  1166. /package/dist/{job-create-6XKD5GEC.js.map → job-create-6SFRJGQZ.js.map} +0 -0
  1167. /package/dist/{job-status-MH7CGLWC.js.map → job-status-ILDJJFE3.js.map} +0 -0
  1168. /package/dist/{keep-42SLV4CR.js.map → keep-XSR2BGJ7.js.map} +0 -0
  1169. /package/dist/{keyword-gap-D4P2CC2L.js.map → keyword-gap-7INCORTM.js.map} +0 -0
  1170. /package/dist/{keyword-metrics-JLTZ4533.js.map → keyword-metrics-P2CGT52I.js.map} +0 -0
  1171. /package/dist/{keywords-for-site-UCUPPHVX.js.map → keywords-for-site-NQWXZAHW.js.map} +0 -0
  1172. /package/dist/{landing-JWD3U2K5.js.map → landing-H5PBNIXB.js.map} +0 -0
  1173. /package/dist/{landings-5IYXHA5Z.js.map → landings-EJB44ZC3.js.map} +0 -0
  1174. /package/dist/{languages-SRFGW6Z3.js.map → languages-ENP4VD37.js.map} +0 -0
  1175. /package/dist/{languages-HX4FD3GX.js.map → languages-USSQXXKG.js.map} +0 -0
  1176. /package/dist/{logo-4JOWGJ5A.js.map → launches-6A2DB2CU.js.map} +0 -0
  1177. /package/dist/{layerize-U672AXED.js.map → layerize-24V6CBJP.js.map} +0 -0
  1178. /package/dist/{leads-WMKTJWW5.js.map → leads-57SAJJVP.js.map} +0 -0
  1179. /package/dist/{leads-MXUQISOC.js.map → leads-DVANT2Y4.js.map} +0 -0
  1180. /package/dist/{learn-C4AJ2JDS.js.map → learn-J4AZFB3S.js.map} +0 -0
  1181. /package/dist/{library-RPFXNER4.js.map → library-SWZCNISN.js.map} +0 -0
  1182. /package/dist/{lighthouse-SJ4QNLUS.js.map → lighthouse-DNFAIYJW.js.map} +0 -0
  1183. /package/dist/{line-item-writes-N5XUSGEM.js.map → line-item-writes-YYHWSRNO.js.map} +0 -0
  1184. /package/dist/{line-items-QIBNOEOH.js.map → line-items-AG57EWW4.js.map} +0 -0
  1185. /package/dist/{link-ZC6MH7AP.js.map → link-MFV7GZGU.js.map} +0 -0
  1186. /package/dist/{linkedin-MIEUUP4J.js.map → linkedin-NZ4B4XD5.js.map} +0 -0
  1187. /package/dist/{list-K56J7FZW.js.map → list-3YCOZGDO.js.map} +0 -0
  1188. /package/dist/{list-LLBBUXTM.js.map → list-ARXNAR54.js.map} +0 -0
  1189. /package/dist/{list-SXYVDDMU.js.map → list-AZLVAMKH.js.map} +0 -0
  1190. /package/dist/{list-HT4HZWF4.js.map → list-DMS5JXFD.js.map} +0 -0
  1191. /package/dist/{list-XFIOXFB2.js.map → list-DWWJSATF.js.map} +0 -0
  1192. /package/dist/{list-M4Z3WYPM.js.map → list-GT3Z4FP7.js.map} +0 -0
  1193. /package/dist/{list-GQ65MC2N.js.map → list-HMKUDCC7.js.map} +0 -0
  1194. /package/dist/{list-LYRCC67M.js.map → list-RB2YPELW.js.map} +0 -0
  1195. /package/dist/{locations-WNSET6RM.js.map → locations-BWR57DBT.js.map} +0 -0
  1196. /package/dist/{locations-PQWB7EGC.js.map → locations-P6D62A7Y.js.map} +0 -0
  1197. /package/dist/{log-SXXIU7ZP.js.map → log-E5QKCPLW.js.map} +0 -0
  1198. /package/dist/{lookup-QGGSAHOO.js.map → logo-NJX3MBIB.js.map} +0 -0
  1199. /package/dist/{output-ZL62UZHQ.js.map → lookup-P42SS2PI.js.map} +0 -0
  1200. /package/dist/{make-6OQBIYWC.js.map → make-XHJCIMDV.js.map} +0 -0
  1201. /package/dist/{map-YMFE54VT.js.map → map-663JJAWP.js.map} +0 -0
  1202. /package/dist/{mcp-QAZ4XLMN.js.map → mcp-LBHA56XH.js.map} +0 -0
  1203. /package/dist/{media-2SWDJDA6.js.map → media-HO7BUHS3.js.map} +0 -0
  1204. /package/dist/{media-O5L7GO72.js.map → media-XTEUETJW.js.map} +0 -0
  1205. /package/dist/{media-sources-LF6I6AYP.js.map → media-sources-24ZIRZ5K.js.map} +0 -0
  1206. /package/dist/{members-RGK6FRVY.js.map → members-YHP5AFHN.js.map} +0 -0
  1207. /package/dist/{meta-37L6QBOZ.js.map → meta-2DVRGWQY.js.map} +0 -0
  1208. /package/dist/{metrics-WVG3IUMH.js.map → metrics-JZFE7QEY.js.map} +0 -0
  1209. /package/dist/{models-5QWYGJ7Y.js.map → models-P426RWLB.js.map} +0 -0
  1210. /package/dist/{normalize-P5Q3F7FU.js.map → normalize-4CA6PRTP.js.map} +0 -0
  1211. /package/dist/{normalize-5G6MMOAB.js.map → normalize-KI3H6PIJ.js.map} +0 -0
  1212. /package/dist/{options-TYQL4KRW.js.map → options-WWKYT42M.js.map} +0 -0
  1213. /package/dist/{performance-2K425XAN.js.map → output-BMVGPVDO.js.map} +0 -0
  1214. /package/dist/{page-FZ7IZ5CV.js.map → page-3QQ5YTPB.js.map} +0 -0
  1215. /package/dist/{pages-SS7TZTHV.js.map → pages-JJPINALE.js.map} +0 -0
  1216. /package/dist/{query-IJVVSB54.js.map → performance-3LV66WB6.js.map} +0 -0
  1217. /package/dist/{pinterest-UETS7U7U.js.map → pinterest-PY4IN2HA.js.map} +0 -0
  1218. /package/dist/{pixels-LCTMLKGP.js.map → pixels-EWMWYO62.js.map} +0 -0
  1219. /package/dist/{pixels-D73GQFGM.js.map → pixels-KBNSAR3Z.js.map} +0 -0
  1220. /package/dist/{plan-4HLITU3A.js.map → plan-ES2CQAM7.js.map} +0 -0
  1221. /package/dist/{preview-RU54Z4EM.js.map → preview-JZ3RTTGM.js.map} +0 -0
  1222. /package/dist/{promoted-tweet-writes-YIZGFYZO.js.map → promoted-tweet-writes-VVYERLEE.js.map} +0 -0
  1223. /package/dist/{promoted-tweets-D5NKZ3FS.js.map → promoted-tweets-IIZSTAZ2.js.map} +0 -0
  1224. /package/dist/{properties-ZUDQH3LE.js.map → properties-DCGIYAUT.js.map} +0 -0
  1225. /package/dist/{publish-WDHGUTNP.js.map → publish-JB62BHIT.js.map} +0 -0
  1226. /package/dist/{reddit-YBEYPDZP.js.map → query-2QW6F77B.js.map} +0 -0
  1227. /package/dist/{query-26T7XATH.js.map → query-R52ZZVAJ.js.map} +0 -0
  1228. /package/dist/{query-SHUOHXTO.js.map → query-VMM7WUVR.js.map} +0 -0
  1229. /package/dist/{questionnaire-7AEVHZDR.js.map → questionnaire-Y4CG6C2J.js.map} +0 -0
  1230. /package/dist/{read-UYSQAXRV.js.map → read-YKDOJWQ7.js.map} +0 -0
  1231. /package/dist/{run-PLUL33QX.js.map → reddit-FBJK7WSP.js.map} +0 -0
  1232. /package/dist/{refresh-NKBJT47F.js.map → refresh-FECT4G2H.js.map} +0 -0
  1233. /package/dist/{release-4UPLYFTE.js.map → release-VLMNN6ZK.js.map} +0 -0
  1234. /package/dist/{relevant-pages-OI7GTPOK.js.map → relevant-pages-H2PGC2KL.js.map} +0 -0
  1235. /package/dist/{remove-2KACTXKP.js.map → remove-AN3M44KY.js.map} +0 -0
  1236. /package/dist/{remove-HEL2YO3Q.js.map → remove-YHA5KSIQ.js.map} +0 -0
  1237. /package/dist/{reopen-3RWFCQU2.js.map → reopen-Q2I6YJAE.js.map} +0 -0
  1238. /package/dist/{rerun-LM52CBPS.js.map → rerun-52T2HVEB.js.map} +0 -0
  1239. /package/dist/{research-VW37GQ5K.js.map → research-DYO7YJCJ.js.map} +0 -0
  1240. /package/dist/{research-547KDC54.js.map → research-PJVN7NK5.js.map} +0 -0
  1241. /package/dist/{reset-LHQJDSVK.js.map → reset-AKULZS2F.js.map} +0 -0
  1242. /package/dist/{reset-OIRUQHMS.js.map → reset-ZRSKUTDZ.js.map} +0 -0
  1243. /package/dist/{resolve-2N35OI2Y.js.map → resolve-HUUWAN4P.js.map} +0 -0
  1244. /package/dist/{retry-GXH7SCNK.js.map → retry-FQLZAHVP.js.map} +0 -0
  1245. /package/dist/{retry-EZRMUB4I.js.map → retry-SMWZCG5M.js.map} +0 -0
  1246. /package/dist/{retry-failed-NWLH6WHK.js.map → retry-failed-5LIE6TEY.js.map} +0 -0
  1247. /package/dist/{run-DWR24LCU.js.map → run-6ZXSQNYU.js.map} +0 -0
  1248. /package/dist/{search-4HIOKYFR.js.map → run-NC7FBPX3.js.map} +0 -0
  1249. /package/dist/{scaffold-ad-W4RZXLDX.js.map → scaffold-ad-HU3XZNAD.js.map} +0 -0
  1250. /package/dist/{scaffold-static-ad-IPJYRAOT.js.map → scaffold-static-ad-ZLVWXEMT.js.map} +0 -0
  1251. /package/dist/{scaffold-video-XBII4YLS.js.map → scaffold-video-P47NS63O.js.map} +0 -0
  1252. /package/dist/{schedule-S547HPUT.js.map → schedule-IR4VWC3B.js.map} +0 -0
  1253. /package/dist/{schedule-QZPDYWHK.js.map → schedule-IVI2MUCE.js.map} +0 -0
  1254. /package/dist/{scheduled-agents-DWSVPMZP.js.map → scheduled-agents-OYSZHC2D.js.map} +0 -0
  1255. /package/dist/{schema-SQIP75WG.js.map → schema-6UQ44CN7.js.map} +0 -0
  1256. /package/dist/{schema-O4JTYZEY.js.map → schema-KZ5AKVOA.js.map} +0 -0
  1257. /package/dist/{scrape-TI6S2W7I.js.map → scrape-XEAYZKOL.js.map} +0 -0
  1258. /package/dist/{screenshot-XFAYY4WW.js.map → screenshot-3D27DMQF.js.map} +0 -0
  1259. /package/dist/{search-KFDL2IGG.js.map → search-4KC24VST.js.map} +0 -0
  1260. /package/dist/{search-D2IV7KFJ.js.map → search-A6QHEMD6.js.map} +0 -0
  1261. /package/dist/{search-L3RYKE3G.js.map → search-FX6G524Z.js.map} +0 -0
  1262. /package/dist/{search-IZPDHRJ4.js.map → search-QPSEDI3B.js.map} +0 -0
  1263. /package/dist/{shared-3CGGKICB.js.map → search-XTO25YD7.js.map} +0 -0
  1264. /package/dist/{search-copy-QZXCAGK4.js.map → search-copy-VN5GYYEK.js.map} +0 -0
  1265. /package/dist/{seeds-VUNZMHZH.js.map → seeds-5V5ENQXJ.js.map} +0 -0
  1266. /package/dist/{select-IAHFSSDX.js.map → select-PSYW24UO.js.map} +0 -0
  1267. /package/dist/{sends-UT4WXVOS.js.map → sends-WGVYTYGH.js.map} +0 -0
  1268. /package/dist/{sequences-5RAGZE7L.js.map → sequences-U2RTLNMC.js.map} +0 -0
  1269. /package/dist/{set-prompt-WVQ4AI66.js.map → set-prompt-MOOJMT3G.js.map} +0 -0
  1270. /package/dist/{setup-links-DFGWE4CV.js.map → setup-links-Z7RUPZ34.js.map} +0 -0
  1271. /package/dist/{sync-definition-2SGGHSKR.js.map → shared-FUHFWNPF.js.map} +0 -0
  1272. /package/dist/{site-4XF273BE.js.map → site-M4WDZKOS.js.map} +0 -0
  1273. /package/dist/{sitemaps-3WDYQHYR.js.map → sitemaps-RRIXMGPC.js.map} +0 -0
  1274. /package/dist/{sites-G4DQ2Z2X.js.map → sites-LPZ4CRD6.js.map} +0 -0
  1275. /package/dist/{skills-PA26HXEP.js.map → skills-MD3XUHDB.js.map} +0 -0
  1276. /package/dist/{sources-PZXOSE4S.js.map → sources-FGQR6O2O.js.map} +0 -0
  1277. /package/dist/{sources-M46IYW42.js.map → sources-FTICTPMW.js.map} +0 -0
  1278. /package/dist/{stale-M64FB7J3.js.map → stale-U7V4JA5Q.js.map} +0 -0
  1279. /package/dist/{stats-6DPPYSP3.js.map → stats-H7KAPNQO.js.map} +0 -0
  1280. /package/dist/{status-C6UZ45WO.js.map → status-CQOEVUO4.js.map} +0 -0
  1281. /package/dist/{sticker-MC2IAIQB.js.map → sticker-N62W7CN6.js.map} +0 -0
  1282. /package/dist/{stock-B7LKMKUK.js.map → stock-FVLWUDVF.js.map} +0 -0
  1283. /package/dist/{studio-EQ2L6OBJ.js.map → studio-HAFREZ2U.js.map} +0 -0
  1284. /package/dist/{sync-VYOJ7G6S.js.map → sync-GKEITRE7.js.map} +0 -0
  1285. /package/dist/{sync-CLZDZL5F.js.map → sync-J4BDPJFG.js.map} +0 -0
  1286. /package/dist/{sync-V26UBMAN.js.map → sync-WD7EHL5I.js.map} +0 -0
  1287. /package/dist/{viewer-check-65TIGVAJ.js.map → sync-definition-OEN2H52T.js.map} +0 -0
  1288. /package/dist/{tag-manager-KIHXVFMF.js.map → tag-manager-BKK227XG.js.map} +0 -0
  1289. /package/dist/{tags-6RGJF4GS.js.map → tags-635XZ5EN.js.map} +0 -0
  1290. /package/dist/{tags-ODT4WI57.js.map → tags-7YBWA53Y.js.map} +0 -0
  1291. /package/dist/{tags-SURC65KF.js.map → tags-BBQRSPPY.js.map} +0 -0
  1292. /package/dist/{tags-JN475JPP.js.map → tags-GBD5PMAV.js.map} +0 -0
  1293. /package/dist/{tags-FGCZJZWK.js.map → tags-ZDHZ5BVI.js.map} +0 -0
  1294. /package/dist/{targeting-constants-6Y5J2PPZ.js.map → targeting-constants-7O3C4YQ3.js.map} +0 -0
  1295. /package/dist/{targeting-criteria-NMZD3CK6.js.map → targeting-criteria-UMH6DWEM.js.map} +0 -0
  1296. /package/dist/{targets-L4M53NRI.js.map → targets-4LXD45G6.js.map} +0 -0
  1297. /package/dist/{templates-5AC4336C.js.map → templates-K6LNDYMC.js.map} +0 -0
  1298. /package/dist/{testimonials-YN2AB7U7.js.map → testimonials-WK6TRGZU.js.map} +0 -0
  1299. /package/dist/{themes-BYRMCXYR.js.map → themes-YQL34CHP.js.map} +0 -0
  1300. /package/dist/{top-companies-X75ZLN4Y.js.map → top-companies-GSA374H3.js.map} +0 -0
  1301. /package/dist/{translate-YPVSDMH6.js.map → translate-WJADKXVA.js.map} +0 -0
  1302. /package/dist/{triggers-GBKVEQZF.js.map → triggers-73RT2ATK.js.map} +0 -0
  1303. /package/dist/{tweets-KTM7HX5R.js.map → tweets-I67XFC75.js.map} +0 -0
  1304. /package/dist/{unfollow-WBBTVEHE.js.map → unfollow-FXJVGTY3.js.map} +0 -0
  1305. /package/dist/{unlink-ORHXBQKH.js.map → unlink-L6IA3GTM.js.map} +0 -0
  1306. /package/dist/{unstage-GYBJZWCZ.js.map → unstage-M4MNQBVM.js.map} +0 -0
  1307. /package/dist/{unstage-2R23KGQG.js.map → unstage-TCG43LSV.js.map} +0 -0
  1308. /package/dist/{update-VKPYJXNK.js.map → update-247ADVOY.js.map} +0 -0
  1309. /package/dist/{update-YTDA3XJ3.js.map → update-3VGGNWW4.js.map} +0 -0
  1310. /package/dist/{update-JTFWVXRB.js.map → update-7AP6HCOJ.js.map} +0 -0
  1311. /package/dist/{update-2VOYUTLV.js.map → update-WH7AYAU3.js.map} +0 -0
  1312. /package/dist/{upload-V42RNE7Q.js.map → upload-XOYOPYAU.js.map} +0 -0
  1313. /package/dist/{upload-NA62W5RS.js.map → upload-YXJDNDJH.js.map} +0 -0
  1314. /package/dist/{upscale-RXJUBHXN.js.map → upscale-57WGAUOE.js.map} +0 -0
  1315. /package/dist/{url-options-LZIHCPP4.js.map → url-options-3WB4OCDI.js.map} +0 -0
  1316. /package/dist/{url-params-5SRJGPT6.js.map → url-params-F6FPAQIS.js.map} +0 -0
  1317. /package/dist/{use-MHPNS4V4.js.map → use-LQUZTNPC.js.map} +0 -0
  1318. /package/dist/{validate-IIOV3YJK.js.map → validate-UN2BKVSQ.js.map} +0 -0
  1319. /package/dist/{variant-ZFCWILPG.js.map → variant-TJZ7XSZF.js.map} +0 -0
  1320. /package/dist/{videos-MIHTMO3G.js.map → videos-MUJA4PP4.js.map} +0 -0
  1321. /package/dist/{view-PYCGDGT2.js.map → view-BITF6POV.js.map} +0 -0
  1322. /package/dist/{web-2ACSE34L.js.map → web-6NE4HDQW.js.map} +0 -0
  1323. /package/dist/{winners-AI4PVSOI.js.map → winners-TLGCUW44.js.map} +0 -0
  1324. /package/dist/{winning-ads-2ZOUOAYM.js.map → winning-ads-HPVK6CM4.js.map} +0 -0
  1325. /package/dist/{write-commands-5TJ3LQ5F.js.map → write-commands-4YV2IADK.js.map} +0 -0
  1326. /package/dist/{write-commands-GLIDTGI3.js.map → write-commands-NWQQJ4NA.js.map} +0 -0
  1327. /package/dist/{write-commands-34L5LJIB.js.map → write-commands-PNZFKWTT.js.map} +0 -0
  1328. /package/dist/{write-commands-R3UCCBUI.js.map → write-commands-VSLV4X2O.js.map} +0 -0
  1329. /package/dist/{x-V7V47E4N.js.map → x-2BR4SXMI.js.map} +0 -0
@@ -1,4227 +0,0 @@
1
- // ../api/src/ads-google/limits.ts
2
- var GOOGLE_ADS_LIMITS = {
3
- budget: {
4
- nameMax: 255,
5
- amountMicrosMin: 1
6
- },
7
- campaign: {
8
- nameMax: 255,
9
- /** `campaign.final_url_suffix` — the query string appended to every final URL under the campaign. */
10
- finalUrlSuffixMax: 2048,
11
- /** `campaign.tracking_url_template` — the click-measurement URL every ad routes through. */
12
- trackingUrlTemplateMax: 2048,
13
- /** `campaign.url_custom_parameters` — Google caps a single entity at 8 `{_name}` parameters. */
14
- urlCustomParametersMax: 8,
15
- urlCustomParameterKeyMax: 16,
16
- urlCustomParameterValueMax: 250,
17
- /** `campaign.text_guidelines.term_exclusions` — words AI Max and Performance Max must never write. */
18
- termExclusionsMax: 25,
19
- termExclusionMax: 30,
20
- /** `campaign.text_guidelines.messaging_restrictions` — freeform rules for generated text. */
21
- messagingRestrictionsMax: 40,
22
- messagingRestrictionMax: 300
23
- },
24
- adGroup: {
25
- nameMax: 255
26
- },
27
- keyword: {
28
- textMax: 80,
29
- wordsMax: 10
30
- },
31
- responsiveSearchAd: {
32
- headlinesMin: 3,
33
- headlinesMax: 15,
34
- headlineTextMax: 30,
35
- descriptionsMin: 2,
36
- descriptionsMax: 4,
37
- descriptionTextMax: 90,
38
- pathMax: 15
39
- },
40
- responsiveDisplayAd: {
41
- headlinesMin: 1,
42
- headlinesMax: 5,
43
- headlineTextMax: 30,
44
- longHeadlineTextMax: 90,
45
- descriptionsMin: 1,
46
- descriptionsMax: 5,
47
- descriptionTextMax: 90,
48
- businessNameMax: 25
49
- },
50
- appAd: {
51
- headlinesMin: 1,
52
- headlinesMax: 5,
53
- headlineTextMax: 30,
54
- descriptionsMin: 1,
55
- descriptionsMax: 5,
56
- descriptionTextMax: 90,
57
- imagesMax: 20,
58
- youtubeVideosMax: 20
59
- },
60
- /** `DemandGenMultiAssetAdInfo` — the image-carrying Demand Gen ad. No long headline exists on it. */
61
- demandGenAd: {
62
- adNameMax: 255,
63
- headlinesMin: 1,
64
- headlinesMax: 5,
65
- headlineTextMax: 40,
66
- descriptionsMin: 1,
67
- descriptionsMax: 5,
68
- descriptionTextMax: 90,
69
- businessNameMax: 25
70
- },
71
- /**
72
- * `DemandGenVideoResponsiveAdInfo` — the Demand Gen ad that runs a YouTube video. It is the only
73
- * ad format with BOTH a headline list and a long-headline list, which is why its copy has no home
74
- * in `demandGenAd`: every content schema is strict, so a payload naming `longHeadlines` there is
75
- * refused, and before this format existed a served Demand Gen video ad could not be edited at all.
76
- */
77
- demandGenVideoAd: {
78
- adNameMax: 255,
79
- headlinesMin: 1,
80
- headlinesMax: 5,
81
- headlineTextMax: 40,
82
- longHeadlinesMin: 1,
83
- longHeadlinesMax: 5,
84
- longHeadlineTextMax: 90,
85
- descriptionsMin: 1,
86
- descriptionsMax: 5,
87
- descriptionTextMax: 90,
88
- businessNameMax: 25
89
- },
90
- sharedSet: {
91
- nameMax: 255
92
- },
93
- asset: {
94
- sitelinkLinkTextMax: 25,
95
- sitelinkDescriptionMax: 35,
96
- calloutTextMax: 25,
97
- // A snippet's HEADER has no length limit of its own — it has to be one of
98
- // Google's published headers (`structured-snippet-headers.ts`), the longest
99
- // of which is 29 characters. Only the values are capped.
100
- structuredSnippetValuesMin: 3,
101
- structuredSnippetValuesMax: 10,
102
- /**
103
- * Per VALUE, not per asset. Google rejects a 26-character value with a bare "Too long." at
104
- * `structured_snippet_asset.values[i]` — one red row inside an otherwise clean publish, plus
105
- * every link that depends on the asset. Confirmed live on v23: "Bases de datos vectoriales"
106
- * (26) rejected, its four neighbours accepted.
107
- */
108
- structuredSnippetValueMax: 25
109
- },
110
- conversionAction: {
111
- nameMax: 255
112
- },
113
- audience: {
114
- nameMax: 255,
115
- /** `membership_life_span` and a rule's lookback window top out at 540 days. */
116
- membershipLifeSpanDaysMax: 540
117
- },
118
- biddingStrategy: {
119
- nameMax: 255
120
- },
121
- label: {
122
- nameMax: 255
123
- },
124
- assetGroup: {
125
- nameMax: 255,
126
- headlinesMin: 3,
127
- headlinesMax: 15,
128
- headlineTextMax: 30,
129
- longHeadlinesMin: 1,
130
- longHeadlinesMax: 5,
131
- longHeadlineTextMax: 90,
132
- descriptionsMin: 2,
133
- descriptionsMax: 5,
134
- descriptionTextMax: 90,
135
- businessNameMax: 25
136
- }
137
- };
138
- var GOOGLE_ADS_QUERY_MAX_PAGE_SIZE = 8192;
139
- var KEYWORD_MATCH_TYPES = ["EXACT", "PHRASE", "BROAD"];
140
- var ADVERTISING_CHANNEL_TYPES = [
141
- "SEARCH",
142
- "DISPLAY",
143
- "PERFORMANCE_MAX",
144
- "DEMAND_GEN",
145
- "SHOPPING",
146
- "MULTI_CHANNEL",
147
- "TRAVEL",
148
- "HOTEL"
149
- ];
150
- var CHANNEL_CREATE_REFUSALS = {
151
- VIDEO: "Google does not allow Video campaigns to be created through its API. To run video on YouTube, stage a Demand Gen campaign with a Demand Gen video ad; for a Video views or reach campaign, ask the user to create it in Google Ads.",
152
- LOCAL: "Google retired Local campaigns \u2014 they became Performance Max. Stage a PERFORMANCE_MAX campaign with store-visit goals instead.",
153
- APP: "An App campaign is channel MULTI_CHANNEL with channelSubType APP_CAMPAIGN (installs) or APP_CAMPAIGN_FOR_ENGAGEMENT, plus appCampaignSetting.",
154
- SMART: "Baker can't create Smart campaigns: their business details (phone, website, business profile) are a setting Google refuses to check before publishing, so the change could never be validated. Stage a Search or Performance Max campaign instead, or ask the user to create the Smart campaign in Google Ads.",
155
- LOCAL_SERVICES: "Local Services campaigns are created by Google's own Local Services setup, not through the API. Ask the user to set it up in Google Ads.",
156
- DISCOVERY: "Discovery campaigns are now Demand Gen \u2014 stage a DEMAND_GEN campaign instead."
157
- };
158
- var ADVERTISING_CHANNEL_SUB_TYPES = [
159
- "DISPLAY_MOBILE_APP",
160
- "APP_CAMPAIGN",
161
- "APP_CAMPAIGN_FOR_ENGAGEMENT",
162
- "TRAVEL_ACTIVITIES"
163
- ];
164
- var SUB_TYPE_CHANNEL = {
165
- DISPLAY_MOBILE_APP: "DISPLAY",
166
- APP_CAMPAIGN: "MULTI_CHANNEL",
167
- APP_CAMPAIGN_FOR_ENGAGEMENT: "MULTI_CHANNEL",
168
- TRAVEL_ACTIVITIES: "TRAVEL"
169
- };
170
- var RETIRED_SUB_TYPE = "Google retired this campaign sub-type \u2014 it can no longer be created.";
171
- var SUB_TYPE_CREATE_REFUSALS = {
172
- SEARCH_EXPRESS: `${RETIRED_SUB_TYPE} Stage a standard Search campaign (leave the sub-type out).`,
173
- DISPLAY_EXPRESS: `${RETIRED_SUB_TYPE} Stage a standard Display campaign (leave the sub-type out).`,
174
- DISPLAY_GMAIL_AD: `${RETIRED_SUB_TYPE} Gmail ads now run through Demand Gen \u2014 stage a DEMAND_GEN campaign.`,
175
- DISPLAY_SMART_CAMPAIGN: `${RETIRED_SUB_TYPE} Stage a standard Display campaign, or Performance Max.`,
176
- SHOPPING_SMART_ADS: `${RETIRED_SUB_TYPE} Smart Shopping became Performance Max \u2014 stage a PERFORMANCE_MAX campaign.`,
177
- SHOPPING_COMPARISON_LISTING_ADS: `${RETIRED_SUB_TYPE} Ask the user to create a comparison-listing campaign in Google Ads.`,
178
- SEARCH_MOBILE_APP: `${RETIRED_SUB_TYPE} App promotion runs through App campaigns \u2014 stage MULTI_CHANNEL with sub-type APP_CAMPAIGN.`,
179
- SEARCH_MOBILE_APP_ENGAGEMENT: `${RETIRED_SUB_TYPE} App promotion runs through App campaigns \u2014 stage MULTI_CHANNEL with sub-type APP_CAMPAIGN_FOR_ENGAGEMENT.`,
180
- APP_CAMPAIGN_FOR_PRE_REGISTRATION: "Baker does not stage pre-registration App campaigns: Google needs the app open for pre-registration and goal settings Baker cannot set. Ask the user to create it in Google Ads.",
181
- VIDEO_ACTION: `${RETIRED_SUB_TYPE} Video action campaigns became Demand Gen \u2014 stage a DEMAND_GEN campaign.`,
182
- VIDEO_NON_SKIPPABLE: CHANNEL_CREATE_REFUSALS.VIDEO ?? RETIRED_SUB_TYPE,
183
- VIDEO_OUTSTREAM: CHANNEL_CREATE_REFUSALS.VIDEO ?? RETIRED_SUB_TYPE,
184
- LOCAL_CAMPAIGN: CHANNEL_CREATE_REFUSALS.LOCAL ?? RETIRED_SUB_TYPE
185
- };
186
- var BIDDING_STRATEGY_TYPES = [
187
- "MANUAL_CPC",
188
- "MAXIMIZE_CONVERSIONS",
189
- "MAXIMIZE_CONVERSION_VALUE",
190
- "TARGET_SPEND",
191
- "TARGET_CPA",
192
- "TARGET_ROAS",
193
- "TARGET_IMPRESSION_SHARE",
194
- "MANUAL_CPM",
195
- "MANUAL_CPV",
196
- "PERCENT_CPC",
197
- // Demand Gen's "maximize clicks at a target CPC" — `Campaign.target_cpc`, overridable per ad
198
- // group via `AdGroup.target_cpc_micros`. Confirmed present in v23.
199
- // It is one of the target-driven strategies governed by the August 2026 budget-limited
200
- // change, so modelling it as a strategy without a target would leave a Demand Gen
201
- // campaign's exposure invisible to `biddingTargetWarnings`.
202
- "TARGET_CPC"
203
- ];
204
- var VIDEO_BRAND_SAFETY_LEVELS = ["EXPANDED_INVENTORY", "STANDARD_INVENTORY", "LIMITED_INVENTORY"];
205
- var TARGET_IMPRESSION_SHARE_LOCATIONS = ["ANYWHERE_ON_PAGE", "TOP_OF_PAGE", "ABSOLUTE_TOP_OF_PAGE"];
206
- var MERGED_TARGET_STRATEGY_CHANNELS = /* @__PURE__ */ new Set(["SEARCH"]);
207
- var MERGED_TARGET_CPA_MESSAGE = "Google doesn't accept Target CPA as a bidding strategy of its own on a Search campaign \u2014 the target sits inside Maximize conversions. Choose Maximize conversions and give it the same target CPA; it bids exactly the same.";
208
- var MERGED_TARGET_ROAS_MESSAGE = "Google doesn't accept Target ROAS as a bidding strategy of its own on a Search campaign \u2014 the target sits inside Maximize conversion value. Choose Maximize conversion value and give it the same target ROAS; it bids exactly the same.";
209
- function mergedTargetStrategyRefusal(channelType, biddingType) {
210
- if (channelType === void 0 || !MERGED_TARGET_STRATEGY_CHANNELS.has(channelType)) {
211
- return void 0;
212
- }
213
- if (biddingType === "TARGET_CPA") {
214
- return MERGED_TARGET_CPA_MESSAGE;
215
- }
216
- return biddingType === "TARGET_ROAS" ? MERGED_TARGET_ROAS_MESSAGE : void 0;
217
- }
218
- var EMBEDDED_TARGET_CPA_DEMAND_GEN_MESSAGE = "Google doesn't accept a target CPA inside Maximize conversions on a Demand Gen campaign \u2014 there the target is its own bidding strategy. Choose Target CPA and give it the same target; it bids exactly the same.";
219
- function embeddedTargetOnDemandGenRefusal(channelType, bidding) {
220
- if (channelType !== "DEMAND_GEN" || bidding?.type !== "MAXIMIZE_CONVERSIONS") {
221
- return void 0;
222
- }
223
- return bidding.targetCpaMicros === void 0 ? void 0 : EMBEDDED_TARGET_CPA_DEMAND_GEN_MESSAGE;
224
- }
225
- var MANUAL_CPC_DEMAND_GEN_MESSAGE = "Google doesn't accept Manual CPC on a Demand Gen campaign. Choose Maximize conversions (with a Target CPA as its own strategy if you have a target), or Target CPC, which exists on this channel alone.";
226
- function manualCpcOnDemandGenRefusal(channelType, biddingType) {
227
- return channelType === "DEMAND_GEN" && biddingType === "MANUAL_CPC" ? MANUAL_CPC_DEMAND_GEN_MESSAGE : void 0;
228
- }
229
- var TARGET_CPC_DEMAND_GEN_MESSAGE = "Google only accepts Target CPC on a Demand Gen campaign \u2014 no other campaign type has a target CPC. Pick the bidding this campaign's type supports (Maximize conversions with a target CPA on Search), or set the target CPC on the Demand Gen campaign that should carry it.";
230
- function demandGenOnlyStrategyRefusal(channelType, biddingType) {
231
- if (biddingType !== "TARGET_CPC" || channelType === void 0 || channelType === "DEMAND_GEN") {
232
- return void 0;
233
- }
234
- return TARGET_CPC_DEMAND_GEN_MESSAGE;
235
- }
236
- var POSITIVE_GEO_TARGET_TYPES = ["PRESENCE_OR_INTEREST", "PRESENCE"];
237
- var NEGATIVE_GEO_TARGET_TYPES = ["PRESENCE_OR_INTEREST", "PRESENCE"];
238
- var BUDGET_DELIVERY_METHODS = ["STANDARD"];
239
- var ACCELERATED_DELIVERY_MESSAGE = "Google no longer runs accelerated delivery: a budget set to it cannot be attached to any campaign. Leave delivery at STANDARD (Google paces the budget across the day); to spend faster, raise the daily amount instead.";
240
- function retiredChoiceError(retired) {
241
- return (issue) => typeof issue.input === "string" ? retired[issue.input] : void 0;
242
- }
243
- var AD_GROUP_TYPES = [
244
- "SEARCH_STANDARD",
245
- "DISPLAY_STANDARD",
246
- "SHOPPING_PRODUCT_ADS",
247
- "VIDEO_BUMPER",
248
- "VIDEO_TRUE_VIEW_IN_STREAM",
249
- "VIDEO_TRUE_VIEW_IN_DISPLAY",
250
- "VIDEO_NON_SKIPPABLE_IN_STREAM",
251
- "VIDEO_RESPONSIVE",
252
- "VIDEO_EFFICIENT_REACH"
253
- ];
254
- var SHARED_SET_TYPES = [
255
- "NEGATIVE_KEYWORDS",
256
- "NEGATIVE_PLACEMENTS",
257
- "ACCOUNT_LEVEL_NEGATIVE_KEYWORDS",
258
- "BRANDS"
259
- ];
260
- var CALL_AD_RETIRED_MESSAGE = "Google retired call ads: they can no longer be created or edited. To take phone calls from search, stage a responsive search ad and add the phone number as a call asset in Google Ads (Baker cannot stage call assets yet) \u2014 and tell the user that is the one manual step.";
261
- var STAGEABLE_CREATE_STATUSES = ["ENABLED", "PAUSED"];
262
- var PINNED_FIELDS = ["HEADLINE_1", "HEADLINE_2", "HEADLINE_3", "DESCRIPTION_1", "DESCRIPTION_2"];
263
- var CONVERSION_ACTION_CATEGORIES = [
264
- "DEFAULT",
265
- "PAGE_VIEW",
266
- "PURCHASE",
267
- "SIGNUP",
268
- "LEAD",
269
- "DOWNLOAD",
270
- "ADD_TO_CART",
271
- "BEGIN_CHECKOUT",
272
- "SUBSCRIBE_PAID",
273
- "PHONE_CALL_LEAD",
274
- "SUBMIT_LEAD_FORM",
275
- "BOOK_APPOINTMENT",
276
- "REQUEST_QUOTE",
277
- "CONTACT"
278
- ];
279
- var CONVERSION_ACTION_TYPES = ["WEBPAGE", "UPLOAD_CLICKS", "UPLOAD_CALLS", "WEBSITE_CALL"];
280
- var GA4_CONVERSION_CREATE_MESSAGE = "Google Analytics conversions can't be created through Google's API \u2014 they are imported. Mark the event as a key event in Google Analytics, make sure the property is linked to Google Ads, and ask the user to import it in Google Ads (Goals \u2192 Conversions \u2192 New conversion action \u2192 Import \u2192 Google Analytics 4). To track it with a Google Ads tag instead, create a WEBPAGE conversion.";
281
- var CONVERSION_COUNTING_TYPES = ["ONE_PER_CLICK", "MANY_PER_CLICK"];
282
- var CONVERSION_ORIGINS = [
283
- "WEBSITE",
284
- "GOOGLE_HOSTED",
285
- "APP",
286
- "CALL_FROM_ADS",
287
- "STORE",
288
- "YOUTUBE_HOSTED"
289
- ];
290
- var USER_LIST_TYPES = ["CRM_BASED", "RULE_BASED", "LOGICAL", "BASIC", "LOOKALIKE"];
291
- var USER_LIST_STRING_OPERATORS = [
292
- "CONTAINS",
293
- "EQUALS",
294
- "STARTS_WITH",
295
- "ENDS_WITH",
296
- "NOT_EQUALS",
297
- "NOT_CONTAINS",
298
- "NOT_STARTS_WITH",
299
- "NOT_ENDS_WITH"
300
- ];
301
- var USER_LIST_NUMBER_OPERATORS = [
302
- "GREATER_THAN",
303
- "GREATER_THAN_OR_EQUAL",
304
- "EQUALS",
305
- "NOT_EQUALS",
306
- "LESS_THAN",
307
- "LESS_THAN_OR_EQUAL"
308
- ];
309
- var USER_LIST_LOGICAL_OPERATORS = ["ALL", "ANY", "NONE"];
310
- var LOOKALIKE_EXPANSION_LEVELS = ["NARROW", "BALANCED", "BROAD"];
311
- var TARGETING_DIMENSIONS = [
312
- "KEYWORD",
313
- "AUDIENCE",
314
- "TOPIC",
315
- "GENDER",
316
- "AGE_RANGE",
317
- "PLACEMENT",
318
- "PARENTAL_STATUS",
319
- "INCOME_RANGE"
320
- ];
321
- var ASSET_FIELD_TYPES = [
322
- "SITELINK",
323
- "CALLOUT",
324
- "STRUCTURED_SNIPPET",
325
- "CALL",
326
- "PRICE",
327
- "PROMOTION",
328
- "MOBILE_APP",
329
- "HEADLINE",
330
- "DESCRIPTION",
331
- "LOGO",
332
- /**
333
- * Kept because a draft staged before {@link IMAGE_ASSET_LINK_MESSAGE} shipped may still carry one,
334
- * and because it is the field type an asset-group image occupies. It is refused on an
335
- * `assetLink.attach` — see that message for what Google actually does with it.
336
- */
337
- "MARKETING_IMAGE",
338
- "BUSINESS_NAME",
339
- /**
340
- * The one image link a Search campaign takes. It carries the advertiser's logo beside the ad and
341
- * is the only image field type that survives Google's field-type check at all — swept live on v23
342
- * and v25, campaign and customer level both answer `CUSTOMER_NOT_VERIFIED` (an account fact,
343
- * fixed by advertiser verification) rather than a field-type refusal. Ad group level is not a
344
- * level Google links it at — see {@link BUSINESS_LOGO_LEVEL_MESSAGE}.
345
- */
346
- "BUSINESS_LOGO"
347
- ];
348
- var BUSINESS_LOGO_LEVEL_MESSAGE = "Google links a BUSINESS_LOGO at campaign or customer level only \u2014 an ad group link comes back UNSUPPORTED_FIELD_TYPE. Attach it to the campaign instead.";
349
- var IMAGE_ASSET_LINK_FIELD_TYPES = /* @__PURE__ */ new Set([
350
- "MARKETING_IMAGE",
351
- "SQUARE_MARKETING_IMAGE",
352
- "PORTRAIT_MARKETING_IMAGE",
353
- "AD_IMAGE"
354
- ]);
355
- function isImageAssetLinkFieldType(fieldType) {
356
- return IMAGE_ASSET_LINK_FIELD_TYPES.has(fieldType);
357
- }
358
- var ASSET_GROUP_ASSET_FIELD_TYPES = [
359
- "MARKETING_IMAGE",
360
- "SQUARE_MARKETING_IMAGE",
361
- "PORTRAIT_MARKETING_IMAGE",
362
- "LOGO",
363
- "LANDSCAPE_LOGO",
364
- "YOUTUBE_VIDEO",
365
- "HEADLINE",
366
- "LONG_HEADLINE",
367
- "DESCRIPTION",
368
- "BUSINESS_NAME",
369
- "CALL_TO_ACTION_SELECTION"
370
- ];
371
- var DEVICE_TYPES = ["MOBILE", "TABLET", "DESKTOP", "CONNECTED_TV", "OTHER"];
372
- var DAYS_OF_WEEK = ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"];
373
- var CAMPAIGN_OBJECTIVES = [
374
- "SALES",
375
- "LEADS",
376
- "WEBSITE_TRAFFIC",
377
- "PRODUCT_BRAND_CONSIDERATION",
378
- "BRAND_AWARENESS_REACH",
379
- "APP_PROMOTION",
380
- "LOCAL_STORE_VISITS"
381
- ];
382
- var MICROS_PER_UNIT = 1e6;
383
- function toMicros(amount) {
384
- return Math.round(amount * MICROS_PER_UNIT);
385
- }
386
- var PLAYBOOK_DAILY_BUDGET_FLOOR_MICROS = 10 * MICROS_PER_UNIT;
387
- var TEMP_REF_REGEX = /^g_temp_[A-Za-z0-9_-]{2,}$/;
388
- var NUMERIC_ID_REGEX = /^\d+$/;
389
- var RESOURCE_NAME_REGEX = /^customers\/\d+\/[A-Za-z]+\/[-\w~]+$/;
390
- var GEO_TARGET_CONSTANT_REGEX = /^geoTargetConstants\/\d+$/;
391
- var LANGUAGE_CONSTANT_REGEX = /^languageConstants\/\d+$/;
392
-
393
- // ../api/src/ads-google/conversion-upload.ts
394
- import { z } from "zod";
395
- var CONVERSION_UPLOAD_MAX_ROWS = 200;
396
- var SHA256_HEX_REGEX = /^[0-9a-f]{64}$/i;
397
- var conversionUploadActionSchema = z.union([
398
- z.string().regex(NUMERIC_ID_REGEX, "expected the numeric conversion action id"),
399
- z.string().regex(RESOURCE_NAME_REGEX, "expected a customers/\u2026/conversionActions/\u2026 resource name")
400
- ]);
401
- var clickIdSchema = z.string().min(1).max(512).regex(/^[A-Za-z0-9_.-]+$/, "a click id is letters, digits, '-', '_' and '.' only \u2014 paste the id, not the URL");
402
- var conversionDateTimeSchema = z.string().regex(
403
- /^\d{4}-\d{2}-\d{2}[T ]\d{2}:\d{2}:\d{2}(\.\d+)?(Z|[+-]\d{2}:\d{2})$/,
404
- "expected an ISO-8601 instant WITH a timezone, e.g. 2026-08-01T10:00:00Z or 2026-08-01T12:00:00+02:00"
405
- ).refine((value) => Number.isFinite(Date.parse(value)), "not a real date");
406
- var emailSchema = z.string().min(3).max(320).refine(
407
- (value) => SHA256_HEX_REGEX.test(value) || /^[^@\s]+@[^@\s]+\.[^@\s]+$/.test(value),
408
- "expected an email address"
409
- );
410
- var phoneSchema = z.string().min(4).max(64).refine(
411
- (value) => SHA256_HEX_REGEX.test(value) || /^\+\d[\d\s().-]{6,}$/.test(value),
412
- "expected a phone number in E.164 with its country code, e.g. +34600111222 \u2014 a local number hashes to something Google cannot match"
413
- );
414
- var nameSchema = z.string().min(1).max(120);
415
- var addressSchema = z.strictObject({
416
- givenName: nameSchema,
417
- familyName: nameSchema,
418
- /** ISO-3166-1 alpha-2, sent in the clear — it is not identifying on its own. */
419
- regionCode: z.string().regex(/^[A-Z]{2}$/, "expected a 2-letter country code, e.g. ES"),
420
- /** Sent in the clear, like the country: Google matches on it as a plain string. */
421
- postalCode: z.string().min(2).max(16),
422
- addressLine: z.string().min(1).max(200).optional(),
423
- city: z.string().min(1).max(100).optional(),
424
- /** State / province / region, whatever the country calls it. */
425
- administrativeArea: z.string().min(1).max(100).optional()
426
- }).describe("advanced matching by name and address");
427
- var conversionCountSchema = z.number().int().positive().max(1e4);
428
- var CONVERSION_EVENT_SOURCES = ["WEB", "APP", "IN_STORE", "PHONE", "OTHER"];
429
- var conversionUploadRowSchema = z.strictObject({
430
- /**
431
- * The order id the original conversion carried — Baker's server-side tag sends the Form
432
- * submission id here, so a repair reuses that. Required: without it Google has no way to tell a
433
- * re-send from a new conversion, and the only way to find out is to double-count.
434
- */
435
- orderId: z.string().min(1).max(64),
436
- conversionDateTime: conversionDateTimeSchema,
437
- gclid: clickIdSchema.optional(),
438
- gbraid: clickIdSchema.optional(),
439
- wbraid: clickIdSchema.optional(),
440
- email: emailSchema.optional(),
441
- phone: phoneSchema.optional(),
442
- address: addressSchema.optional(),
443
- conversionCount: conversionCountSchema.optional(),
444
- eventSource: z.enum(CONVERSION_EVENT_SOURCES).optional(),
445
- value: z.number().nonnegative().optional(),
446
- currency: z.string().regex(/^[A-Z]{3}$/, "expected a 3-letter currency code, e.g. EUR").optional()
447
- }).refine(
448
- (row) => Boolean(row.gclid ?? row.gbraid ?? row.wbraid ?? row.email ?? row.phone ?? row.address),
449
- "every conversion needs something to match on: a click id (gclid / gbraid / wbraid), or a customer's email, phone or name+address"
450
- ).refine(
451
- (row) => [row.gclid, row.gbraid, row.wbraid].filter(Boolean).length <= 1,
452
- "pass at most one click id per conversion \u2014 gclid, gbraid and wbraid are three ways of naming the same click"
453
- ).refine(
454
- (row) => row.value === void 0 || row.currency !== void 0,
455
- "a conversion with a value needs its currency too"
456
- ).refine((row) => row.currency === void 0 || row.value !== void 0, "currency was given with no value");
457
- var conversionUploadSchema = z.strictObject({
458
- conversionAction: conversionUploadActionSchema,
459
- conversions: z.array(conversionUploadRowSchema).min(1).max(CONVERSION_UPLOAD_MAX_ROWS)
460
- }).refine((payload) => {
461
- const ids = payload.conversions.map((row) => row.orderId);
462
- return new Set(ids).size === ids.length;
463
- }, "two conversions share an order id \u2014 each order id can appear once per upload");
464
- var MS_PER_DAY = 24 * 60 * 60 * 1e3;
465
-
466
- // ../api/src/ads-google/bidding-matrix.ts
467
- var STANDARD_BIDDING_BY_CHANNEL = {
468
- SEARCH: [
469
- "MANUAL_CPC",
470
- "MAXIMIZE_CONVERSIONS",
471
- "MAXIMIZE_CONVERSION_VALUE",
472
- "TARGET_SPEND",
473
- "TARGET_IMPRESSION_SHARE"
474
- ],
475
- DISPLAY: [
476
- "MANUAL_CPC",
477
- "MAXIMIZE_CONVERSIONS",
478
- "MAXIMIZE_CONVERSION_VALUE",
479
- "TARGET_SPEND",
480
- "TARGET_CPA",
481
- "TARGET_ROAS",
482
- "MANUAL_CPM"
483
- ],
484
- // Accepted with Manual CPC; Maximize conversions was OPERATION_NOT_PERMITTED_FOR_CONTEXT. Nothing
485
- // else was tried, so nothing else is claimed.
486
- "DISPLAY/DISPLAY_MOBILE_APP": ["MANUAL_CPC"],
487
- // Target ROAS answered "not enough conversions" — eligibility, so it stays.
488
- SHOPPING: ["MANUAL_CPC", "TARGET_SPEND", "TARGET_ROAS", "MAXIMIZE_CONVERSION_VALUE"],
489
- // Which one depends on the App goal (`APP_CAMPAIGN_GOALS`, channel-settings.ts); Manual CPC and
490
- // the rest were OPERATION_NOT_PERMITTED_FOR_CONTEXT.
491
- MULTI_CHANNEL: ["TARGET_CPA", "MAXIMIZE_CONVERSIONS", "TARGET_ROAS"],
492
- // With a target ROAS inside (required). Manual CPC, Maximize clicks, Target ROAS / CPA, Maximize
493
- // conversions and Percent CPC were all OPERATION_NOT_PERMITTED_FOR_CONTEXT. Hotel has no row: the
494
- // account cannot create one, so nothing was answered.
495
- TRAVEL: ["MAXIMIZE_CONVERSION_VALUE"],
496
- PERFORMANCE_MAX: ["MAXIMIZE_CONVERSIONS", "MAXIMIZE_CONVERSION_VALUE"],
497
- DEMAND_GEN: [
498
- "MAXIMIZE_CONVERSIONS",
499
- "MAXIMIZE_CONVERSION_VALUE",
500
- "TARGET_SPEND",
501
- "TARGET_CPA",
502
- "TARGET_ROAS",
503
- "TARGET_CPC"
504
- ]
505
- };
506
- var PORTFOLIO_BIDDING_BY_CHANNEL = {
507
- SEARCH: [
508
- "MAXIMIZE_CONVERSIONS",
509
- "MAXIMIZE_CONVERSION_VALUE",
510
- "TARGET_CPA",
511
- "TARGET_ROAS",
512
- "TARGET_SPEND",
513
- "TARGET_IMPRESSION_SHARE"
514
- ],
515
- DISPLAY: ["TARGET_CPA", "TARGET_ROAS", "TARGET_SPEND"],
516
- SHOPPING: ["MAXIMIZE_CONVERSION_VALUE", "TARGET_ROAS", "TARGET_SPEND"],
517
- MULTI_CHANNEL: [],
518
- PERFORMANCE_MAX: [],
519
- DEMAND_GEN: []
520
- };
521
- var PORTFOLIO_STRATEGY_TYPES = [
522
- "MAXIMIZE_CONVERSIONS",
523
- "MAXIMIZE_CONVERSION_VALUE",
524
- "TARGET_CPA",
525
- "TARGET_ROAS",
526
- "TARGET_SPEND",
527
- "TARGET_IMPRESSION_SHARE"
528
- ];
529
- var BIDDING_STRATEGY_LABELS = {
530
- MANUAL_CPC: "Manual CPC (MANUAL_CPC)",
531
- MAXIMIZE_CONVERSIONS: "Maximize conversions (MAXIMIZE_CONVERSIONS)",
532
- MAXIMIZE_CONVERSION_VALUE: "Maximize conversion value (MAXIMIZE_CONVERSION_VALUE)",
533
- TARGET_SPEND: "Maximize clicks (TARGET_SPEND)",
534
- TARGET_CPA: "Target CPA (TARGET_CPA)",
535
- TARGET_ROAS: "Target ROAS (TARGET_ROAS)",
536
- TARGET_IMPRESSION_SHARE: "Target impression share (TARGET_IMPRESSION_SHARE)",
537
- MANUAL_CPM: "Manual CPM (MANUAL_CPM)",
538
- MANUAL_CPV: "Manual CPV (MANUAL_CPV)",
539
- PERCENT_CPC: "Percent CPC (PERCENT_CPC)",
540
- TARGET_CPC: "Target CPC (TARGET_CPC)"
541
- };
542
- var CHANNEL_LABELS = {
543
- SEARCH: "Search",
544
- DISPLAY: "Display",
545
- PERFORMANCE_MAX: "Performance Max",
546
- DEMAND_GEN: "Demand Gen",
547
- SHOPPING: "Shopping",
548
- MULTI_CHANNEL: "App",
549
- TRAVEL: "Travel",
550
- HOTEL: "Hotel"
551
- };
552
- function labelOf(strategy) {
553
- return BIDDING_STRATEGY_LABELS[strategy] ?? strategy;
554
- }
555
- function rowFor(table, channelType, channelSubType) {
556
- return (channelSubType ? table[`${channelType}/${channelSubType}`] : void 0) ?? table[channelType];
557
- }
558
- var EMBEDDED_TARGETS_REFUSED = {
559
- SHOPPING: ["cpa", "roas"],
560
- MULTI_CHANNEL: ["cpa", "roas"],
561
- DISPLAY: ["cpa"],
562
- DEMAND_GEN: ["roas"]
563
- };
564
- function embeddedTargetRefusal(channelType, bidding) {
565
- const refused = channelType ? EMBEDDED_TARGETS_REFUSED[channelType] : void 0;
566
- if (!channelType || !bidding || !refused) {
567
- return void 0;
568
- }
569
- const channel = CHANNEL_LABELS[channelType] ?? channelType;
570
- const standalone = (strategy) => STANDARD_BIDDING_BY_CHANNEL[channelType]?.includes(strategy) ? ` \u2014 choose ${labelOf(strategy)} with the same target instead.` : ".";
571
- if (bidding.type === "MAXIMIZE_CONVERSION_VALUE" && bidding.targetRoas !== void 0 && refused.includes("roas")) {
572
- return `Google doesn't take a target ROAS inside Maximize conversion value on ${channel} campaigns${standalone("TARGET_ROAS")}`;
573
- }
574
- if (bidding.type === "MAXIMIZE_CONVERSIONS" && bidding.targetCpaMicros !== void 0 && refused.includes("cpa")) {
575
- return `Google doesn't take a target CPA inside Maximize conversions on ${channel} campaigns${standalone("TARGET_CPA")}`;
576
- }
577
- return void 0;
578
- }
579
- function biddingMatrixRefusal(query) {
580
- const { channelType, channelSubType, strategy, portfolio = false } = query;
581
- if (!channelType || !strategy) {
582
- return void 0;
583
- }
584
- const row = rowFor(
585
- portfolio ? PORTFOLIO_BIDDING_BY_CHANNEL : STANDARD_BIDDING_BY_CHANNEL,
586
- channelType,
587
- channelSubType
588
- );
589
- if (!row || row.includes(strategy)) {
590
- return void 0;
591
- }
592
- const channel = CHANNEL_LABELS[channelType] ?? channelType;
593
- if (portfolio && row.length === 0) {
594
- const own = rowFor(STANDARD_BIDDING_BY_CHANNEL, channelType, channelSubType) ?? [];
595
- return `Google doesn't let a ${channel} campaign use a portfolio bid strategy. Give it its own bidding instead: ${own.map(labelOf).join(", ")}.`;
596
- }
597
- const kind = portfolio ? "portfolio strategy" : "bidding";
598
- return `Google doesn't accept ${labelOf(strategy)} as ${kind} on a ${channel} campaign. It takes: ${row.map(labelOf).join(", ")}.`;
599
- }
600
-
601
- // ../api/src/ads-google/channel-settings.ts
602
- import { z as z2 } from "zod";
603
- var int64IdSchema = (what) => z2.string().regex(NUMERIC_ID_REGEX, `${what} must be the bare numeric id`);
604
- var SHOPPING_CAMPAIGN_PRIORITIES = [0, 1, 2];
605
- var shoppingSettingSchema = z2.strictObject({
606
- merchantId: int64IdSchema("merchantId"),
607
- feedLabel: z2.string().trim().min(1).max(20).optional(),
608
- /** Shopping only. Which Shopping campaign wins when several advertise the same product. */
609
- campaignPriority: z2.number().int().refine(
610
- (value) => SHOPPING_CAMPAIGN_PRIORITIES.includes(value),
611
- "campaignPriority is 0, 1 or 2"
612
- ).optional(),
613
- /** Shopping only. Local inventory ads — products in nearby stores. Only `true` is ever sent. */
614
- enableLocal: z2.boolean().optional()
615
- });
616
- var shoppingSettingUpdateSchema = z2.strictObject({
617
- feedLabel: z2.union([z2.string().trim().min(1).max(20), z2.literal("")]).optional(),
618
- campaignPriority: shoppingSettingSchema.shape.campaignPriority,
619
- enableLocal: z2.boolean().optional()
620
- }).refine((p) => Object.values(p).some((v) => v !== void 0), "shoppingSetting needs a field to change");
621
- var APP_STORES = ["GOOGLE_APP_STORE", "APPLE_APP_STORE"];
622
- var APP_CAMPAIGN_GOALS = {
623
- OPTIMIZE_INSTALLS_TARGET_INSTALL_COST: { strategy: "TARGET_CPA", needsConversions: false },
624
- OPTIMIZE_INSTALLS_WITHOUT_TARGET_INSTALL_COST: { strategy: "MAXIMIZE_CONVERSIONS", needsConversions: false },
625
- OPTIMIZE_IN_APP_CONVERSIONS_TARGET_INSTALL_COST: { strategy: "TARGET_CPA", needsConversions: true },
626
- OPTIMIZE_IN_APP_CONVERSIONS_TARGET_CONVERSION_COST: { strategy: "TARGET_CPA", needsConversions: true },
627
- OPTIMIZE_RETURN_ON_ADVERTISING_SPEND: { strategy: "TARGET_ROAS", needsConversions: true }
628
- };
629
- var APP_CAMPAIGN_GOAL_TYPES = Object.keys(APP_CAMPAIGN_GOALS);
630
- var appCampaignSettingSchema = z2.strictObject({
631
- /** Android package name (`com.example.app`) or the App Store's numeric id. */
632
- appId: z2.string().trim().min(1).max(200),
633
- appStore: z2.enum(APP_STORES),
634
- biddingStrategyGoalType: z2.enum(APP_CAMPAIGN_GOAL_TYPES)
635
- });
636
- var selectiveOptimizationSchema = z2.strictObject({
637
- conversionActions: z2.array(
638
- z2.union([z2.string().regex(RESOURCE_NAME_REGEX), z2.string().regex(NUMERIC_ID_REGEX)], {
639
- error: "conversionActions are the app's existing conversion actions \u2014 an id or resource name"
640
- })
641
- ).min(1)
642
- });
643
- var APP_SUB_TYPES = /* @__PURE__ */ new Set(["APP_CAMPAIGN", "APP_CAMPAIGN_FOR_ENGAGEMENT"]);
644
- var APP_SETTING_REQUIRED_MESSAGE = "An App campaign (MULTI_CHANNEL) needs appCampaignSetting \u2014 appId, appStore (GOOGLE_APP_STORE | APPLE_APP_STORE) and biddingStrategyGoalType \u2014 and channelSubType APP_CAMPAIGN (installs) or APP_CAMPAIGN_FOR_ENGAGEMENT.";
645
- var APP_SETTING_CHANNEL_MESSAGE = "appCampaignSetting and selectiveOptimization belong to an App campaign (MULTI_CHANNEL) only.";
646
- var APP_CONVERSIONS_REQUIRED_MESSAGE = "This App goal optimizes toward in-app conversions \u2014 list the app's conversion actions in selectiveOptimization.conversionActions (Google refuses the campaign without them).";
647
- var APP_ENGAGEMENT_GOAL_MESSAGE = "An engagement App campaign (APP_CAMPAIGN_FOR_ENGAGEMENT) optimizes toward in-app actions \u2014 use an in-app or return-on-ad-spend goal, not an installs goal.";
648
- function appGoalBiddingMessage(goal) {
649
- return `The App goal ${goal} bids with ${APP_CAMPAIGN_GOALS[goal].strategy} only \u2014 Google refuses any other strategy with it.`;
650
- }
651
- var travelCampaignSettingsSchema = z2.strictObject({ travelAccountId: int64IdSchema("travelAccountId") });
652
- var hotelSettingSchema = z2.strictObject({ hotelCenterId: int64IdSchema("hotelCenterId") });
653
- var TRAVEL_SETTING_REQUIRED_MESSAGE = "A Travel campaign needs travelCampaignSettings.travelAccountId \u2014 the travel account linked to this Google Ads account.";
654
- var HOTEL_SETTING_REQUIRED_MESSAGE = "A Hotel campaign needs hotelSetting.hotelCenterId \u2014 the Hotel Center account linked to this Google Ads account.";
655
- var TRAVEL_HOTEL_CHANNEL_MESSAGE = "travelCampaignSettings belongs to a Travel campaign and hotelSetting to a Hotel campaign only.";
656
- var TRAVEL_TARGET_ROAS_MESSAGE = "A Travel campaign bids with Maximize conversion value at a target ROAS \u2014 set bidding.targetRoas (Google requires it).";
657
- var dynamicSearchAdsSettingSchema = z2.strictObject({
658
- domainName: z2.string().trim().regex(
659
- /^(?!-)[A-Za-z0-9-]+(\.[A-Za-z0-9-]+)+$/,
660
- "domainName is the site's bare domain (withbaker.com) \u2014 no https://, no path"
661
- ),
662
- languageCode: z2.string().regex(
663
- /^[a-z]{2,3}(_[A-Z]{2})?$/,
664
- `languageCode is Google's language code in lowercase ("en", "es"; "zh_CN" with a region)`
665
- ),
666
- /** Build ads only from the pages a page feed lists, not the whole site. */
667
- useSuppliedUrlsOnly: z2.boolean().optional()
668
- });
669
- var dynamicSearchAdsSettingUpdateSchema = dynamicSearchAdsSettingSchema.partial().refine((p) => Object.values(p).some((v) => v !== void 0), "dynamicSearchAdsSetting needs a field to change");
670
- var FREQUENCY_CAP_LEVELS = ["CAMPAIGN", "AD_GROUP", "AD_GROUP_AD"];
671
- var FREQUENCY_CAP_EVENTS = ["IMPRESSION", "VIDEO_VIEW"];
672
- var FREQUENCY_CAP_TIME_UNITS = ["DAY", "WEEK", "MONTH"];
673
- var frequencyCapsSchema = z2.array(
674
- z2.strictObject({
675
- level: z2.enum(FREQUENCY_CAP_LEVELS),
676
- eventType: z2.enum(FREQUENCY_CAP_EVENTS),
677
- timeUnit: z2.enum(FREQUENCY_CAP_TIME_UNITS),
678
- cap: z2.number().int().min(1)
679
- })
680
- ).refine(
681
- (caps) => new Set(caps.map((c) => `${c.level}/${c.eventType}/${c.timeUnit}`)).size === caps.length,
682
- "one cap per level, event and period \u2014 Google refuses a second (DUPLICATE_VALUES)"
683
- );
684
- var DSA_CHANNEL_MESSAGE = "dynamicSearchAdsSetting belongs to a Search campaign only.";
685
- var FREQUENCY_CAP_CHANNELS = /* @__PURE__ */ new Set(["DISPLAY", "VIDEO"]);
686
- var FREQUENCY_CAPS_CHANNEL_MESSAGE = "Frequency caps work on Display (and existing Video) campaigns only \u2014 Demand Gen refuses them, and Search, Shopping and Performance Max ads are not frequency-capped.";
687
- var assetAutomationSchema = z2.strictObject({
688
- /** Text Google writes from the landing page and the assets (TEXT_ASSET_AUTOMATION). */
689
- textAssets: z2.boolean().optional(),
690
- /** Send traffic to the most relevant page of the site (FINAL_URL_EXPANSION_TEXT_ASSET_AUTOMATION). */
691
- finalUrlExpansion: z2.boolean().optional(),
692
- /** Enhanced versions of the campaign's YouTube videos (GENERATE_ENHANCED_YOUTUBE_VIDEOS). */
693
- videoEnhancement: z2.boolean().optional(),
694
- /** Enhanced versions of the campaign's images (GENERATE_IMAGE_ENHANCEMENT). */
695
- imageEnhancement: z2.boolean().optional(),
696
- /** Images taken from the landing page (GENERATE_IMAGE_EXTRACTION). */
697
- imageExtraction: z2.boolean().optional(),
698
- /** New designs made from the campaign's images (GENERATE_DESIGN_VERSIONS_FOR_IMAGES). */
699
- imageDesignVersions: z2.boolean().optional()
700
- }).refine((p) => Object.values(p).some((v) => v !== void 0), "assetAutomation needs at least one switch");
701
- var ASSET_AUTOMATION_CHANNEL_MESSAGE = "assetAutomation switches what Google generates for a Performance Max campaign only \u2014 on Search use AI Max (`aiMax`: text customization, final URL expansion); Display and Demand Gen take none.";
702
- var TEXT_ASSETS_NEED_URL_EXPANSION_OFF_MESSAGE = "Google refuses turning generated text off while final URL expansion is on \u2014 set finalUrlExpansion: false (`--url-expansion=false`) in the same change.";
703
- function assetAutomationStateIssue(state) {
704
- return state.textAssets === false && state.finalUrlExpansion !== false ? TEXT_ASSETS_NEED_URL_EXPANSION_OFF_MESSAGE : void 0;
705
- }
706
- var hexColorSchema = z2.string().regex(/^#[0-9A-Fa-f]{6}$/, "colors are #RRGGBB hex codes");
707
- var brandStyleShape = {
708
- mainColor: hexColorSchema.optional(),
709
- accentColor: hexColorSchema.optional(),
710
- /** One of Google's predefined fonts, e.g. "Roboto". */
711
- fontFamily: z2.string().trim().min(1).max(50).optional()
712
- };
713
- var BRAND_COLORS_PAIR_MESSAGE = "Google needs both brand colors together \u2014 set mainColor and accentColor, or neither.";
714
- var BRAND_GUIDELINES_OFF_MESSAGE = "Brand colors and font only apply with brand guidelines on \u2014 set enabled: true, or leave them out.";
715
- var BRAND_GUIDELINES_CHANNEL_MESSAGE = "Brand guidelines belong to Performance Max campaigns only.";
716
- function colorsPaired(p) {
717
- return p.mainColor === void 0 === (p.accentColor === void 0);
718
- }
719
- var brandGuidelinesCreateSchema = z2.strictObject({ enabled: z2.boolean(), ...brandStyleShape }).superRefine((p, ctx) => {
720
- if (!colorsPaired(p)) {
721
- ctx.addIssue({ code: "custom", message: BRAND_COLORS_PAIR_MESSAGE });
722
- }
723
- if (!p.enabled && (p.mainColor !== void 0 || p.fontFamily !== void 0)) {
724
- ctx.addIssue({ code: "custom", message: BRAND_GUIDELINES_OFF_MESSAGE });
725
- }
726
- });
727
- var brandGuidelinesUpdateSchema = z2.strictObject(brandStyleShape).refine((p) => Object.values(p).some((v) => v !== void 0), "brandGuidelines needs a color or a font");
728
- var existingAssetSchema = z2.union([z2.string().regex(RESOURCE_NAME_REGEX), z2.string().regex(NUMERIC_ID_REGEX)], {
729
- error: "brand assets are assets already in the account \u2014 an id or resource name"
730
- });
731
- var ENABLE_BRAND_ASSETS_MESSAGE = "Name the business name asset and at least one square logo asset (businessNameAsset, logoAssets), or set autoPopulateBrandAssets: true to let Google take them from the campaign's asset groups.";
732
- var campaignEnableBrandGuidelinesSchema = z2.strictObject({
733
- autoPopulateBrandAssets: z2.boolean().optional(),
734
- businessNameAsset: existingAssetSchema.optional(),
735
- logoAssets: z2.array(existingAssetSchema).min(1).max(5).optional(),
736
- landscapeLogoAssets: z2.array(existingAssetSchema).max(5).optional(),
737
- /** The site's domain (withbaker.com) — required by Google with explicit assets. */
738
- finalUriDomain: z2.string().trim().min(1).optional(),
739
- ...brandStyleShape
740
- }).superRefine((p, ctx) => {
741
- if (p.autoPopulateBrandAssets !== true && (!p.businessNameAsset || !p.logoAssets)) {
742
- ctx.addIssue({ code: "custom", message: ENABLE_BRAND_ASSETS_MESSAGE });
743
- }
744
- if (!colorsPaired(p)) {
745
- ctx.addIssue({ code: "custom", message: BRAND_COLORS_PAIR_MESSAGE });
746
- }
747
- });
748
- var TEXT_GUIDELINES_CREATE_CHANNEL_MESSAGE = "Text guidelines apply where Google writes the ad text: Performance Max, and Search with AI Max and its text customization on. This campaign type doesn't take them.";
749
- var TEXT_GUIDELINES_CREATE_AI_MAX_MESSAGE = "Text guidelines on a Search campaign need AI Max with text customization on \u2014 add aiMax {enabled: true, textCustomization: true} (`--ai-max --ai-max-text`) to the same create, or leave the guidelines out.";
750
- var SHOPPING_SETTING_REQUIRED_MESSAGE = "A Shopping campaign needs shoppingSetting.merchantId \u2014 the Merchant Center account whose products it advertises. Read the linked ones with `baker ads google merchant-center list`.";
751
- var SHOPPING_SETTING_CHANNEL_MESSAGE = "shoppingSetting belongs to a Shopping or Performance Max campaign only.";
752
- var PMAX_SHOPPING_ONLY_FIELDS_MESSAGE = "On Performance Max, shoppingSetting takes only merchantId and feedLabel \u2014 campaignPriority and enableLocal are Shopping-campaign settings.";
753
- function textGuidelinesCreateIssue(p) {
754
- if (p.textGuidelines === void 0 || p.channelType === "PERFORMANCE_MAX") {
755
- return void 0;
756
- }
757
- if (p.channelType !== "SEARCH") {
758
- return TEXT_GUIDELINES_CREATE_CHANNEL_MESSAGE;
759
- }
760
- return p.aiMax?.enabled === true && p.aiMax.textCustomization === true ? void 0 : TEXT_GUIDELINES_CREATE_AI_MAX_MESSAGE;
761
- }
762
- function servingSettingIssues(channelType, p) {
763
- const issues = [];
764
- if (p.brandGuidelines !== void 0 && channelType !== "PERFORMANCE_MAX") {
765
- issues.push({ path: ["brandGuidelines"], message: BRAND_GUIDELINES_CHANNEL_MESSAGE });
766
- }
767
- if (p.assetAutomation !== void 0 && channelType !== "PERFORMANCE_MAX") {
768
- issues.push({ path: ["assetAutomation"], message: ASSET_AUTOMATION_CHANNEL_MESSAGE });
769
- }
770
- if (p.dynamicSearchAdsSetting !== void 0 && channelType !== "SEARCH") {
771
- issues.push({ path: ["dynamicSearchAdsSetting"], message: DSA_CHANNEL_MESSAGE });
772
- }
773
- if (p.frequencyCaps !== void 0 && !FREQUENCY_CAP_CHANNELS.has(channelType)) {
774
- issues.push({ path: ["frequencyCaps"], message: FREQUENCY_CAPS_CHANNEL_MESSAGE });
775
- }
776
- return issues;
777
- }
778
- function travelHotelCreateIssues(p) {
779
- const issues = [];
780
- if (p.channelType === "TRAVEL" && !p.travelCampaignSettings) {
781
- issues.push({ path: ["travelCampaignSettings"], message: TRAVEL_SETTING_REQUIRED_MESSAGE });
782
- }
783
- if (p.channelType === "TRAVEL" && p.bidding?.type === "MAXIMIZE_CONVERSION_VALUE" && p.bidding.targetRoas === void 0) {
784
- issues.push({ path: ["bidding", "targetRoas"], message: TRAVEL_TARGET_ROAS_MESSAGE });
785
- }
786
- if (p.channelType === "HOTEL" && !p.hotelSetting) {
787
- issues.push({ path: ["hotelSetting"], message: HOTEL_SETTING_REQUIRED_MESSAGE });
788
- }
789
- if (p.travelCampaignSettings && p.channelType !== "TRAVEL" || p.hotelSetting && p.channelType !== "HOTEL") {
790
- issues.push({
791
- path: [p.hotelSetting ? "hotelSetting" : "travelCampaignSettings"],
792
- message: TRAVEL_HOTEL_CHANNEL_MESSAGE
793
- });
794
- }
795
- return issues;
796
- }
797
- function appCreateIssues(p) {
798
- if (p.channelType !== "MULTI_CHANNEL") {
799
- return p.appCampaignSetting || p.selectiveOptimization ? [{ path: ["appCampaignSetting"], message: APP_SETTING_CHANNEL_MESSAGE }] : [];
800
- }
801
- const setting = p.appCampaignSetting;
802
- if (!setting || !p.channelSubType || !APP_SUB_TYPES.has(p.channelSubType)) {
803
- return [{ path: ["appCampaignSetting"], message: APP_SETTING_REQUIRED_MESSAGE }];
804
- }
805
- const goal = APP_CAMPAIGN_GOALS[setting.biddingStrategyGoalType];
806
- const issues = [];
807
- if (p.bidding && p.bidding.type !== goal.strategy) {
808
- issues.push({ path: ["bidding"], message: appGoalBiddingMessage(setting.biddingStrategyGoalType) });
809
- }
810
- if (goal.needsConversions && !p.selectiveOptimization) {
811
- issues.push({ path: ["selectiveOptimization"], message: APP_CONVERSIONS_REQUIRED_MESSAGE });
812
- }
813
- if (p.channelSubType === "APP_CAMPAIGN_FOR_ENGAGEMENT" && !goal.needsConversions) {
814
- issues.push({ path: ["appCampaignSetting", "biddingStrategyGoalType"], message: APP_ENGAGEMENT_GOAL_MESSAGE });
815
- }
816
- return issues;
817
- }
818
- function shoppingChannelIssue(channelType, setting) {
819
- if (!setting) {
820
- return void 0;
821
- }
822
- if (channelType !== "SHOPPING" && channelType !== "PERFORMANCE_MAX") {
823
- return SHOPPING_SETTING_CHANNEL_MESSAGE;
824
- }
825
- return channelType === "PERFORMANCE_MAX" && (setting.campaignPriority !== void 0 || setting.enableLocal !== void 0) ? PMAX_SHOPPING_ONLY_FIELDS_MESSAGE : void 0;
826
- }
827
- function channelSettingsCreateIssues(p) {
828
- const issues = [];
829
- if (p.channelType === "SHOPPING" && !p.shoppingSetting) {
830
- issues.push({ path: ["shoppingSetting"], message: SHOPPING_SETTING_REQUIRED_MESSAGE });
831
- }
832
- const shopping = shoppingChannelIssue(p.channelType, p.shoppingSetting);
833
- if (shopping) {
834
- issues.push({ path: ["shoppingSetting"], message: shopping });
835
- }
836
- issues.push(...appCreateIssues(p), ...travelHotelCreateIssues(p), ...servingSettingIssues(p.channelType, p));
837
- const guidelines = textGuidelinesCreateIssue(p);
838
- if (guidelines) {
839
- issues.push({ path: ["textGuidelines"], message: guidelines });
840
- }
841
- const automation = p.assetAutomation && assetAutomationStateIssue(p.assetAutomation);
842
- if (automation) {
843
- issues.push({ path: ["assetAutomation"], message: automation });
844
- }
845
- return issues;
846
- }
847
-
848
- // ../api/src/ads-google/geo-constants.ts
849
- var GEO_TARGET_COUNTRIES = {
850
- "2004": "Afghanistan",
851
- "2008": "Albania",
852
- "2010": "Antarctica",
853
- "2012": "Algeria",
854
- "2016": "American Samoa",
855
- "2020": "Andorra",
856
- "2024": "Angola",
857
- "2028": "Antigua and Barbuda",
858
- "2031": "Azerbaijan",
859
- "2032": "Argentina",
860
- "2036": "Australia",
861
- "2040": "Austria",
862
- "2044": "The Bahamas",
863
- "2048": "Bahrain",
864
- "2050": "Bangladesh",
865
- "2051": "Armenia",
866
- "2052": "Barbados",
867
- "2056": "Belgium",
868
- "2060": "Bermuda",
869
- "2064": "Bhutan",
870
- "2068": "Bolivia",
871
- "2070": "Bosnia and Herzegovina",
872
- "2072": "Botswana",
873
- "2074": "Bouvet Island",
874
- "2076": "Brazil",
875
- "2084": "Belize",
876
- "2086": "British Indian Ocean Territory",
877
- "2090": "Solomon Islands",
878
- "2092": "British Virgin Islands",
879
- "2096": "Brunei",
880
- "2100": "Bulgaria",
881
- "2104": "Myanmar (Burma)",
882
- "2108": "Burundi",
883
- "2112": "Belarus",
884
- "2116": "Cambodia",
885
- "2120": "Cameroon",
886
- "2124": "Canada",
887
- "2132": "Cabo Verde",
888
- "2136": "Cayman Islands",
889
- "2140": "Central African Republic",
890
- "2144": "Sri Lanka",
891
- "2148": "Chad",
892
- "2152": "Chile",
893
- "2156": "China",
894
- "2158": "Taiwan",
895
- "2162": "Christmas Island",
896
- "2166": "Cocos (Keeling) Islands",
897
- "2170": "Colombia",
898
- "2174": "Comoros",
899
- "2175": "Mayotte",
900
- "2178": "Republic of the Congo",
901
- "2180": "Democratic Republic of the Congo",
902
- "2184": "Cook Islands",
903
- "2188": "Costa Rica",
904
- "2191": "Croatia",
905
- "2196": "Cyprus",
906
- "2203": "Czechia",
907
- "2204": "Benin",
908
- "2208": "Denmark",
909
- "2212": "Dominica",
910
- "2214": "Dominican Republic",
911
- "2218": "Ecuador",
912
- "2222": "El Salvador",
913
- "2226": "Equatorial Guinea",
914
- "2231": "Ethiopia",
915
- "2232": "Eritrea",
916
- "2233": "Estonia",
917
- "2234": "Faroe Islands",
918
- "2238": "Falkland Islands (Islas Malvinas)",
919
- "2239": "South Georgia and the South Sandwich Islands",
920
- "2242": "Fiji",
921
- "2246": "Finland",
922
- "2250": "France",
923
- "2254": "French Guiana",
924
- "2258": "French Polynesia",
925
- "2260": "French Southern and Antarctic Lands",
926
- "2262": "Djibouti",
927
- "2266": "Gabon",
928
- "2268": "Georgia",
929
- "2270": "The Gambia",
930
- "2275": "Palestine",
931
- "2276": "Germany",
932
- "2288": "Ghana",
933
- "2292": "Gibraltar",
934
- "2296": "Kiribati",
935
- "2300": "Greece",
936
- "2304": "Greenland",
937
- "2308": "Grenada",
938
- "2312": "Guadeloupe",
939
- "2316": "Guam",
940
- "2320": "Guatemala",
941
- "2324": "Guinea",
942
- "2328": "Guyana",
943
- "2332": "Haiti",
944
- "2334": "Heard Island and McDonald Islands",
945
- "2336": "Vatican City",
946
- "2340": "Honduras",
947
- "2344": "Hong Kong",
948
- "2348": "Hungary",
949
- "2352": "Iceland",
950
- "2356": "India",
951
- "2360": "Indonesia",
952
- "2368": "Iraq",
953
- "2372": "Ireland",
954
- "2376": "Israel",
955
- "2380": "Italy",
956
- "2384": "Cote d'Ivoire",
957
- "2388": "Jamaica",
958
- "2392": "Japan",
959
- "2398": "Kazakhstan",
960
- "2400": "Jordan",
961
- "2404": "Kenya",
962
- "2410": "South Korea",
963
- "2414": "Kuwait",
964
- "2417": "Kyrgyzstan",
965
- "2418": "Laos",
966
- "2422": "Lebanon",
967
- "2426": "Lesotho",
968
- "2428": "Latvia",
969
- "2430": "Liberia",
970
- "2434": "Libya",
971
- "2438": "Liechtenstein",
972
- "2440": "Lithuania",
973
- "2442": "Luxembourg",
974
- "2446": "Macao",
975
- "2450": "Madagascar",
976
- "2454": "Malawi",
977
- "2458": "Malaysia",
978
- "2462": "Maldives",
979
- "2466": "Mali",
980
- "2470": "Malta",
981
- "2474": "Martinique",
982
- "2478": "Mauritania",
983
- "2480": "Mauritius",
984
- "2484": "Mexico",
985
- "2492": "Monaco",
986
- "2496": "Mongolia",
987
- "2498": "Moldova",
988
- "2499": "Montenegro",
989
- "2500": "Montserrat",
990
- "2504": "Morocco",
991
- "2508": "Mozambique",
992
- "2512": "Oman",
993
- "2516": "Namibia",
994
- "2520": "Nauru",
995
- "2524": "Nepal",
996
- "2528": "Netherlands",
997
- "2531": "Curacao",
998
- "2533": "Aruba",
999
- "2534": "Sint Maarten",
1000
- "2535": "Caribbean Netherlands",
1001
- "2540": "New Caledonia",
1002
- "2548": "Vanuatu",
1003
- "2554": "New Zealand",
1004
- "2558": "Nicaragua",
1005
- "2562": "Niger",
1006
- "2566": "Nigeria",
1007
- "2570": "Niue",
1008
- "2574": "Norfolk Island",
1009
- "2578": "Norway",
1010
- "2580": "Northern Mariana Islands",
1011
- "2581": "United States Minor Outlying Islands",
1012
- "2583": "Micronesia",
1013
- "2584": "Marshall Islands",
1014
- "2585": "Palau",
1015
- "2586": "Pakistan",
1016
- "2591": "Panama",
1017
- "2598": "Papua New Guinea",
1018
- "2600": "Paraguay",
1019
- "2604": "Peru",
1020
- "2608": "Philippines",
1021
- "2612": "Pitcairn Islands",
1022
- "2616": "Poland",
1023
- "2620": "Portugal",
1024
- "2624": "Guinea-Bissau",
1025
- "2626": "Timor-Leste",
1026
- "2630": "Puerto Rico",
1027
- "2634": "Qatar",
1028
- "2638": "Reunion",
1029
- "2642": "Romania",
1030
- "2643": "Russia",
1031
- "2646": "Rwanda",
1032
- "2652": "Saint Barthelemy",
1033
- "2654": "Saint Helena, Ascension and Tristan da Cunha",
1034
- "2659": "Saint Kitts and Nevis",
1035
- "2660": "Anguilla",
1036
- "2662": "Saint Lucia",
1037
- "2663": "Saint Martin",
1038
- "2666": "Saint Pierre and Miquelon",
1039
- "2670": "Saint Vincent and the Grenadines",
1040
- "2674": "San Marino",
1041
- "2678": "Sao Tome and Principe",
1042
- "2682": "Saudi Arabia",
1043
- "2686": "Senegal",
1044
- "2688": "Serbia",
1045
- "2690": "Seychelles",
1046
- "2694": "Sierra Leone",
1047
- "2702": "Singapore",
1048
- "2703": "Slovakia",
1049
- "2704": "Vietnam",
1050
- "2705": "Slovenia",
1051
- "2706": "Somalia",
1052
- "2710": "South Africa",
1053
- "2716": "Zimbabwe",
1054
- "2724": "Spain",
1055
- "2728": "South Sudan",
1056
- "2732": "Western Sahara",
1057
- "2736": "Sudan",
1058
- "2740": "Suriname",
1059
- "2744": "Svalbard and Jan Mayen",
1060
- "2748": "Eswatini",
1061
- "2752": "Sweden",
1062
- "2756": "Switzerland",
1063
- "2760": "Syria",
1064
- "2762": "Tajikistan",
1065
- "2764": "Thailand",
1066
- "2768": "Togo",
1067
- "2772": "Tokelau",
1068
- "2776": "Tonga",
1069
- "2780": "Trinidad and Tobago",
1070
- "2784": "United Arab Emirates",
1071
- "2788": "Tunisia",
1072
- "2792": "Turkiye",
1073
- "2795": "Turkmenistan",
1074
- "2796": "Turks and Caicos Islands",
1075
- "2798": "Tuvalu",
1076
- "2800": "Uganda",
1077
- "2804": "Ukraine",
1078
- "2807": "North Macedonia",
1079
- "2818": "Egypt",
1080
- "2826": "United Kingdom",
1081
- "2831": "Guernsey",
1082
- "2832": "Jersey",
1083
- "2833": "Isle of Man",
1084
- "2834": "Tanzania",
1085
- "2840": "United States",
1086
- "2850": "U.S. Virgin Islands",
1087
- "2854": "Burkina Faso",
1088
- "2858": "Uruguay",
1089
- "2860": "Uzbekistan",
1090
- "2862": "Venezuela",
1091
- "2876": "Wallis and Futuna",
1092
- "2882": "Samoa",
1093
- "2887": "Yemen",
1094
- "2894": "Zambia",
1095
- "2900": "Kosovo"
1096
- };
1097
- var LANGUAGE_CONSTANTS = {
1098
- "1000": "English",
1099
- "1001": "German",
1100
- "1002": "French",
1101
- "1003": "Spanish",
1102
- "1004": "Italian",
1103
- "1005": "Japanese",
1104
- "1009": "Danish",
1105
- "1010": "Dutch",
1106
- "1011": "Finnish",
1107
- "1012": "Korean",
1108
- "1013": "Norwegian",
1109
- "1014": "Portuguese",
1110
- "1015": "Swedish",
1111
- "1017": "Chinese (simplified)",
1112
- "1018": "Chinese (traditional)",
1113
- "1019": "Arabic",
1114
- "1020": "Bulgarian",
1115
- "1021": "Czech",
1116
- "1022": "Greek",
1117
- "1023": "Hindi",
1118
- "1024": "Hungarian",
1119
- "1025": "Indonesian",
1120
- "1026": "Icelandic",
1121
- "1027": "Hebrew",
1122
- "1028": "Latvian",
1123
- "1029": "Lithuanian",
1124
- "1030": "Polish",
1125
- "1031": "Russian",
1126
- "1032": "Romanian",
1127
- "1033": "Slovak",
1128
- "1034": "Slovenian",
1129
- "1035": "Serbian",
1130
- "1036": "Ukrainian",
1131
- "1037": "Turkish",
1132
- "1038": "Catalan",
1133
- "1039": "Croatian",
1134
- "1040": "Vietnamese",
1135
- "1041": "Urdu",
1136
- "1042": "Filipino",
1137
- "1043": "Estonian",
1138
- "1044": "Thai",
1139
- "1056": "Bengali",
1140
- "1064": "Persian",
1141
- "1072": "Gujarati",
1142
- "1086": "Kannada",
1143
- "1098": "Malayalam",
1144
- "1101": "Marathi",
1145
- "1102": "Malay",
1146
- "1110": "Punjabi",
1147
- "1130": "Tamil",
1148
- "1131": "Telugu"
1149
- };
1150
-
1151
- // ../../node_modules/.pnpm/tldts-core@7.4.15/node_modules/tldts-core/dist/es6/src/domain.js
1152
- function shareSameDomainSuffix(hostname, vhost) {
1153
- if (hostname.endsWith(vhost)) {
1154
- return hostname.length === vhost.length || hostname[hostname.length - vhost.length - 1] === ".";
1155
- }
1156
- return false;
1157
- }
1158
- function extractDomainWithSuffix(hostname, publicSuffix) {
1159
- const publicSuffixIndex = hostname.length - publicSuffix.length - 2;
1160
- const lastDotBeforeSuffixIndex = hostname.lastIndexOf(".", publicSuffixIndex);
1161
- if (lastDotBeforeSuffixIndex === -1) {
1162
- return hostname;
1163
- }
1164
- return hostname.slice(lastDotBeforeSuffixIndex + 1);
1165
- }
1166
- function getDomain(suffix, hostname, options) {
1167
- if (options.validHosts !== null) {
1168
- const validHosts = options.validHosts;
1169
- for (const vhost of validHosts) {
1170
- if (
1171
- /*@__INLINE__*/
1172
- shareSameDomainSuffix(hostname, vhost)
1173
- ) {
1174
- return vhost;
1175
- }
1176
- }
1177
- }
1178
- let numberOfLeadingDots = 0;
1179
- if (hostname.startsWith(".")) {
1180
- while (numberOfLeadingDots < hostname.length && hostname[numberOfLeadingDots] === ".") {
1181
- numberOfLeadingDots += 1;
1182
- }
1183
- }
1184
- if (suffix.length === hostname.length - numberOfLeadingDots) {
1185
- return null;
1186
- }
1187
- return (
1188
- /*@__INLINE__*/
1189
- extractDomainWithSuffix(hostname, suffix)
1190
- );
1191
- }
1192
-
1193
- // ../../node_modules/.pnpm/tldts-core@7.4.15/node_modules/tldts-core/dist/es6/src/domain-without-suffix.js
1194
- function getDomainWithoutSuffix(domain, suffix) {
1195
- return domain.slice(0, -suffix.length - 1);
1196
- }
1197
-
1198
- // ../../node_modules/.pnpm/tldts-core@7.4.15/node_modules/tldts-core/dist/es6/src/extract-hostname.js
1199
- var CONTROL_CHARS = /[\t\n\r]/g;
1200
- var extractedHostnameValidated = false;
1201
- function isValidHostnameChar(code) {
1202
- return code >= 97 && code <= 122 || // a-z
1203
- code >= 48 && code <= 57 || // 0-9
1204
- code > 127 || // non-ASCII (accepted, not punycode-checked)
1205
- code >= 65 && code <= 90 || // A-Z (becomes valid once lowercased)
1206
- code === 45 || // '-'
1207
- code === 95;
1208
- }
1209
- function getSpecialScheme(url, schemeStart, colonIndex) {
1210
- const length = colonIndex - schemeStart;
1211
- const c0 = url.charCodeAt(schemeStart) | 32;
1212
- if (length === 2) {
1213
- return c0 === 119 && (url.charCodeAt(schemeStart + 1) | 32) === 115 ? 1 : 0;
1214
- } else if (length === 3) {
1215
- const c1 = url.charCodeAt(schemeStart + 1) | 32;
1216
- const c2 = url.charCodeAt(schemeStart + 2) | 32;
1217
- if (c0 === 119 && c1 === 115 && c2 === 115)
1218
- return 1;
1219
- if (c0 === 102 && c1 === 116 && c2 === 112)
1220
- return 1;
1221
- return 0;
1222
- } else if (length === 4) {
1223
- const c1 = url.charCodeAt(schemeStart + 1) | 32;
1224
- const c2 = url.charCodeAt(schemeStart + 2) | 32;
1225
- const c3 = url.charCodeAt(schemeStart + 3) | 32;
1226
- if (c0 === 104 && c1 === 116 && c2 === 116 && c3 === 112)
1227
- return 1;
1228
- if (c0 === 102 && c1 === 105 && c2 === 108 && c3 === 101)
1229
- return 2;
1230
- return 0;
1231
- } else if (length === 5) {
1232
- return c0 === 104 && (url.charCodeAt(schemeStart + 1) | 32) === 116 && (url.charCodeAt(schemeStart + 2) | 32) === 116 && (url.charCodeAt(schemeStart + 3) | 32) === 112 && (url.charCodeAt(schemeStart + 4) | 32) === 115 ? 1 : 0;
1233
- }
1234
- return 0;
1235
- }
1236
- function extractHostname(url, urlIsValidHostname, validate = false) {
1237
- let start = 0;
1238
- let end = url.length;
1239
- let hasUpper = false;
1240
- let isSpecial = false;
1241
- extractedHostnameValidated = false;
1242
- if (!urlIsValidHostname) {
1243
- if (url.startsWith("data:")) {
1244
- return null;
1245
- }
1246
- while (start < url.length && url.charCodeAt(start) <= 32) {
1247
- start += 1;
1248
- }
1249
- while (end > start + 1 && url.charCodeAt(end - 1) <= 32) {
1250
- end -= 1;
1251
- }
1252
- if (url.charCodeAt(start) === 47 && url.charCodeAt(start + 1) === 47) {
1253
- start += 2;
1254
- } else {
1255
- const indexOfProtocol = url.indexOf(":/", start);
1256
- if (indexOfProtocol !== -1) {
1257
- const special = getSpecialScheme(url, start, indexOfProtocol);
1258
- if (special === 1) {
1259
- isSpecial = true;
1260
- start = indexOfProtocol + 2;
1261
- while (url.charCodeAt(start) === 47 || url.charCodeAt(start) === 92) {
1262
- start += 1;
1263
- }
1264
- } else if (special === 2) {
1265
- isSpecial = true;
1266
- start = indexOfProtocol + 1;
1267
- let slashes = 0;
1268
- while ((url.charCodeAt(start) === 47 || url.charCodeAt(start) === 92) && slashes < 2) {
1269
- start += 1;
1270
- slashes += 1;
1271
- }
1272
- if (slashes < 2) {
1273
- return null;
1274
- }
1275
- } else {
1276
- for (let i = start; i < indexOfProtocol; i += 1) {
1277
- const code = url.charCodeAt(i) | 32;
1278
- if (!(code >= 97 && code <= 122 || // [a, z]
1279
- code >= 48 && code <= 57 || // [0, 9]
1280
- code === 46 || // '.'
1281
- code === 45 || // '-'
1282
- code === 43)) {
1283
- const raw = url.charCodeAt(i);
1284
- if (raw === 9 || raw === 10 || raw === 13) {
1285
- return extractHostname(url.replace(CONTROL_CHARS, ""), urlIsValidHostname, validate);
1286
- }
1287
- return null;
1288
- }
1289
- }
1290
- if (url.charCodeAt(indexOfProtocol + 2) === 47) {
1291
- start = indexOfProtocol + 3;
1292
- } else {
1293
- return null;
1294
- }
1295
- }
1296
- } else if (url.charCodeAt(start) !== 91) {
1297
- let indexOfColon = -1;
1298
- for (let i = start; i < end; i += 1) {
1299
- const code = url.charCodeAt(i);
1300
- if (code === 9 || code === 10 || code === 13) {
1301
- return extractHostname(url.replace(CONTROL_CHARS, ""), urlIsValidHostname, validate);
1302
- }
1303
- if (code === 58) {
1304
- indexOfColon = i;
1305
- break;
1306
- }
1307
- if (code === 47 || code === 92 || code === 63 || code === 35) {
1308
- break;
1309
- }
1310
- }
1311
- if (indexOfColon !== -1) {
1312
- let hasIdentifier = false;
1313
- for (let i = indexOfColon + 1; i < end; i += 1) {
1314
- const code = url.charCodeAt(i);
1315
- if (code === 47 || code === 92 || code === 63 || code === 35) {
1316
- break;
1317
- }
1318
- if (code === 64) {
1319
- hasIdentifier = true;
1320
- break;
1321
- }
1322
- }
1323
- if (!hasIdentifier) {
1324
- let allDigits = true;
1325
- let i = indexOfColon + 1;
1326
- for (; i < end; i += 1) {
1327
- const code = url.charCodeAt(i);
1328
- if (code === 47 || code === 92 || code === 63 || code === 35) {
1329
- break;
1330
- }
1331
- if (code < 48 || code > 57) {
1332
- allDigits = false;
1333
- break;
1334
- }
1335
- }
1336
- if (i === indexOfColon + 1) {
1337
- allDigits = false;
1338
- }
1339
- if (!allDigits) {
1340
- const special = getSpecialScheme(url, start, indexOfColon);
1341
- if (special === 0) {
1342
- let isBareIpv6 = false;
1343
- for (let j = indexOfColon + 1; j < end; j += 1) {
1344
- const code = url.charCodeAt(j);
1345
- if (code === 47 || code === 92 || code === 63 || code === 35) {
1346
- break;
1347
- }
1348
- if (code === 58) {
1349
- isBareIpv6 = true;
1350
- break;
1351
- }
1352
- }
1353
- if (!isBareIpv6) {
1354
- return null;
1355
- }
1356
- } else {
1357
- isSpecial = true;
1358
- start = indexOfColon + 1;
1359
- if (special === 2) {
1360
- let slashes = 0;
1361
- while ((url.charCodeAt(start) === 47 || url.charCodeAt(start) === 92) && slashes < 2) {
1362
- start += 1;
1363
- slashes += 1;
1364
- }
1365
- if (slashes < 2) {
1366
- return null;
1367
- }
1368
- } else {
1369
- while (url.charCodeAt(start) === 47 || url.charCodeAt(start) === 92) {
1370
- start += 1;
1371
- }
1372
- }
1373
- }
1374
- }
1375
- }
1376
- }
1377
- }
1378
- }
1379
- let indexOfIdentifier = -1;
1380
- let indexOfClosingBracket = -1;
1381
- let indexOfPort = -1;
1382
- let indexOfFirstColon = -1;
1383
- let hasControl = false;
1384
- let vValid = validate;
1385
- let vLastDot = start - 1;
1386
- let vLastCode = -1;
1387
- if (validate && start < end) {
1388
- const c0 = url.charCodeAt(start);
1389
- if (!/*@__INLINE__*/
1390
- (isValidHostnameChar(c0) || c0 === 46 || c0 === 95) || c0 === 45) {
1391
- vValid = false;
1392
- }
1393
- }
1394
- for (let i = start; i < end; i += 1) {
1395
- const code = url.charCodeAt(i);
1396
- if (code < 64) {
1397
- if (code === 47 || code === 35 || code === 63) {
1398
- end = i;
1399
- break;
1400
- } else if (code === 58) {
1401
- if (indexOfFirstColon === -1) {
1402
- indexOfFirstColon = i;
1403
- }
1404
- indexOfPort = i;
1405
- } else if (code === 9 || code === 10 || code === 13) {
1406
- hasControl = true;
1407
- } else if (validate) {
1408
- if (code === 46) {
1409
- if (i - vLastDot > 64 || vLastCode === 46 || vLastCode === 45) {
1410
- vValid = false;
1411
- }
1412
- vLastDot = i;
1413
- } else if (code < 48 || code > 57) {
1414
- if (code !== 45 || vLastCode === 46) {
1415
- vValid = false;
1416
- }
1417
- }
1418
- }
1419
- } else if (isSpecial && code === 92) {
1420
- end = i;
1421
- break;
1422
- } else if (code === 64) {
1423
- indexOfIdentifier = i;
1424
- indexOfFirstColon = -1;
1425
- } else if (code === 93) {
1426
- indexOfClosingBracket = i;
1427
- } else if (code >= 65 && code <= 90) {
1428
- hasUpper = true;
1429
- } else if (validate && !/*@__INLINE__*/
1430
- isValidHostnameChar(code)) {
1431
- vValid = false;
1432
- }
1433
- if (validate) {
1434
- vLastCode = code;
1435
- }
1436
- }
1437
- if (hasControl) {
1438
- return extractHostname(url.replace(CONTROL_CHARS, ""), urlIsValidHostname, validate);
1439
- }
1440
- if (indexOfIdentifier !== -1 && indexOfIdentifier >= start && indexOfIdentifier < end) {
1441
- start = indexOfIdentifier + 1;
1442
- }
1443
- if (url.charCodeAt(start) === 91) {
1444
- if (indexOfClosingBracket !== -1) {
1445
- return url.slice(start + 1, indexOfClosingBracket).toLowerCase();
1446
- }
1447
- return null;
1448
- } else if (indexOfPort !== -1 && indexOfPort > start && indexOfPort < end && // A host:port has exactly one ':' in the host (so its first ':' is its
1449
- // last); a bare, unbracketed IPv6 literal ("2a01:e35::1") has >= 2, so
1450
- // its first ':' precedes the last. Only the former has a ':port' to trim.
1451
- indexOfFirstColon === indexOfPort) {
1452
- end = indexOfPort;
1453
- }
1454
- if (start >= end) {
1455
- return null;
1456
- }
1457
- if (validate && vValid && indexOfIdentifier === -1 && indexOfPort === -1 && indexOfClosingBracket === -1 && url.charCodeAt(end - 1) !== 46 && end - start <= 255 && // total length
1458
- end - vLastDot - 1 <= 63 && // last label length
1459
- vLastCode !== 45) {
1460
- extractedHostnameValidated = true;
1461
- }
1462
- }
1463
- while (end > start + 1 && url.charCodeAt(end - 1) === 46) {
1464
- end -= 1;
1465
- }
1466
- const hostname = start !== 0 || end !== url.length ? url.slice(start, end) : url;
1467
- if (hasUpper) {
1468
- return hostname.toLowerCase();
1469
- }
1470
- return hostname;
1471
- }
1472
-
1473
- // ../../node_modules/.pnpm/tldts-core@7.4.15/node_modules/tldts-core/dist/es6/src/is-ip.js
1474
- function isProbablyIpv4(hostname) {
1475
- if (hostname.length < 7) {
1476
- return false;
1477
- }
1478
- if (hostname.length > 15) {
1479
- return false;
1480
- }
1481
- let numberOfDots = 0;
1482
- for (let i = 0; i < hostname.length; i += 1) {
1483
- const code = hostname.charCodeAt(i);
1484
- if (code === 46) {
1485
- numberOfDots += 1;
1486
- } else if (code < 48 || code > 57) {
1487
- return false;
1488
- }
1489
- }
1490
- return numberOfDots === 3 && hostname.charCodeAt(0) !== 46 && hostname.charCodeAt(hostname.length - 1) !== 46;
1491
- }
1492
- function isProbablyIpv6(hostname) {
1493
- if (hostname.length < 3) {
1494
- return false;
1495
- }
1496
- let start = hostname.startsWith("[") ? 1 : 0;
1497
- let end = hostname.length;
1498
- if (hostname[end - 1] === "]") {
1499
- end -= 1;
1500
- }
1501
- if (end - start > 39) {
1502
- return false;
1503
- }
1504
- let hasColon = false;
1505
- for (; start < end; start += 1) {
1506
- const code = hostname.charCodeAt(start);
1507
- if (code === 58) {
1508
- hasColon = true;
1509
- } else if (!(code >= 48 && code <= 57 || // 0-9
1510
- code >= 97 && code <= 102 || // a-f
1511
- code >= 65 && code <= 70)) {
1512
- return false;
1513
- }
1514
- }
1515
- return hasColon;
1516
- }
1517
- function isIp(hostname) {
1518
- return isProbablyIpv6(hostname) || isProbablyIpv4(hostname);
1519
- }
1520
-
1521
- // ../../node_modules/.pnpm/tldts-core@7.4.15/node_modules/tldts-core/dist/es6/src/is-special-use.js
1522
- var SPECIAL_USE_DOMAINS = [
1523
- "test",
1524
- // RFC 6761
1525
- "localhost",
1526
- // RFC 6761
1527
- "invalid",
1528
- // RFC 6761
1529
- "example",
1530
- // RFC 6761
1531
- "example.com",
1532
- // RFC 6761
1533
- "example.net",
1534
- // RFC 6761
1535
- "example.org",
1536
- // RFC 6761
1537
- "local",
1538
- // RFC 6762 (mDNS)
1539
- "onion",
1540
- // RFC 7686 (Tor)
1541
- "alt",
1542
- // RFC 9476
1543
- "home.arpa",
1544
- // RFC 8375
1545
- "ipv4only.arpa",
1546
- // RFC 8880
1547
- "resolver.arpa",
1548
- // RFC 9462
1549
- "service.arpa",
1550
- // RFC 9665
1551
- "6tisch.arpa",
1552
- // RFC 9031
1553
- "eap.arpa"
1554
- // RFC 9965
1555
- ];
1556
- function isSpecialUse(hostname) {
1557
- for (const name of SPECIAL_USE_DOMAINS) {
1558
- if (hostname.endsWith(name) && (hostname.length === name.length || hostname.charCodeAt(hostname.length - name.length - 1) === 46)) {
1559
- return true;
1560
- }
1561
- }
1562
- return false;
1563
- }
1564
-
1565
- // ../../node_modules/.pnpm/tldts-core@7.4.15/node_modules/tldts-core/dist/es6/src/is-valid.js
1566
- function isValidAscii(code) {
1567
- return code >= 97 && code <= 122 || code >= 48 && code <= 57 || code > 127;
1568
- }
1569
- function is_valid_default(hostname) {
1570
- if (hostname.length > 255) {
1571
- return false;
1572
- }
1573
- if (hostname.length === 0) {
1574
- return false;
1575
- }
1576
- if (
1577
- /*@__INLINE__*/
1578
- !isValidAscii(hostname.charCodeAt(0)) && hostname.charCodeAt(0) !== 46 && // '.' (dot)
1579
- hostname.charCodeAt(0) !== 95
1580
- ) {
1581
- return false;
1582
- }
1583
- let lastDotIndex = -1;
1584
- let lastCharCode = -1;
1585
- const len = hostname.length;
1586
- for (let i = 0; i < len; i += 1) {
1587
- const code = hostname.charCodeAt(i);
1588
- if (code === 46) {
1589
- if (
1590
- // Check that previous label is < 63 bytes long (64 = 63 + '.')
1591
- i - lastDotIndex > 64 || // Check that previous character was not already a '.'
1592
- lastCharCode === 46 || // Check that the previous label does not end with '-' (RFC 1035 §2.3.1 LDH).
1593
- // '_' is intentionally NOT restricted: DNS allows any octet (RFC 2181 §11) and
1594
- // WHATWG URL does not treat '_' as a forbidden host code point.
1595
- lastCharCode === 45
1596
- ) {
1597
- return false;
1598
- }
1599
- lastDotIndex = i;
1600
- } else if (
1601
- // A forbidden character in the label...
1602
- !/*@__INLINE__*/
1603
- (isValidAscii(code) || code === 45 || code === 95) || // ...or a '-' starting a label (the byte right after a '.'). A label must
1604
- // not begin with a hyphen (RFC 1034 §3.5 / RFC 1035 §2.3.1 LDH, as amended
1605
- // by RFC 1123 §2.1; cf. UTS #46 CheckHyphens). The first label is covered by
1606
- // the leading-character guard above; mirrors the trailing-'-' rule below.
1607
- code === 45 && lastCharCode === 46
1608
- ) {
1609
- return false;
1610
- }
1611
- lastCharCode = code;
1612
- }
1613
- return (
1614
- // Check that last label is shorter than 63 chars
1615
- len - lastDotIndex - 1 <= 63 && // Check that the last character is an allowed trailing label character.
1616
- // Since we already checked that the char is a valid hostname character,
1617
- // we only need to check that it's different from '-'.
1618
- lastCharCode !== 45
1619
- );
1620
- }
1621
-
1622
- // ../../node_modules/.pnpm/tldts-core@7.4.15/node_modules/tldts-core/dist/es6/src/options.js
1623
- function setDefaultsImpl({ allowIcannDomains = true, allowPrivateDomains = false, detectIp = true, detectSpecialUse = false, extractHostname: extractHostname2 = true, mixedInputs = true, validHosts = null, validateHostname = true }) {
1624
- return {
1625
- allowIcannDomains,
1626
- allowPrivateDomains,
1627
- detectIp,
1628
- detectSpecialUse,
1629
- extractHostname: extractHostname2,
1630
- mixedInputs,
1631
- validHosts,
1632
- validateHostname
1633
- };
1634
- }
1635
- var DEFAULT_OPTIONS = (
1636
- /*@__INLINE__*/
1637
- setDefaultsImpl({})
1638
- );
1639
- function setDefaults(options) {
1640
- if (options === void 0) {
1641
- return DEFAULT_OPTIONS;
1642
- }
1643
- return (
1644
- /*@__INLINE__*/
1645
- setDefaultsImpl(options)
1646
- );
1647
- }
1648
-
1649
- // ../../node_modules/.pnpm/tldts-core@7.4.15/node_modules/tldts-core/dist/es6/src/subdomain.js
1650
- function getSubdomain(hostname, domain) {
1651
- if (domain.length === hostname.length) {
1652
- return "";
1653
- }
1654
- return hostname.slice(0, -domain.length - 1);
1655
- }
1656
-
1657
- // ../../node_modules/.pnpm/tldts-core@7.4.15/node_modules/tldts-core/dist/es6/src/factory.js
1658
- function getEmptyResult() {
1659
- return {
1660
- domain: null,
1661
- domainWithoutSuffix: null,
1662
- hostname: null,
1663
- isIcann: null,
1664
- isIp: null,
1665
- isPrivate: null,
1666
- isSpecialUse: null,
1667
- publicSuffix: null,
1668
- subdomain: null
1669
- };
1670
- }
1671
- function resetResult(result) {
1672
- result.domain = null;
1673
- result.domainWithoutSuffix = null;
1674
- result.hostname = null;
1675
- result.isIcann = null;
1676
- result.isIp = null;
1677
- result.isPrivate = null;
1678
- result.isSpecialUse = null;
1679
- result.publicSuffix = null;
1680
- result.subdomain = null;
1681
- }
1682
- function parseImpl(url, step, suffixLookup2, partialOptions, result) {
1683
- const options = (
1684
- /*@__INLINE__*/
1685
- setDefaults(partialOptions)
1686
- );
1687
- if (typeof url !== "string") {
1688
- return result;
1689
- }
1690
- let urlIsValid = false;
1691
- if (!options.extractHostname) {
1692
- result.hostname = url;
1693
- } else if (options.mixedInputs) {
1694
- urlIsValid = is_valid_default(url);
1695
- result.hostname = extractHostname(url, urlIsValid, options.validateHostname);
1696
- } else {
1697
- result.hostname = extractHostname(url, false, options.validateHostname);
1698
- }
1699
- if (options.detectIp && result.hostname !== null) {
1700
- result.isIp = isIp(result.hostname);
1701
- if (result.isIp) {
1702
- return result;
1703
- }
1704
- }
1705
- if (options.validateHostname && options.extractHostname && result.hostname !== null && // Skip the re-scan when `url` was already validated and extractHostname
1706
- // returned it unchanged (same reference => identical string, still valid).
1707
- !(urlIsValid && result.hostname === url) && // Skip the re-scan when extractHostname already validated the host inline
1708
- // (a confirmed-valid simple authority — see extract-hostname.ts).
1709
- !extractedHostnameValidated && !is_valid_default(result.hostname)) {
1710
- result.hostname = null;
1711
- return result;
1712
- }
1713
- if (step === 0 || result.hostname === null) {
1714
- return result;
1715
- }
1716
- if (step === 5 && options.detectSpecialUse) {
1717
- result.isSpecialUse = isSpecialUse(result.hostname);
1718
- }
1719
- suffixLookup2(result.hostname, options, result);
1720
- if (step === 2 || result.publicSuffix === null) {
1721
- return result;
1722
- }
1723
- result.domain = getDomain(result.publicSuffix, result.hostname, options);
1724
- if (step === 3 || result.domain === null) {
1725
- return result;
1726
- }
1727
- result.subdomain = getSubdomain(result.hostname, result.domain);
1728
- if (step === 4) {
1729
- return result;
1730
- }
1731
- result.domainWithoutSuffix = getDomainWithoutSuffix(result.domain, result.publicSuffix);
1732
- return result;
1733
- }
1734
-
1735
- // ../../node_modules/.pnpm/tldts-core@7.4.15/node_modules/tldts-core/dist/es6/src/lookup/fast-path.js
1736
- function fast_path_default(hostname, options, out) {
1737
- if (!options.allowPrivateDomains && hostname.length > 3) {
1738
- const last = hostname.length - 1;
1739
- const c3 = hostname.charCodeAt(last);
1740
- const c2 = hostname.charCodeAt(last - 1);
1741
- const c1 = hostname.charCodeAt(last - 2);
1742
- const c0 = hostname.charCodeAt(last - 3);
1743
- if (c3 === 109 && c2 === 111 && c1 === 99 && c0 === 46) {
1744
- out.isIcann = true;
1745
- out.isPrivate = false;
1746
- out.publicSuffix = "com";
1747
- return true;
1748
- } else if (c3 === 103 && c2 === 114 && c1 === 111 && c0 === 46) {
1749
- out.isIcann = true;
1750
- out.isPrivate = false;
1751
- out.publicSuffix = "org";
1752
- return true;
1753
- } else if (c3 === 117 && c2 === 100 && c1 === 101 && c0 === 46) {
1754
- out.isIcann = true;
1755
- out.isPrivate = false;
1756
- out.publicSuffix = "edu";
1757
- return true;
1758
- } else if (c3 === 118 && c2 === 111 && c1 === 103 && c0 === 46) {
1759
- out.isIcann = true;
1760
- out.isPrivate = false;
1761
- out.publicSuffix = "gov";
1762
- return true;
1763
- } else if (c3 === 116 && c2 === 101 && c1 === 110 && c0 === 46) {
1764
- out.isIcann = true;
1765
- out.isPrivate = false;
1766
- out.publicSuffix = "net";
1767
- return true;
1768
- } else if (c3 === 101 && c2 === 100 && c1 === 46) {
1769
- out.isIcann = true;
1770
- out.isPrivate = false;
1771
- out.publicSuffix = "de";
1772
- return true;
1773
- }
1774
- }
1775
- return false;
1776
- }
1777
-
1778
- // ../../node_modules/.pnpm/tldts@7.4.15/node_modules/tldts/dist/es6/src/data/trie.js
1779
- var nodeFlags = /* @__PURE__ */ new Uint8Array([1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 2, 0, 2, 2, 0, 2, 0, 0, 1, 0, 0, 2, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 2, 2, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 2, 1, 1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 2, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 2, 2, 0, 0, 0, 2, 0, 1, 1, 0, 2, 0, 2, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 2, 2, 0, 2, 2, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 2, 2, 0, 2, 2, 2, 2, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 2, 0, 0, 0, 2, 2, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 2, 2, 0, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 2, 2, 1, 2, 1, 1, 1, 2, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 2, 1, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0]);
1780
- var edgeStart = /* @__PURE__ */ new Uint16Array([0, 0, 0, 10, 11, 18, 106, 111, 117, 124, 130, 136, 145, 146, 147, 148, 149, 150, 151, 153, 154, 155, 157, 159, 226, 239, 241, 242, 243, 258, 265, 266, 269, 270, 271, 274, 276, 295, 296, 298, 307, 312, 329, 330, 333, 335, 336, 338, 372, 373, 375, 378, 379, 383, 385, 389, 392, 424, 427, 440, 441, 449, 450, 452, 462, 476, 477, 478, 487, 488, 525, 530, 546, 566, 572, 614, 615, 642, 669, 670, 818, 824, 827, 828, 829, 834, 839, 848, 870, 871, 872, 873, 874, 875, 876, 894, 896, 897, 900, 902, 903, 905, 907, 922, 937, 942, 943, 945, 946, 947, 948, 949, 951, 954, 959, 960, 961, 963, 964, 967, 970, 971, 972, 985, 987, 999, 1010, 1018, 1020, 1061, 1064, 1068, 1069, 1071, 1074, 1085, 1087, 1097, 1099, 1105, 1107, 1108, 1110, 1113, 1114, 1115, 1168, 1170, 1172, 1192, 1193, 1194, 1195, 1197, 1208, 1239, 1250, 1262, 1271, 1278, 1283, 1296, 1307, 1320, 1321, 1332, 1366, 1367, 1368, 1383, 1398, 1470, 1471, 1473, 1474, 1508, 1509, 1510, 1511, 1514, 1518, 1521, 1523, 1552, 1553, 1561, 1562, 1563, 1564, 1566, 1568, 1569, 1571, 1572, 1573, 1584, 1585, 1586, 1587, 1588, 1589, 1590, 1591, 1592, 1593, 1594, 1595, 1596, 1597, 1599, 1600, 1601, 2055, 2058, 2059, 2061, 2068, 2075, 2085, 2089, 2100, 2101, 2102, 2114, 2115, 2117, 2119, 2120, 2127, 2128, 2130, 2131, 2133, 2134, 2135, 2136, 2137, 2211, 2213, 2234, 2235, 2236, 2238, 2264, 2265, 2316, 2317, 2319, 2326, 2332, 2342, 2352, 2405, 2406, 2407, 2417, 2431, 2432, 2435, 2442, 2443, 2451, 2452, 2453, 2454, 2455, 2466, 2467, 2468, 2470, 2471, 2472, 2481, 2493, 2499, 2531, 2535, 2537, 2538, 2540, 2541, 2552, 2553, 2555, 2563, 2570, 2576, 2581, 2582, 2588, 2591, 2597, 2604, 2605, 2612, 2620, 2621, 2622, 2660, 2666, 2681, 2682, 2687, 2705, 2736, 2754, 2756, 2759, 2767, 2769, 2776, 2828, 2852, 2853, 2854, 2855, 2856, 2857, 2858, 2865, 2866, 2867, 2868, 2869, 2870, 2872, 2873, 2877, 2957, 2970, 2971, 3408, 3412, 3426, 3478, 3506, 3528, 3586, 3608, 3623, 3686, 3737, 3775, 3811, 3836, 3978, 4024, 4075, 4094, 4128, 4143, 4163, 4193, 4224, 4247, 4278, 4308, 4340, 4367, 4442, 4464, 4502, 4512, 4546, 4565, 4591, 4633, 4683, 4709, 4778, 4779, 4781, 4804, 4827, 4863, 4894, 4911, 4968, 4981, 5005, 5034, 5036, 5070, 5086, 5114, 5419, 5428, 5437, 5444, 5461, 5465, 5471, 5510, 5512, 5519, 5526, 5535, 5542, 5543, 5544, 5556, 5559, 5574, 5575, 5584, 5585, 5594, 5603, 5609, 5611, 5612, 5613, 5650, 5651, 5653, 5661, 5668, 5681, 5685, 5687, 5688, 5694, 5701, 5715, 5725, 5730, 5738, 5746, 5752, 5753, 5757, 5759, 5760, 5772, 5844, 5845, 5846, 5847, 5849, 5850, 5853, 5855, 5858, 5862, 5863, 5864, 5870, 5871, 5872, 5874, 5876, 5878, 5879, 5880, 5883, 5885, 5888, 5889, 5891, 6089, 6096, 6097, 6098, 6108, 6113, 6130, 6144, 6153, 6154, 6155, 6159, 6160, 6162, 6164, 6170, 6171, 6174, 6175, 6177, 6178, 6179, 7079, 7082, 7086, 7104, 7113, 7116, 7123, 7124, 7126, 7127, 7128, 7130, 7182, 7183, 7186, 7187, 7304, 7305, 7316, 7327, 7334, 7337, 7346, 7347, 7348, 7363, 7418, 7609, 7611, 7612, 7614, 7619, 7632, 7647, 7654, 7663, 7666, 7669, 7676, 7684, 7688, 7689, 7690, 7704, 7708, 7717, 7718, 7719, 7723, 7758, 7759, 7777, 7784, 7792, 7793, 7798, 7806, 7850, 7851, 7857, 7860, 7872, 7877, 7878, 7881, 7883, 7918, 7919, 7925, 7932, 7933, 7942, 7951, 7966, 7970, 7971, 8023, 8024, 8029, 8031, 8034, 8036, 8037, 8038, 8047, 8061, 8069, 8083, 8095, 8096, 8098, 8100, 8122, 8133, 8139, 8140, 8152, 8164, 8251, 8263, 8271, 8274, 8280, 8305, 8308, 8309, 8310, 8311, 8313, 8316, 8319, 8330, 8332, 8334, 8362, 8437, 8444, 8448, 8449, 8458, 8480, 8481, 8486, 8487, 8566, 8568, 8570, 8579, 8583, 8589, 8595, 8601, 8611, 8616, 8617, 8635, 8646, 8651, 8656, 8666, 8672, 8676, 8682, 8688, 10297, 10298, 10299, 10306, 10308]);
1781
- var edgeLength = /* @__PURE__ */ new Uint8Array([3, 3, 3, 3, 3, 3, 3, 3, 5, 8, 8, 2, 2, 3, 3, 3, 3, 3, 8, 5, 5, 5, 5, 5, 3, 3, 5, 5, 9, 12, 19, 8, 19, 8, 11, 9, 9, 8, 7, 7, 6, 8, 9, 16, 10, 7, 7, 11, 8, 6, 6, 9, 7, 11, 7, 14, 4, 4, 4, 4, 4, 4, 10, 7, 6, 6, 6, 6, 10, 10, 6, 10, 10, 22, 11, 9, 10, 10, 10, 9, 10, 8, 7, 7, 7, 8, 21, 13, 11, 11, 9, 10, 9, 13, 10, 8, 8, 9, 12, 9, 7, 10, 7, 7, 13, 7, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 6, 3, 3, 3, 3, 3, 3, 2, 5, 3, 3, 3, 7, 2, 2, 2, 2, 2, 2, 3, 3, 3, 1, 1, 7, 8, 5, 2, 2, 7, 2, 2, 1, 4, 1, 11, 9, 9, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 5, 11, 9, 9, 13, 7, 14, 7, 6, 6, 6, 7, 6, 6, 6, 6, 6, 10, 7, 11, 9, 4, 4, 4, 4, 4, 6, 6, 6, 6, 13, 6, 8, 7, 10, 9, 9, 9, 8, 9, 8, 7, 10, 6, 9, 8, 10, 10, 7, 8, 1, 9, 10, 12, 12, 12, 10, 9, 9, 10, 10, 9, 9, 1, 1, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 4, 3, 3, 3, 7, 4, 4, 4, 3, 3, 6, 7, 3, 4, 1, 2, 2, 2, 6, 1, 2, 2, 2, 2, 2, 12, 5, 3, 8, 9, 13, 4, 4, 13, 9, 9, 11, 7, 3, 12, 9, 2, 2, 2, 3, 3, 3, 3, 3, 8, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 7, 10, 15, 7, 15, 15, 20, 15, 9, 10, 10, 12, 14, 14, 14, 12, 12, 12, 12, 12, 14, 14, 10, 10, 10, 10, 14, 9, 9, 9, 10, 14, 14, 14, 13, 13, 9, 9, 9, 9, 9, 9, 7, 8, 6, 8, 8, 6, 8, 13, 8, 8, 6, 13, 8, 11, 13, 8, 6, 13, 8, 6, 9, 10, 10, 12, 14, 14, 14, 12, 12, 12, 12, 14, 14, 10, 10, 10, 10, 9, 9, 9, 10, 14, 14, 11, 13, 13, 9, 9, 9, 9, 9, 9, 2, 6, 9, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 2, 3, 3, 3, 3, 3, 3, 7, 7, 2, 3, 2, 2, 5, 3, 3, 3, 3, 3, 3, 4, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 5, 7, 2, 2, 12, 8, 10, 8, 10, 7, 18, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 2, 2, 3, 3, 3, 5, 5, 3, 8, 8, 6, 8, 6, 6, 4, 6, 7, 7, 7, 10, 11, 2, 5, 5, 3, 3, 3, 3, 3, 3, 5, 5, 6, 11, 10, 7, 7, 7, 4, 4, 4, 2, 3, 3, 3, 3, 3, 2, 2, 7, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 11, 7, 6, 9, 6, 6, 8, 10, 8, 6, 8, 13, 4, 4, 4, 4, 4, 10, 8, 11, 8, 8, 8, 10, 10, 7, 10, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 10, 13, 7, 8, 7, 11, 8, 8, 6, 9, 8, 8, 6, 6, 6, 8, 8, 6, 6, 6, 6, 6, 9, 7, 6, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 9, 7, 8, 10, 8, 8, 2, 3, 3, 3, 3, 3, 2, 8, 9, 9, 2, 2, 2, 3, 3, 3, 2, 3, 3, 3, 9, 2, 2, 3, 3, 3, 3, 3, 3, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 5, 5, 3, 5, 4, 2, 3, 2, 4, 3, 9, 2, 2, 2, 2, 2, 5, 5, 3, 8, 8, 13, 6, 10, 9, 4, 7, 9, 11, 2, 3, 7, 3, 3, 4, 1, 3, 4, 2, 9, 3, 3, 12, 5, 3, 7, 10, 10, 7, 4, 4, 6, 14, 7, 9, 7, 13, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 8, 15, 4, 4, 2, 3, 3, 3, 7, 4, 9, 9, 2, 3, 3, 3, 5, 3, 2, 2, 7, 2, 7, 6, 6, 7, 2, 4, 2, 2, 2, 2, 2, 2, 8, 8, 8, 9, 5, 2, 3, 3, 3, 3, 3, 3, 10, 7, 4, 4, 4, 4, 3, 4, 2, 3, 3, 3, 3, 3, 10, 7, 4, 4, 4, 4, 2, 3, 3, 3, 3, 10, 7, 4, 4, 4, 4, 3, 9, 6, 6, 6, 9, 13, 9, 2, 2, 2, 8, 7, 9, 5, 3, 3, 3, 5, 5, 13, 12, 9, 10, 7, 8, 7, 6, 8, 6, 11, 12, 7, 9, 10, 4, 4, 7, 8, 11, 6, 7, 9, 8, 7, 10, 8, 9, 15, 7, 8, 5, 4, 7, 2, 3, 3, 3, 2, 14, 10, 2, 14, 10, 2, 14, 3, 9, 13, 13, 10, 14, 16, 17, 11, 2, 14, 2, 14, 3, 9, 13, 10, 14, 16, 17, 11, 14, 10, 14, 2, 7, 3, 10, 7, 14, 10, 2, 14, 10, 9, 9, 17, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 10, 10, 10, 12, 9, 4, 10, 10, 11, 8, 8, 8, 7, 9, 5, 3, 3, 3, 3, 3, 3, 3, 3, 5, 8, 4, 4, 4, 4, 4, 4, 6, 16, 3, 3, 14, 3, 14, 2, 14, 9, 13, 10, 10, 14, 16, 17, 11, 6, 9, 10, 10, 12, 14, 14, 14, 12, 12, 12, 12, 14, 14, 10, 10, 10, 10, 14, 9, 9, 9, 10, 14, 14, 14, 9, 9, 9, 9, 9, 9, 2, 14, 9, 13, 10, 10, 14, 16, 17, 11, 6, 2, 14, 9, 17, 13, 10, 10, 14, 16, 17, 11, 6, 2, 14, 9, 13, 10, 14, 16, 17, 11, 2, 14, 9, 13, 10, 16, 11, 2, 14, 10, 19, 7, 2, 14, 9, 13, 10, 19, 10, 7, 14, 16, 17, 11, 6, 2, 14, 9, 13, 10, 19, 7, 14, 16, 17, 11, 2, 14, 9, 13, 17, 13, 10, 10, 14, 16, 17, 11, 6, 3, 2, 14, 9, 13, 10, 10, 14, 16, 17, 11, 6, 9, 10, 12, 14, 14, 14, 12, 12, 12, 12, 12, 14, 14, 14, 10, 10, 10, 14, 9, 9, 9, 9, 14, 14, 14, 13, 13, 14, 9, 9, 9, 9, 9, 9, 4, 11, 2, 14, 9, 13, 17, 13, 10, 19, 10, 7, 14, 16, 17, 11, 6, 2, 14, 9, 13, 17, 13, 10, 19, 10, 7, 14, 16, 17, 11, 6, 2, 9, 10, 10, 7, 17, 3, 3, 12, 12, 16, 15, 15, 12, 14, 14, 14, 20, 20, 13, 12, 12, 12, 12, 12, 12, 20, 25, 14, 14, 12, 12, 10, 10, 10, 10, 9, 9, 9, 25, 4, 9, 17, 10, 7, 14, 16, 21, 13, 13, 14, 20, 14, 13, 17, 24, 9, 12, 13, 25, 13, 21, 20, 17, 9, 9, 9, 9, 9, 9, 12, 17, 4, 4, 9, 9, 9, 10, 10, 12, 14, 14, 14, 12, 12, 12, 12, 12, 14, 14, 10, 10, 10, 10, 14, 9, 9, 9, 10, 14, 14, 14, 13, 13, 9, 9, 9, 9, 9, 9, 1, 5, 8, 7, 11, 11, 1, 3, 3, 3, 5, 3, 3, 4, 8, 9, 10, 14, 14, 12, 12, 12, 12, 14, 14, 10, 10, 10, 10, 14, 9, 9, 9, 10, 14, 14, 14, 13, 13, 9, 9, 9, 9, 9, 7, 4, 4, 4, 4, 4, 4, 4, 4, 4, 7, 4, 9, 12, 6, 14, 4, 12, 7, 2, 2, 1, 2, 7, 6, 4, 4, 4, 6, 8, 8, 7, 4, 5, 6, 3, 3, 3, 3, 4, 16, 8, 5, 4, 3, 3, 3, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11, 12, 7, 7, 13, 9, 10, 17, 12, 8, 9, 7, 8, 5, 12, 10, 13, 14, 5, 5, 5, 13, 5, 5, 5, 3, 3, 3, 5, 16, 5, 5, 5, 5, 7, 12, 14, 8, 12, 8, 10, 12, 9, 11, 7, 9, 7, 10, 7, 13, 9, 7, 12, 8, 17, 7, 7, 16, 10, 13, 13, 8, 10, 10, 14, 17, 7, 16, 16, 15, 8, 10, 10, 12, 17, 17, 7, 17, 14, 7, 10, 17, 8, 7, 7, 7, 8, 15, 15, 7, 14, 10, 10, 10, 11, 11, 7, 7, 13, 8, 10, 7, 16, 7, 8, 7, 14, 17, 12, 10, 11, 21, 8, 9, 7, 13, 9, 8, 13, 6, 12, 7, 6, 13, 10, 10, 10, 8, 18, 9, 17, 13, 10, 12, 6, 13, 6, 11, 8, 13, 10, 13, 18, 13, 11, 13, 8, 16, 7, 10, 8, 16, 12, 10, 8, 8, 14, 11, 8, 15, 8, 8, 7, 7, 12, 7, 8, 9, 14, 15, 8, 9, 10, 9, 15, 7, 8, 8, 12, 13, 9, 10, 15, 13, 7, 10, 10, 20, 7, 6, 9, 6, 6, 14, 11, 14, 11, 12, 9, 10, 16, 16, 12, 7, 11, 28, 8, 11, 10, 7, 21, 8, 7, 9, 4, 4, 4, 17, 7, 8, 6, 9, 6, 6, 13, 6, 6, 6, 6, 18, 20, 14, 8, 11, 12, 9, 10, 13, 15, 15, 19, 8, 9, 12, 7, 10, 16, 12, 9, 9, 9, 14, 12, 11, 9, 12, 11, 18, 9, 9, 9, 10, 7, 7, 16, 8, 9, 7, 13, 12, 10, 14, 18, 7, 8, 11, 7, 7, 8, 8, 13, 7, 7, 7, 11, 15, 13, 11, 7, 8, 15, 11, 7, 8, 18, 14, 13, 18, 15, 10, 12, 12, 9, 7, 11, 11, 8, 7, 10, 8, 14, 12, 10, 18, 7, 10, 9, 7, 8, 13, 10, 14, 10, 8, 8, 23, 7, 7, 11, 12, 12, 17, 7, 7, 11, 11, 17, 16, 16, 7, 8, 11, 14, 14, 8, 10, 7, 7, 16, 16, 13, 9, 11, 9, 15, 15, 11, 11, 7, 7, 14, 7, 9, 7, 7, 16, 10, 13, 10, 11, 14, 7, 11, 10, 11, 7, 11, 10, 11, 15, 11, 15, 10, 12, 10, 14, 13, 11, 11, 12, 13, 10, 7, 13, 10, 16, 12, 21, 9, 10, 10, 7, 11, 14, 17, 7, 7, 8, 11, 12, 8, 15, 14, 14, 8, 17, 12, 10, 10, 7, 9, 11, 7, 10, 7, 11, 18, 7, 11, 7, 12, 11, 8, 8, 14, 12, 7, 8, 15, 3, 7, 7, 5, 2, 9, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 5, 3, 3, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 3, 5, 11, 6, 4, 7, 10, 7, 7, 11, 1, 10, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 3, 5, 6, 3, 3, 5, 2, 2, 5, 3, 4, 13, 11, 3, 3, 6, 3, 5, 14, 2, 2, 3, 8, 2, 2, 12, 5, 18, 5, 3, 3, 3, 16, 5, 5, 5, 10, 7, 13, 12, 13, 9, 12, 14, 19, 9, 9, 21, 9, 9, 10, 6, 9, 6, 15, 10, 6, 12, 8, 6, 10, 15, 4, 4, 6, 6, 9, 9, 12, 16, 14, 23, 7, 7, 7, 14, 9, 7, 7, 11, 14, 10, 7, 10, 10, 10, 12, 6, 11, 10, 13, 11, 15, 11, 7, 12, 10, 3, 7, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 4, 3, 7, 2, 5, 5, 3, 3, 5, 5, 5, 5, 7, 6, 6, 6, 4, 4, 4, 4, 4, 4, 6, 6, 6, 6, 6, 7, 10, 2, 2, 2, 5, 5, 5, 5, 3, 3, 3, 3, 3, 5, 5, 10, 9, 11, 8, 7, 12, 8, 9, 7, 6, 13, 11, 6, 13, 7, 9, 9, 4, 4, 4, 4, 4, 6, 10, 7, 8, 13, 8, 8, 9, 14, 7, 8, 10, 7, 7, 7, 9, 6, 9, 7, 2, 12, 5, 3, 3, 13, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 2, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 1, 7, 6, 4, 12, 3, 3, 3, 3, 3, 8, 7, 3, 3, 3, 3, 3, 3, 4, 4, 11, 14, 2, 8, 3, 5, 5, 8, 10, 8, 6, 4, 7, 17, 7, 4, 5, 2, 6, 3, 2, 2, 12, 5, 5, 3, 15, 13, 8, 11, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 3, 3, 3, 3, 4, 18, 2, 12, 5, 3, 3, 3, 3, 3, 5, 16, 8, 8, 9, 6, 6, 4, 4, 4, 4, 31, 6, 6, 10, 11, 21, 10, 9, 7, 10, 7, 7, 2, 4, 4, 4, 4, 6, 5, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 6, 6, 2, 2, 2, 5, 3, 3, 3, 7, 7, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 8, 2, 3, 3, 3, 3, 3, 5, 9, 11, 3, 3, 3, 3, 4, 4, 3, 3, 3, 3, 3, 5, 10, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 11, 10, 10, 10, 10, 10, 11, 10, 11, 10, 11, 10, 9, 9, 11, 3, 3, 3, 3, 3, 3, 5, 3, 7, 8, 8, 7, 6, 6, 11, 4, 4, 4, 7, 8, 9, 9, 2, 3, 7, 4, 4, 2, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 2, 2, 5, 5, 5, 5, 5, 3, 3, 5, 5, 5, 7, 7, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 6, 9, 12, 3, 7, 10, 7, 2, 2, 3, 3, 3, 3, 3, 4, 3, 3, 2, 2, 2, 2, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 8, 8, 6, 6, 8, 6, 7, 4, 4, 4, 4, 4, 4, 6, 7, 5, 5, 20, 19, 8, 10, 9, 7, 10, 6, 8, 11, 6, 6, 6, 6, 13, 12, 8, 6, 7, 14, 11, 9, 2, 5, 3, 6, 2, 3, 2, 2, 2, 2, 2, 2, 2, 5, 4, 3, 7, 6, 4, 7, 4, 3, 6, 4, 7, 2, 7, 7, 7, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 9, 10, 10, 11, 7, 8, 20, 7, 8, 9, 8, 12, 6, 6, 6, 8, 9, 8, 12, 6, 6, 8, 13, 10, 12, 6, 6, 7, 7, 9, 6, 4, 4, 4, 4, 4, 4, 10, 6, 6, 6, 7, 14, 11, 10, 7, 8, 10, 8, 11, 14, 11, 11, 9, 7, 9, 8, 11, 9, 17, 10, 9, 2, 2, 2, 9, 3, 3, 3, 3, 15, 14, 9, 5, 5, 2, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 15, 12, 22, 19, 17, 18, 18, 19, 21, 7, 16, 16, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 7, 16, 11, 11, 7, 7, 7, 7, 17, 7, 8, 12, 15, 9, 19, 7, 19, 8, 21, 11, 12, 19, 14, 22, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 16, 16, 19, 24, 12, 7, 14, 7, 12, 7, 8, 10, 10, 13, 7, 12, 12, 7, 7, 10, 18, 15, 12, 16, 7, 14, 12, 17, 10, 16, 17, 12, 17, 25, 7, 7, 7, 13, 6, 9, 6, 9, 18, 6, 6, 11, 20, 10, 6, 6, 6, 6, 6, 6, 17, 6, 6, 6, 15, 6, 6, 6, 6, 6, 8, 14, 11, 12, 11, 15, 13, 19, 17, 21, 7, 18, 8, 13, 13, 8, 12, 8, 6, 6, 13, 6, 15, 15, 16, 6, 6, 16, 6, 6, 6, 14, 6, 18, 6, 6, 6, 17, 18, 9, 13, 15, 8, 19, 8, 15, 15, 18, 14, 16, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 11, 10, 11, 6, 21, 23, 12, 17, 12, 11, 14, 13, 22, 15, 15, 11, 12, 14, 12, 7, 12, 8, 12, 14, 12, 18, 10, 8, 16, 19, 17, 12, 14, 15, 8, 19, 17, 12, 13, 13, 15, 18, 13, 23, 24, 23, 21, 17, 24, 8, 21, 8, 14, 14, 16, 20, 14, 8, 8, 15, 20, 8, 19, 21, 9, 8, 13, 12, 13, 15, 11, 8, 11, 9, 9, 8, 11, 8, 21, 14, 21, 15, 15, 13, 7, 19, 7, 7, 7, 7, 7, 7, 16, 12, 17, 18, 7, 7, 11, 11, 7, 9, 9, 2, 2, 3, 3, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 10, 10, 7, 9, 7, 7, 7, 6, 8, 6, 6, 6, 6, 6, 6, 6, 7, 6, 8, 6, 6, 9, 7, 7, 7, 4, 4, 4, 4, 4, 4, 4, 4, 8, 9, 8, 7, 8, 7, 8, 10, 7, 5, 5, 5, 5, 5, 5, 3, 9, 7, 7, 8, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 6, 9, 11, 13, 7, 8, 9, 9, 5, 5, 5, 7, 8, 6, 6, 6, 6, 6, 6, 6, 7, 8, 9, 7, 10, 9, 10, 7, 8, 5, 5, 5, 5, 5, 5, 7, 7, 9, 8, 7, 7, 6, 6, 6, 6, 6, 6, 10, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 10, 4, 4, 4, 4, 8, 7, 7, 10, 10, 9, 8, 8, 15, 9, 8, 8, 8, 8, 8, 9, 10, 9, 10, 7, 8, 13, 5, 5, 5, 5, 5, 3, 3, 7, 7, 8, 6, 6, 6, 4, 4, 11, 9, 7, 8, 9, 10, 7, 5, 5, 5, 5, 5, 3, 3, 7, 6, 6, 13, 7, 9, 8, 7, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 7, 8, 7, 8, 13, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 6, 6, 6, 6, 7, 6, 7, 6, 6, 9, 7, 4, 4, 4, 4, 4, 4, 4, 7, 8, 7, 8, 9, 8, 8, 8, 7, 10, 7, 8, 5, 5, 5, 5, 5, 5, 5, 5, 3, 7, 7, 7, 7, 9, 7, 10, 9, 6, 6, 6, 6, 6, 8, 8, 6, 6, 6, 7, 6, 6, 6, 9, 9, 4, 4, 13, 7, 10, 9, 9, 12, 7, 8, 8, 10, 8, 8, 8, 8, 8, 8, 5, 5, 5, 5, 3, 7, 7, 11, 7, 9, 8, 8, 6, 6, 10, 6, 8, 8, 8, 6, 7, 6, 6, 12, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 8, 8, 16, 8, 9, 8, 7, 5, 5, 5, 5, 5, 3, 3, 7, 7, 7, 10, 15, 8, 9, 8, 9, 9, 6, 6, 6, 6, 6, 6, 7, 4, 8, 7, 8, 8, 7, 8, 11, 8, 5, 5, 5, 5, 5, 3, 7, 7, 6, 11, 16, 7, 6, 4, 4, 4, 4, 9, 9, 8, 8, 8, 13, 12, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 7, 8, 8, 9, 13, 7, 7, 7, 9, 8, 8, 9, 12, 7, 12, 7, 12, 8, 7, 10, 12, 9, 9, 6, 6, 8, 8, 6, 6, 6, 6, 6, 6, 6, 9, 8, 9, 11, 8, 6, 6, 6, 6, 6, 12, 7, 6, 6, 6, 9, 7, 7, 6, 6, 6, 6, 6, 11, 9, 6, 6, 6, 6, 6, 7, 9, 4, 4, 4, 4, 4, 4, 4, 4, 9, 9, 9, 9, 7, 7, 7, 7, 7, 11, 7, 7, 8, 8, 8, 8, 8, 8, 9, 8, 9, 9, 7, 7, 11, 11, 7, 12, 8, 8, 8, 8, 8, 7, 8, 8, 8, 8, 8, 13, 12, 8, 8, 8, 8, 7, 7, 7, 9, 5, 5, 5, 5, 5, 5, 5, 3, 3, 7, 7, 11, 7, 8, 8, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 10, 11, 6, 7, 9, 4, 4, 4, 4, 4, 4, 9, 9, 8, 9, 8, 8, 8, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 11, 7, 7, 7, 9, 6, 6, 11, 8, 10, 6, 6, 6, 12, 8, 8, 7, 6, 6, 8, 7, 4, 4, 4, 4, 4, 4, 4, 4, 9, 10, 9, 9, 8, 10, 9, 11, 8, 5, 5, 5, 7, 6, 6, 8, 7, 4, 4, 4, 4, 8, 7, 7, 8, 7, 8, 8, 5, 5, 5, 5, 7, 7, 8, 8, 8, 6, 6, 6, 6, 6, 10, 8, 9, 13, 6, 7, 6, 6, 8, 7, 8, 4, 4, 4, 4, 11, 8, 8, 8, 10, 5, 5, 8, 7, 8, 13, 8, 7, 6, 8, 6, 9, 7, 8, 7, 5, 5, 5, 5, 5, 5, 3, 3, 7, 8, 9, 6, 4, 8, 10, 10, 8, 12, 9, 13, 2, 7, 5, 5, 5, 5, 5, 7, 7, 10, 6, 6, 6, 6, 6, 6, 6, 8, 4, 4, 9, 8, 8, 8, 14, 8, 8, 8, 9, 8, 5, 5, 5, 5, 5, 3, 3, 9, 6, 6, 6, 6, 10, 12, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 4, 11, 8, 7, 8, 8, 8, 5, 5, 3, 3, 3, 3, 7, 7, 6, 8, 6, 8, 11, 7, 6, 6, 6, 7, 4, 8, 11, 9, 10, 5, 5, 5, 3, 3, 3, 7, 7, 8, 9, 8, 15, 9, 6, 6, 6, 6, 6, 6, 11, 11, 4, 4, 4, 4, 4, 7, 9, 9, 10, 8, 7, 5, 5, 5, 5, 5, 5, 3, 3, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 7, 4, 4, 4, 4, 4, 9, 9, 8, 8, 10, 13, 5, 5, 5, 3, 17, 7, 7, 7, 7, 7, 8, 6, 8, 13, 6, 6, 6, 6, 6, 6, 6, 6, 4, 4, 4, 9, 10, 8, 8, 8, 5, 5, 5, 5, 3, 7, 7, 7, 8, 8, 6, 6, 6, 8, 8, 8, 9, 10, 8, 4, 8, 10, 9, 8, 8, 8, 9, 13, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 7, 8, 9, 9, 7, 7, 7, 10, 9, 9, 8, 9, 8, 8, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 12, 6, 6, 6, 6, 6, 6, 6, 6, 6, 12, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 11, 8, 8, 9, 9, 10, 8, 9, 7, 7, 5, 5, 5, 5, 5, 5, 3, 7, 8, 7, 6, 6, 8, 6, 6, 10, 4, 7, 8, 9, 12, 8, 7, 7, 5, 5, 5, 5, 5, 5, 3, 3, 7, 14, 7, 9, 8, 8, 6, 6, 8, 12, 12, 6, 6, 7, 7, 10, 4, 4, 4, 4, 4, 9, 9, 14, 9, 13, 8, 7, 5, 5, 5, 6, 6, 6, 7, 4, 8, 7, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 7, 7, 7, 8, 6, 6, 6, 6, 6, 6, 12, 6, 6, 6, 6, 4, 4, 9, 9, 8, 8, 11, 7, 7, 7, 5, 5, 5, 3, 9, 8, 6, 6, 7, 4, 4, 4, 4, 4, 4, 8, 8, 11, 5, 5, 5, 7, 7, 7, 9, 6, 6, 6, 6, 6, 6, 9, 8, 4, 4, 4, 4, 7, 12, 9, 8, 8, 8, 7, 10, 10, 5, 5, 5, 5, 5, 5, 5, 3, 11, 14, 8, 7, 8, 8, 6, 6, 6, 6, 6, 8, 7, 6, 6, 6, 7, 6, 8, 9, 4, 4, 4, 7, 8, 9, 7, 9, 7, 7, 9, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 3, 9, 7, 7, 12, 14, 8, 6, 6, 12, 11, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 15, 7, 4, 4, 4, 16, 9, 9, 9, 8, 9, 9, 9, 9, 9, 8, 8, 8, 13, 11, 8, 5, 5, 5, 5, 3, 7, 6, 6, 8, 8, 8, 6, 6, 7, 10, 7, 4, 4, 4, 4, 9, 7, 8, 7, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 7, 7, 7, 9, 6, 6, 6, 6, 6, 8, 8, 7, 7, 9, 6, 6, 6, 7, 6, 6, 6, 6, 6, 15, 4, 4, 4, 4, 4, 8, 8, 7, 8, 12, 9, 8, 8, 8, 8, 8, 9, 8, 8, 10, 8, 8, 8, 8, 16, 9, 10, 2, 5, 5, 5, 5, 5, 5, 5, 9, 7, 6, 8, 9, 4, 4, 4, 4, 4, 7, 8, 8, 8, 9, 8, 11, 10, 5, 5, 5, 5, 3, 7, 8, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 4, 12, 10, 12, 7, 7, 7, 7, 7, 7, 7, 5, 5, 5, 5, 3, 3, 7, 7, 10, 8, 9, 7, 6, 10, 7, 6, 6, 4, 4, 8, 9, 7, 9, 9, 9, 9, 8, 8, 8, 8, 10, 5, 5, 5, 5, 5, 5, 8, 7, 6, 6, 6, 10, 6, 7, 10, 7, 4, 4, 4, 4, 4, 4, 4, 12, 9, 10, 7, 7, 10, 8, 10, 5, 12, 9, 6, 6, 6, 6, 6, 7, 6, 4, 4, 4, 10, 9, 9, 8, 7, 7, 5, 5, 5, 5, 5, 5, 3, 3, 13, 7, 7, 9, 7, 7, 7, 8, 9, 9, 7, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 13, 9, 15, 15, 4, 4, 4, 4, 4, 10, 10, 9, 8, 9, 8, 8, 9, 7, 8, 7, 8, 5, 5, 7, 6, 6, 6, 4, 4, 4, 7, 8, 11, 8, 5, 5, 5, 5, 5, 5, 5, 7, 6, 6, 6, 6, 6, 6, 9, 11, 10, 7, 4, 4, 4, 9, 8, 8, 5, 5, 5, 5, 5, 9, 9, 6, 6, 6, 6, 6, 6, 6, 9, 9, 4, 4, 4, 4, 8, 8, 8, 9, 9, 8, 8, 8, 13, 2, 4, 2, 7, 5, 5, 5, 5, 5, 5, 9, 9, 6, 6, 6, 6, 10, 8, 8, 8, 6, 6, 6, 4, 4, 9, 8, 10, 8, 9, 8, 8, 8, 9, 8, 8, 5, 3, 3, 3, 11, 6, 6, 6, 7, 6, 6, 6, 4, 4, 9, 8, 5, 5, 5, 5, 5, 3, 11, 8, 6, 6, 6, 6, 6, 9, 7, 4, 4, 14, 10, 9, 8, 12, 8, 8, 8, 11, 15, 8, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 11, 11, 11, 10, 10, 7, 7, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 7, 11, 7, 7, 11, 11, 7, 8, 9, 10, 7, 7, 9, 9, 9, 9, 7, 7, 10, 8, 13, 8, 8, 8, 8, 11, 10, 6, 6, 8, 10, 11, 14, 14, 6, 6, 6, 6, 6, 6, 9, 11, 7, 7, 6, 8, 12, 11, 11, 6, 6, 10, 6, 6, 6, 6, 6, 10, 7, 7, 6, 6, 11, 6, 6, 6, 11, 8, 9, 7, 6, 10, 11, 9, 10, 11, 7, 11, 8, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 6, 6, 8, 9, 10, 9, 6, 6, 6, 10, 6, 6, 6, 6, 11, 10, 11, 10, 9, 8, 7, 7, 7, 7, 11, 14, 8, 10, 9, 9, 8, 8, 7, 11, 8, 8, 8, 11, 11, 10, 10, 9, 10, 8, 11, 10, 8, 11, 9, 12, 8, 10, 8, 11, 8, 9, 9, 11, 11, 10, 11, 13, 8, 7, 8, 8, 9, 7, 8, 8, 8, 8, 7, 8, 2, 2, 2, 2, 2, 2, 2, 4, 4, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 8, 6, 4, 4, 4, 11, 7, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 3, 3, 3, 3, 8, 7, 7, 8, 8, 4, 8, 7, 7, 7, 9, 7, 8, 9, 8, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 2, 3, 3, 3, 3, 3, 3, 4, 5, 5, 3, 3, 8, 8, 6, 9, 4, 4, 10, 7, 3, 3, 3, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 2, 2, 2, 3, 3, 3, 3, 3, 4, 10, 2, 3, 3, 3, 3, 3, 3, 3, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 5, 2, 4, 2, 6, 2, 2, 9, 5, 5, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 9, 8, 7, 9, 6, 6, 11, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 7, 7, 11, 8, 8, 6, 5, 11, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 2, 3, 3, 3, 3, 3, 3, 6, 4, 4, 4, 4, 3, 3, 3, 3, 5, 7, 2, 3, 3, 3, 3, 3, 8, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 4, 4, 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 6, 3, 3, 8, 10, 3, 4, 4, 1, 1, 1, 1, 1, 1, 1, 8, 9, 10, 7, 7, 1, 14, 18, 13, 18, 13, 10, 10, 16, 13, 18, 16, 13, 16, 18, 13, 22, 16, 16, 16, 14, 21, 16, 9, 14, 16, 9, 9, 14, 10, 10, 14, 12, 14, 19, 12, 11, 18, 13, 17, 15, 15, 15, 15, 16, 14, 13, 19, 18, 15, 19, 18, 12, 18, 12, 11, 20, 14, 15, 10, 17, 17, 16, 19, 20, 21, 15, 13, 16, 15, 15, 15, 1, 1, 3, 8, 7, 7, 8, 8, 8, 1, 6, 1, 1, 6, 3, 3, 4, 7, 3, 3, 5, 5, 4, 4, 4, 4, 4, 2, 7, 7, 8, 12, 3, 4, 5, 1, 3, 4, 4, 10, 4, 3, 3, 3, 8, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 9, 20, 7, 5, 5, 5, 9, 13, 5, 5, 5, 5, 5, 3, 3, 3, 16, 5, 5, 5, 13, 7, 8, 8, 11, 8, 7, 9, 7, 11, 12, 9, 9, 8, 8, 11, 10, 14, 7, 12, 10, 11, 13, 7, 9, 11, 17, 17, 14, 13, 7, 8, 7, 10, 10, 7, 16, 13, 7, 8, 17, 12, 9, 8, 6, 7, 10, 6, 6, 12, 6, 8, 10, 8, 8, 8, 6, 8, 6, 14, 6, 6, 6, 13, 6, 10, 6, 6, 7, 14, 8, 6, 6, 10, 11, 10, 9, 9, 7, 7, 6, 6, 6, 9, 9, 7, 9, 10, 9, 13, 12, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 8, 6, 8, 9, 10, 9, 7, 10, 10, 8, 7, 8, 7, 10, 12, 9, 8, 15, 8, 7, 8, 8, 7, 7, 15, 13, 7, 10, 9, 14, 18, 16, 7, 24, 7, 8, 10, 11, 16, 8, 14, 7, 9, 9, 9, 13, 19, 14, 15, 14, 11, 7, 13, 9, 10, 7, 13, 9, 10, 11, 12, 8, 9, 2, 3, 5, 8, 7, 4, 4, 15, 10, 5, 3, 3, 3, 3, 3, 5, 4, 4, 4, 2, 2, 2, 2, 2, 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 2, 12, 5, 3, 8, 10, 15, 6, 7, 2, 3, 2, 5, 5, 12, 2, 5, 5, 5, 5, 2, 2, 5, 5, 12, 9, 5, 2, 2, 9, 5, 5, 12, 12, 5, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 12, 5, 8, 8, 9, 5, 5, 5, 8, 19, 7, 16, 15, 14, 9, 9, 9, 9, 7, 11, 11, 11, 7, 14, 10, 10, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 14, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 15, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 12, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 9, 12, 9, 9, 12, 12, 12, 15, 7, 11, 7, 14, 11, 18, 13, 8, 18, 15, 18, 12, 14, 12, 8, 8, 8, 8, 9, 9, 9, 12, 7, 10, 10, 8, 8, 12, 12, 12, 7, 12, 12, 9, 7, 7, 7, 7, 7, 8, 15, 12, 9, 10, 10, 7, 10, 10, 13, 11, 10, 9, 22, 11, 9, 8, 8, 8, 8, 8, 13, 18, 13, 9, 15, 19, 9, 7, 7, 10, 7, 7, 7, 11, 8, 13, 17, 7, 7, 10, 10, 10, 7, 20, 16, 7, 7, 7, 7, 7, 7, 11, 21, 12, 12, 13, 11, 14, 16, 8, 8, 13, 11, 7, 7, 13, 7, 7, 14, 15, 15, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 13, 10, 18, 6, 6, 6, 6, 6, 6, 6, 6, 6, 11, 8, 8, 12, 12, 11, 11, 8, 12, 9, 9, 9, 13, 13, 9, 9, 9, 9, 9, 9, 6, 10, 12, 6, 6, 6, 6, 17, 11, 7, 7, 7, 7, 14, 14, 12, 6, 7, 7, 6, 6, 15, 10, 13, 10, 6, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 13, 9, 9, 15, 13, 6, 12, 12, 6, 19, 11, 10, 7, 7, 16, 8, 19, 17, 9, 9, 9, 9, 9, 6, 6, 6, 10, 8, 16, 8, 6, 6, 9, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 6, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 14, 6, 6, 6, 6, 20, 6, 9, 6, 14, 9, 9, 9, 6, 9, 8, 8, 12, 9, 8, 8, 8, 8, 7, 8, 12, 7, 8, 8, 8, 6, 8, 6, 6, 6, 6, 6, 6, 6, 9, 8, 8, 6, 6, 13, 9, 12, 13, 12, 14, 13, 12, 11, 11, 6, 8, 8, 8, 6, 13, 12, 11, 11, 12, 6, 11, 12, 11, 13, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 15, 6, 6, 6, 6, 6, 6, 6, 13, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 8, 8, 8, 8, 6, 18, 6, 12, 13, 13, 13, 9, 10, 15, 9, 12, 6, 6, 6, 6, 6, 6, 6, 6, 9, 15, 10, 9, 10, 13, 9, 19, 8, 18, 17, 10, 10, 8, 8, 6, 6, 6, 6, 6, 6, 10, 14, 8, 16, 16, 9, 8, 15, 8, 8, 10, 12, 14, 7, 7, 8, 8, 7, 7, 7, 7, 8, 13, 13, 11, 9, 9, 9, 12, 10, 17, 8, 11, 9, 7, 7, 14, 8, 14, 14, 7, 7, 7, 7, 7, 7, 14, 7, 7, 7, 7, 7, 10, 10, 8, 14, 7, 7, 7, 7, 8, 8, 8, 8, 8, 17, 9, 7, 15, 7, 8, 12, 7, 9, 14, 7, 7, 7, 9, 13, 8, 14, 7, 16, 18, 13, 15, 14, 12, 13, 10, 15, 9, 7, 7, 7, 10, 13, 15, 15, 9, 9, 9, 9, 19, 11, 7, 11, 11, 13, 8, 8, 8, 8, 7, 12, 19, 17, 9, 9, 13, 7, 7, 7, 9, 7, 7, 7, 12, 13, 15, 10, 8, 8, 14, 15, 12, 13, 13, 8, 12, 14, 7, 11, 7, 14, 15, 13, 12, 8, 8, 8, 8, 11, 13, 15, 15, 8, 13, 12, 8, 8, 8, 13, 10, 16, 14, 11, 8, 8, 12, 12, 9, 15, 15, 12, 12, 13, 8, 8, 9, 12, 13, 9, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 11, 12, 11, 7, 14, 7, 13, 13, 13, 12, 18, 16, 7, 12, 11, 10, 10, 15, 9, 9, 9, 21, 7, 7, 7, 11, 16, 8, 8, 11, 11, 7, 7, 7, 7, 7, 19, 7, 7, 7, 7, 7, 7, 7, 7, 7, 12, 8, 9, 12, 14, 11, 9, 9, 9, 22, 12, 3, 3, 4, 8, 8, 15, 4, 2, 2, 5, 5, 3, 3, 3, 3, 3, 3, 6, 6, 4, 4, 4, 12, 7, 10, 2, 3, 3, 3, 3, 3, 3, 3, 6, 7, 3, 7, 5, 14, 4, 4, 7, 8, 10, 4, 1, 3, 3, 6, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 4, 2, 2, 5, 3, 4, 2, 2, 2, 2, 2, 2, 11, 5, 5, 5, 11, 5, 5, 3, 5, 5, 5, 5, 11, 14, 13, 9, 11, 9, 12, 8, 11, 11, 8, 11, 16, 9, 9, 7, 10, 9, 12, 8, 15, 6, 7, 6, 6, 13, 10, 8, 11, 8, 6, 6, 6, 12, 16, 6, 11, 7, 8, 9, 18, 6, 6, 9, 4, 4, 6, 13, 6, 6, 6, 6, 8, 8, 9, 16, 7, 7, 14, 7, 8, 8, 8, 7, 7, 7, 7, 7, 7, 15, 13, 7, 10, 7, 7, 10, 12, 16, 15, 7, 9, 9, 14, 11, 11, 10, 9, 10, 8, 12, 7, 8, 7, 7, 10, 12, 7, 12, 8, 7, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 3, 5, 5, 5, 10, 4, 8, 7, 10, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 3, 7, 4, 5, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 9, 8, 2, 2, 2, 8, 12, 7, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 8, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 7, 11, 9, 8, 8, 8, 7, 8, 9, 7, 7, 9, 7, 7, 7, 10, 7, 7, 10, 9, 10, 6, 6, 6, 6, 6, 6, 15, 7, 8, 9, 9, 8, 6, 6, 10, 9, 6, 8, 13, 9, 7, 6, 6, 6, 6, 6, 6, 12, 6, 6, 7, 6, 7, 6, 6, 6, 10, 10, 7, 6, 6, 6, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 6, 14, 6, 6, 7, 7, 9, 6, 6, 6, 6, 9, 9, 8, 9, 10, 9, 8, 9, 12, 7, 7, 7, 8, 7, 10, 12, 11, 9, 10, 7, 7, 7, 9, 10, 10, 8, 12, 9, 7, 7, 9, 8, 8, 8, 10, 7, 7, 8, 9, 9, 7, 7, 7, 8, 2, 4, 6, 3, 4, 2, 3, 3, 3, 3, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 5, 8, 6, 4, 7, 3, 3, 3, 3, 3, 3, 3, 12, 3, 3, 3, 3, 3, 3, 4, 4, 2, 3, 5, 3, 4, 7, 3, 3, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 4, 3, 3, 6, 4, 3, 4, 2, 2, 2, 5, 3, 3, 3, 3, 3, 5, 4, 4, 4, 4, 7, 6, 8, 9, 2, 2, 2, 2, 3, 3, 3, 5, 7, 2, 3, 3, 8, 7, 7, 2, 2, 8, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 8, 8, 7, 7, 6, 10, 6, 9, 7, 11, 4, 6, 8, 8, 7, 8, 4, 5, 5, 5, 5, 3, 3, 11, 8, 9, 6, 6, 8, 7, 4, 4, 7, 8, 7, 2, 2, 3, 3, 3, 3, 4, 3, 3, 3, 3, 3, 3, 3, 3, 7, 2, 2, 5, 3, 3, 2, 3, 3, 3, 3, 3, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 12, 5, 5, 3, 3, 3, 5, 10, 12, 6, 15, 4, 6, 6, 7, 14, 9, 3, 3, 3, 3, 3, 8, 2, 2, 3, 5, 5, 3, 3, 3, 3, 3, 3, 8, 8, 8, 7, 5, 8, 4, 6, 11, 2, 2, 6, 7, 3, 3, 2, 9, 8, 5, 5, 3, 3, 3, 5, 5, 7, 7, 6, 6, 10, 6, 8, 6, 8, 9, 7, 4, 4, 4, 4, 7, 6, 6, 7, 7, 10, 9, 8, 11, 8, 3, 3, 3, 3, 3, 4, 4, 2, 3, 3, 3, 3, 3, 7, 6, 2, 5, 6, 7, 6, 4, 8, 9, 11, 2, 2, 3, 3, 3, 3, 3, 3, 3, 2, 2, 5, 3, 3, 3, 3, 3, 9, 9, 6, 4, 8, 7, 7, 5, 9, 8, 6, 2, 8, 7, 8, 5, 5, 5, 5, 5, 3, 3, 3, 16, 8, 7, 7, 7, 8, 7, 7, 7, 7, 9, 6, 9, 6, 10, 7, 7, 7, 6, 10, 8, 9, 11, 11, 8, 4, 4, 10, 8, 8, 6, 9, 6, 11, 8, 8, 8, 15, 7, 8, 9, 5, 3, 3, 3, 3, 3, 5, 11, 2, 2, 3, 8, 9, 10, 3, 2, 2, 2, 2, 2, 2, 3, 6, 4, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 2, 3, 3, 3, 3, 3, 3, 3, 11, 5, 3, 3, 3, 3, 3, 3, 3, 3, 6, 7, 4, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 12, 7, 4, 12, 4, 6, 5, 4, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 11, 10, 6, 4, 6, 10, 8, 3, 3, 3, 3, 3, 3, 3, 3, 5, 4, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 5, 3, 4, 4, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 5, 5, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 7, 8, 8, 7, 13, 12, 10, 10, 8, 8, 7, 7, 9, 12, 11, 6, 6, 8, 8, 9, 7, 7, 7, 10, 15, 10, 4, 4, 4, 4, 4, 11, 8, 8, 9, 7, 9, 14, 14, 12, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 12, 5, 5, 5, 11, 10, 7, 9, 3, 8, 7, 3, 15, 13, 11, 4, 4, 2, 2, 2, 19, 7, 5, 5, 3, 3, 3, 3, 3, 3, 3, 5, 22, 18, 6, 14, 17, 4, 4, 19, 16, 18, 2, 3, 3, 7, 2, 3, 2, 3, 3, 6, 4, 2, 3, 3, 2, 5, 3, 3, 3, 3, 3, 3, 3, 9, 9, 2, 3, 2, 2, 2, 3, 3, 3, 5, 7, 14, 7, 7, 12, 9, 13, 6, 11, 6, 10, 9, 7, 7, 8, 12, 12, 8, 8, 8, 10, 7, 7, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 5, 8, 10, 7, 8, 11, 8, 12, 9, 4, 14, 7, 7, 9, 13, 2, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 1, 2, 2, 3, 3, 3, 3, 3, 3, 5, 2, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 8, 4, 4, 4, 3, 2, 3, 3, 3, 3, 5, 2, 2, 2, 2, 5, 5, 5, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 8, 8, 8, 8, 8, 12, 9, 8, 8, 9, 8, 6, 17, 6, 6, 6, 8, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 4, 4, 8, 8, 9, 9, 9, 7, 7, 7, 7, 7, 7, 7, 9, 9, 9, 7, 8, 8, 8, 10, 7, 13, 10, 8, 9, 3, 3, 5, 13, 3, 3, 3, 3, 3, 7, 7, 6, 6, 10, 13, 11, 11, 8, 8, 9, 8, 9, 9, 10, 10, 10, 11, 10, 10, 13, 13, 16, 15, 11, 12, 9, 9, 10, 9, 11, 10, 9, 9, 14, 7, 8, 3, 10, 7, 7, 3, 2, 2, 2, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 6, 7, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 4, 11, 6, 7, 4, 6, 2, 2, 3, 3, 3, 1, 3, 3, 3, 3, 3, 3, 6, 4, 4, 2, 2, 2, 3, 3, 3, 3, 4, 4, 6, 6, 6, 6, 5, 4, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 9, 11, 6, 10, 9, 12, 7, 7, 11, 14, 9, 7, 12, 3, 3, 7, 12, 11, 12, 7, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 9, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 11, 5, 5, 5, 5, 5, 5, 5, 5, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 10, 3, 3, 3, 11, 3, 5, 9, 11, 8, 12, 14, 9, 7, 8, 7, 7, 11, 11, 7, 7, 10, 9, 8, 10, 9, 7, 7, 7, 7, 7, 7, 8, 8, 7, 11, 8, 8, 8, 7, 7, 10, 8, 7, 13, 12, 7, 17, 10, 8, 8, 11, 7, 11, 11, 14, 7, 11, 7, 8, 6, 9, 20, 8, 7, 9, 16, 7, 10, 6, 11, 10, 8, 9, 7, 16, 11, 11, 9, 8, 9, 8, 8, 8, 11, 8, 15, 8, 8, 9, 7, 8, 8, 11, 10, 7, 5, 7, 10, 10, 15, 7, 7, 7, 8, 7, 8, 8, 10, 11, 10, 10, 10, 11, 11, 7, 8, 6, 8, 8, 8, 10, 6, 8, 6, 6, 7, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 16, 6, 15, 6, 7, 11, 11, 7, 9, 10, 11, 13, 10, 6, 16, 8, 10, 12, 11, 6, 6, 6, 6, 6, 6, 6, 10, 6, 10, 7, 7, 7, 7, 11, 7, 11, 6, 6, 6, 6, 6, 6, 17, 7, 7, 6, 6, 12, 22, 6, 6, 6, 6, 6, 8, 6, 6, 6, 6, 7, 6, 6, 5, 6, 6, 8, 11, 6, 9, 14, 11, 9, 11, 7, 7, 8, 6, 6, 6, 8, 10, 9, 6, 6, 6, 6, 9, 7, 6, 6, 6, 6, 6, 15, 6, 4, 4, 4, 6, 4, 17, 8, 11, 6, 6, 9, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 6, 6, 6, 6, 10, 6, 10, 6, 6, 6, 6, 12, 8, 6, 6, 6, 6, 6, 6, 6, 6, 6, 9, 6, 6, 6, 6, 18, 6, 6, 6, 8, 9, 10, 7, 8, 9, 10, 11, 7, 13, 6, 8, 8, 6, 6, 14, 7, 7, 7, 7, 10, 7, 14, 9, 6, 6, 9, 15, 9, 7, 14, 6, 11, 14, 13, 7, 12, 8, 7, 7, 7, 7, 7, 12, 7, 10, 9, 16, 6, 8, 6, 5, 17, 6, 8, 10, 4, 6, 4, 10, 15, 17, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 8, 4, 4, 11, 7, 4, 4, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 19, 17, 6, 10, 11, 6, 6, 6, 6, 18, 6, 6, 11, 4, 4, 4, 5, 6, 6, 6, 9, 5, 6, 4, 6, 6, 4, 6, 6, 6, 6, 10, 6, 6, 4, 6, 6, 10, 6, 10, 6, 6, 6, 6, 11, 6, 6, 10, 6, 6, 8, 6, 6, 6, 8, 6, 11, 4, 11, 9, 10, 9, 11, 4, 8, 4, 11, 12, 7, 9, 8, 6, 7, 7, 8, 12, 12, 11, 13, 10, 11, 7, 7, 7, 9, 7, 11, 10, 7, 7, 7, 16, 11, 10, 11, 17, 9, 9, 8, 8, 7, 7, 7, 9, 7, 7, 7, 14, 7, 13, 9, 11, 10, 14, 10, 10, 12, 11, 10, 7, 10, 5, 14, 8, 8, 8, 9, 7, 8, 7, 7, 9, 8, 7, 8, 7, 7, 7, 7, 7, 7, 7, 11, 8, 10, 8, 7, 8, 14, 11, 8, 9, 9, 9, 8, 24, 10, 10, 12, 7, 7, 15, 11, 8, 8, 12, 11, 8, 9, 9, 7, 8, 9, 10, 11, 10, 11, 7, 12, 7, 7, 11, 9, 8, 14, 13, 12, 8, 11, 10, 8, 8, 7, 7, 14, 9, 10, 8, 9, 11, 7, 14, 8, 8, 13, 8, 8, 12, 7, 10, 14, 14, 11, 9, 10, 9, 9, 7, 7, 11, 11, 13, 9, 13, 5, 5, 5, 7, 9, 5, 11, 12, 14, 8, 7, 7, 11, 10, 9, 7, 8, 8, 7, 10, 11, 11, 5, 5, 7, 5, 5, 5, 7, 7, 15, 7, 7, 8, 7, 15, 12, 12, 10, 7, 8, 7, 11, 7, 7, 7, 23, 11, 8, 8, 11, 10, 7, 8, 11, 7, 19, 7, 7, 6, 9, 9, 9, 11, 3, 4, 7, 8, 6, 6, 4, 10, 8, 2, 2]);
1782
- var edgeChild = /* @__PURE__ */ new Uint16Array([0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 1, 1, 1, 1, 1, 17, 1, 1, 1, 12, 1, 12, 1, 12, 13, 1, 1, 1, 1, 12, 1, 12, 1, 1, 1, 1, 1, 14, 21, 1, 1, 1, 1, 1, 1, 1, 19, 12, 1, 1, 1, 1, 1, 1, 1, 20, 1, 1, 1, 16, 18, 1, 1, 15, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 22, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 24, 25, 26, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 12, 12, 12, 12, 1, 32, 0, 0, 0, 1, 1, 1, 1, 35, 34, 1, 1, 1, 1, 1, 33, 1, 1, 1, 1, 37, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 38, 0, 0, 0, 0, 39, 40, 0, 0, 0, 0, 12, 1, 1, 12, 1, 1, 1, 1, 43, 44, 44, 44, 43, 44, 43, 43, 45, 44, 43, 44, 43, 43, 43, 43, 43, 43, 45, 43, 43, 43, 43, 43, 43, 44, 46, 46, 44, 43, 43, 43, 43, 43, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 51, 49, 49, 49, 51, 49, 50, 49, 52, 49, 50, 50, 49, 49, 49, 50, 52, 50, 52, 49, 50, 50, 12, 54, 54, 53, 55, 50, 52, 49, 49, 47, 48, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 59, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 66, 1, 12, 1, 1, 65, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 78, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 12, 1, 1, 1, 1, 88, 1, 90, 1, 1, 1, 1, 1, 1, 1, 1, 93, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 96, 96, 1, 1, 12, 1, 99, 1, 1, 1, 1, 1, 1, 1, 97, 1, 98, 1, 100, 1, 1, 1, 1, 1, 101, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 109, 110, 1, 1, 1, 1, 1, 1, 112, 112, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 120, 121, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 121, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 121, 1, 1, 1, 1, 1, 1, 1, 1, 1, 125, 122, 124, 119, 1, 123, 1, 1, 113, 1, 1, 1, 1, 116, 1, 126, 1, 1, 1, 1, 1, 1, 118, 1, 107, 1, 108, 1, 12, 127, 105, 1, 111, 1, 1, 1, 1, 1, 106, 114, 1, 12, 12, 12, 117, 115, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 12, 12, 1, 1, 1, 1, 1, 12, 133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 135, 1, 1, 1, 1, 1, 1, 1, 1, 136, 137, 12, 12, 134, 132, 44, 44, 139, 49, 49, 138, 141, 140, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 144, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 142, 0, 0, 0, 0, 1, 0, 143, 131, 1, 0, 1, 1, 12, 12, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 147, 146, 20, 1, 1, 12, 12, 1, 20, 12, 12, 1, 1, 1, 1, 1, 133, 1, 1, 151, 1, 1, 1, 1, 152, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 1, 135, 1, 1, 151, 1, 1, 1, 1, 152, 1, 1, 133, 1, 1, 1, 151, 1, 1, 1, 1, 152, 1, 1, 133, 1, 1, 1, 1, 1, 1, 1, 1, 133, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 159, 1, 1, 1, 151, 1, 1, 1, 1, 1, 152, 1, 1, 159, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 133, 1, 1, 1, 1, 151, 1, 1, 1, 1, 152, 1, 1, 1, 133, 1, 1, 151, 1, 1, 1, 1, 163, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 166, 1, 1, 159, 1, 1, 1, 1, 1, 151, 1, 1, 1, 1, 1, 152, 1, 1, 159, 1, 1, 1, 1, 1, 151, 1, 1, 1, 1, 1, 152, 1, 153, 157, 157, 12, 1, 12, 165, 1, 1, 1, 1, 1, 157, 157, 157, 153, 1, 1, 1, 156, 157, 160, 164, 1, 1, 1, 1, 156, 156, 1, 1, 155, 153, 153, 156, 169, 155, 169, 1, 1, 167, 1, 155, 154, 156, 1, 1, 1, 1, 156, 1, 158, 1, 1, 1, 12, 1, 161, 1, 161, 1, 1, 1, 161, 160, 162, 168, 155, 153, 1, 1, 1, 1, 1, 1, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 171, 172, 171, 172, 171, 171, 171, 171, 173, 173, 171, 172, 171, 172, 171, 171, 12, 1, 12, 12, 12, 12, 1, 12, 12, 12, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 195, 1, 1, 1, 1, 12, 201, 202, 203, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 150, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 198, 1, 1, 1, 185, 1, 1, 1, 1, 209, 1, 1, 206, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 176, 192, 1, 1, 1, 188, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 183, 1, 1, 1, 1, 1, 1, 1, 193, 1, 1, 1, 1, 197, 1, 1, 1, 1, 170, 1, 1, 191, 1, 1, 1, 194, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 181, 1, 12, 1, 1, 12, 1, 1, 1, 1, 184, 1, 1, 1, 190, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 210, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 196, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 175, 12, 1, 1, 1, 178, 12, 1, 1, 1, 1, 1, 1, 1, 200, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 177, 1, 1, 1, 1, 1, 1, 1, 205, 1, 1, 1, 182, 1, 1, 1, 189, 1, 12, 1, 186, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 193, 1, 1, 1, 1, 180, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 174, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 187, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 207, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 208, 1, 1, 12, 1, 1, 1, 1, 179, 1, 1, 1, 187, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 199, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 204, 1, 1, 12, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 220, 0, 0, 0, 0, 0, 221, 0, 0, 0, 0, 0, 0, 1, 12, 1, 1, 1, 225, 1, 1, 1, 0, 226, 223, 224, 1, 1, 1, 1, 1, 1, 231, 1, 233, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 229, 1, 1, 1, 1, 1, 235, 1, 1, 12, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 234, 1, 1, 1, 12, 1, 1, 1, 1, 230, 1, 1, 1, 228, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 232, 1, 1, 1, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 241, 13, 1, 1, 1, 12, 12, 238, 239, 1, 1, 1, 1, 240, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 242, 1, 1, 12, 16, 1, 1, 1, 1, 1, 1, 243, 1, 1, 1, 12, 12, 1, 1, 1, 1, 1, 1, 243, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 252, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 256, 256, 1, 0, 0, 0, 0, 0, 1, 12, 0, 0, 0, 0, 0, 0, 0, 0, 171, 261, 262, 1, 12, 1, 1, 1, 1, 12, 264, 1, 1, 263, 1, 1, 266, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 270, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 12, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 12, 0, 281, 0, 0, 282, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 59, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 306, 0, 0, 0, 0, 0, 0, 0, 0, 0, 308, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 324, 324, 325, 324, 0, 187, 1, 1, 13, 320, 1, 318, 0, 0, 0, 0, 0, 0, 0, 321, 1, 1, 326, 1, 206, 1, 1, 1, 1, 319, 1, 316, 1, 322, 1, 314, 1, 323, 1, 315, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 12, 317, 317, 1, 1, 1, 185, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 12, 1, 1, 1, 1, 313, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 329, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 266, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 369, 369, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 361, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 337, 348, 1, 1, 336, 371, 1, 342, 1, 1, 334, 366, 1, 1, 352, 333, 338, 1, 1, 1, 345, 376, 354, 1, 1, 1, 1, 1, 1, 355, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 364, 368, 0, 0, 78, 1, 1, 0, 362, 339, 375, 340, 343, 350, 1, 365, 0, 1, 0, 78, 359, 357, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 378, 1, 1, 349, 1, 78, 1, 0, 1, 1, 1, 381, 1, 0, 0, 78, 356, 0, 1, 335, 1, 1, 1, 0, 1, 1, 358, 1, 0, 1, 1, 1, 0, 1, 383, 346, 1, 1, 0, 1, 0, 0, 374, 0, 1, 1, 1, 78, 367, 1, 1, 363, 360, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 341, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 373, 0, 78, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 377, 1, 1, 1, 0, 0, 380, 0, 0, 0, 1, 353, 1, 0, 78, 379, 1, 0, 0, 0, 0, 382, 1, 1, 0, 0, 1, 0, 1, 0, 351, 0, 347, 0, 1, 1, 1, 0, 1, 1, 0, 370, 344, 372, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 12, 1, 1, 1, 12, 398, 398, 1, 1, 12, 12, 1, 398, 1, 1, 12, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 410, 1, 1, 0, 1, 1, 1, 1, 206, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 428, 428, 1, 1, 0, 0, 314, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 441, 1, 440, 1, 1, 1, 1, 1, 1, 1, 1, 1, 445, 1, 12, 12, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 453, 1, 1, 1, 455, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 452, 1, 447, 1, 1, 1, 1, 434, 1, 1, 1, 1, 1, 1, 1, 1, 448, 12, 1, 1, 1, 1, 454, 1, 1, 1, 449, 443, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 314, 1, 431, 1, 1, 12, 451, 1, 1, 314, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 436, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 454, 1, 1, 1, 1, 314, 1, 450, 1, 1, 1, 444, 438, 1, 1, 1, 1, 1, 439, 1, 456, 442, 1, 1, 1, 1, 1, 437, 1, 1, 1, 1, 1, 1, 1, 1, 1, 432, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 446, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 435, 1, 1, 1, 1, 1, 433, 1, 220, 457, 1, 1, 1, 1, 1, 12, 1, 1, 1, 1, 12, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 463, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 12, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 467, 467, 467, 467, 467, 467, 467, 0, 467, 467, 467, 467, 467, 1, 467, 467, 467, 0, 467, 467, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 472, 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 476, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 469, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 470, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 478, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 475, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 479, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 473, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 468, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 467, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 477, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 489, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 200, 200, 1, 493, 1, 1, 1, 492, 1, 1, 1, 1, 488, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 490, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 494, 1, 1, 491, 1, 1, 1, 1, 1, 1, 1, 1, 369, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 495, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 12, 1, 508, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 12, 12, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 59, 1, 1, 12, 12, 12, 12, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 527, 1, 1, 1, 1, 1, 1, 1, 528, 1, 1, 1, 1, 1, 1, 1, 526, 1, 1, 12, 1, 1, 530, 239, 1, 1, 12, 12, 1, 1, 12, 1, 12, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 534, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 540, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 131, 1, 12, 545, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 106, 1, 1, 12, 1, 1, 1, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 550, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 143, 1, 1, 1, 228, 1, 1, 12, 30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 575, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 220, 1, 325, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 580, 1, 1, 1, 1, 0, 582, 0, 78, 0, 581, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 12, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 589, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 584, 584, 0, 588, 586, 584, 584, 584, 584, 584, 590, 584, 584, 594, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 591, 588, 584, 584, 588, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 584, 586, 584, 584, 584, 584, 584, 592, 584, 584, 584, 584, 584, 584, 0, 0, 0, 1, 593, 1, 1, 1, 1, 587, 1, 1, 1, 1, 1, 585, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 598, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 12, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 12, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 12, 1, 1, 12, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 64, 278, 304, 409, 536, 0, 4, 67, 236, 254, 280, 305, 331, 385, 411, 0, 500, 520, 537, 600, 9, 0, 60, 87, 395, 407, 427, 578, 0, 498, 519, 533, 615, 0, 30, 6, 0, 462, 501, 605, 563, 69, 0, 7, 283, 255, 386, 464, 414, 539, 78, 601, 0, 579, 307, 416, 466, 9, 104, 286, 507, 6, 30, 0, 309, 78, 388, 78, 484, 10, 6, 130, 248, 273, 0, 616, 510, 0, 566, 0, 63, 6, 6, 251, 94, 2, 430, 396, 408, 599, 0, 6, 0, 6, 284, 102, 6, 564, 502, 541, 0, 465, 387, 271, 285, 8, 70, 103, 602, 544, 389, 310, 298, 417, 145, 73, 288, 548, 511, 604, 567, 332, 327, 480, 6, 74, 148, 11, 0, 249, 523, 549, 568, 515, 553, 573, 614, 36, 6, 260, 293, 330, 302, 218, 30, 529, 556, 218, 41, 216, 265, 294, 303, 404, 421, 482, 272, 0, 72, 565, 0, 401, 415, 297, 78, 247, 78, 0, 583, 547, 505, 290, 419, 78, 390, 384, 0, 0, 0, 9, 558, 574, 217, 0, 422, 405, 532, 517, 576, 618, 84, 218, 42, 295, 393, 423, 572, 0, 512, 291, 274, 78, 215, 79, 28, 387, 30, 6, 391, 328, 301, 607, 595, 525, 552, 514, 0, 258, 80, 30, 403, 420, 0, 30, 424, 0, 219, 596, 518, 9, 406, 425, 218, 248, 85, 222, 597, 577, 560, 483, 426, 394, 250, 227, 86, 58, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 623, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 81, 0, 128, 0, 0, 83, 551, 0, 0, 0, 0, 0, 0, 0, 27, 0, 554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 504, 0, 257, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 292, 0, 0, 0, 0, 0, 0, 0, 620, 0, 0, 0, 0, 0, 619, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 392, 0, 0, 0, 485, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 0, 0, 0, 0, 0, 0, 496, 0, 0, 0, 0, 0, 0, 402, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 211, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 516, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 497, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 279, 0, 0, 0, 0, 0, 531, 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, 0, 0, 0, 312, 0, 0, 0, 0, 0, 0, 253, 0, 0, 0, 0, 0, 0, 23, 0, 0, 0, 0, 571, 0, 0, 0, 0, 603, 522, 0, 0, 0, 0, 244, 0, 0, 0, 0, 0, 0, 460, 0, 0, 481, 0, 0, 0, 0, 0, 61, 0, 0, 0, 267, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 246, 0, 0, 0, 0, 0, 277, 613, 0, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 149, 0, 276, 0, 0, 0, 0, 0, 0, 570, 0, 0, 0, 0, 0, 0, 524, 0, 0, 0, 0, 0, 0, 0, 0, 0, 569, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 213, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 503, 0, 0, 0, 0, 0, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 82, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 487, 0, 486, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 259, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 459, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 287, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 538, 0, 0, 0, 0, 0, 0, 0, 0, 296, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 68, 237, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 0, 609, 0, 0, 555, 0, 0, 0, 0, 0, 0, 0, 0, 0, 245, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 612, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 521, 0, 0, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 499, 0, 617, 0, 0, 429, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 400, 0, 0, 0, 546, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 31, 0, 0, 0, 0, 0, 0, 29, 91, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 289, 0, 0, 0, 214, 0, 0, 0, 0, 0, 0, 561, 0, 0, 0, 0, 129, 0, 0, 0, 0, 0, 562, 0, 0, 0, 0, 0, 0, 0, 412, 418, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 397, 0, 311, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 299, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, 0, 413, 0, 0, 399, 0, 0, 0, 0, 0, 0, 606, 0, 0, 0, 542, 0, 0, 89, 0, 543, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 509, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 268, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 611, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 621, 0, 0, 0, 0, 0, 559, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 300, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 608, 0, 0, 212, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 626, 626, 626, 626, 626, 626, 625, 627]);
1783
- var labelText = "orgmilcomschnetedugovdrrformsfeedbackofficialaccoorgmilschnetgovmagazinemediaunioncargopilotgroupcaarespressworksaerodromeworkinggroupair-traffic-controlaircraftaccident-preventioneducatormarketplaceambulanceinsurancecateringairportrepbodyenginesoftwaremodellingair-surveillanceconsultingchartertrainermaintenanceservicesdesignflightskydivingfreightassociationstudentgroundhandlingdgcafuelclubtaxicrewshowballooningexpresstraderbrokerauthoragentsairtrafficjournalistsafetyconsultantmicrolightaccident-investigationparachutingequipmentproductionfederationrecreationscientistnavigationengineertradingglidingleasingresearchpassenger-associationentertainmentparaglidinghangglidingaerobaticrotorcraftemergencycertificationgovernmentaeroclubexchangelogisticschampionshiphomebuiltcouncilconferencecontrolairlinecivilaviationjournalorgcomnetedugovcoorgcomnomnetobjofforgcomnetuwukiloappsframerorgmilcomnetedugovcoradioorgcomnetcommuneedogpbcoitgvorgedugov*spreviewfrontendrelayononstagingupid*mtls*privatelinktypedreamdeveloperbravemochawindsurfaivenmirenupsunwnextbegetngrokclerkwale2bwebcsbrunputerflutterflowspawnbaseshiptodaymagicpatternsnetlifyondigitaloceanrailwayhostedclaudehasurabotdashvercelgithubluyanigadgetreplitcloudflaretelebitedgecomputeevervaultexponyatnoopencrpplxzeaburwasmerframerzeropsrocketpreviewconvexmedusajsspritesonherculeseasypanelstreamlitsnowflakemesserliloginlinehackclubcodepennorthflankbase44corespeedleapcellngrok-freeclerkstagelovableon-fleek*us-west-3ap-south-2us-central-2us-central-1eu-central-1ap-south-1us-west-2us-east-2eu-north-1ap-north-1us-west-1us-east-1*rcloudintsegorgmilcomgobbetnetintedugovturmusicasenasamutualcoopip6uriurnin-addre164homeirisgovdixdaemoncloudnssthwien*inexexkunden4accogvormymyspreadshop4lima2ixortsinfofuturecmsfuturehosting12hpprivfuturemailinglima-cityfunkfeuer123webseitednshomemelmyspreadshopcloudletswasantqldvicactnswtascatholicwasaqldvictasidwasantozqldorgcomvicasnactnetedugovnswtasconfcomairflowlambda-urltransfer-webappairflowtransfer-webapptransfer-webapptransfer-webapp-fipstransfer-webappeu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1privatenotebookstudiolabelingnotebookstudionotebooknotebook-fipslabelingnotebookstudionotebook-fipsnotebookstudio-fipsnotebook-fipsnotebookstudionotebook-fipsnotebookstudioeu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2experimentsus-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1onrepostsagemakercopporgmilcompronetintedugovbiznameinfoshoprsorgmilcomnetedugovbrendlyresolvenzauscotvstoreorgcomnetedugovbizinfoidacaicoittvorgmilcomschnetedugovinfocloudezproxyacmymyspreadshopkuleuvenwebhostingtransurl123websitecloudnsinterhostsolutionsddns5476103298edgfacbmlonihkjutwvqpsryxzbarsycoororgcomedumyftpno-iporxcloud-ipfor-somemmafanfor-morewebhopselfipjozidyndnscloudnsdscloudfor-thefor-betteractivetrailcoeconorestooteorgcomeconeteduassurmoneyafricaarchitectesrestaurantloisirstourismavocatsinfoagrounivcoorgcomnetedugoviatvdeportesaludtksatorgmilcomwebgobnetinteducienciaboliviarevistacooperativaempresanombreindustriamusicapatriamedicinademocraciapoliticapuebloindigenaplurinacionalarteblogwikiinfoagrotransportenoticiasprofesionalacademiaeconomiaecologiamovimientotecnologianaturalsimplesitecepesebamapadfmgalampbacscpirngorotomtrjspaprrprrsesmscepesebamapadfmgalampbacscpirngorotomtrjspaprrprrsesms*biaamfmtcmptvfeirasampajampanatalbelemananiradiog12medindfndbmdtrdthepoaggfjdfdefinfenflegsegongengcngorgzlgslglogppgmillelqslcimcomnomadmjabimbbibbsbabcrectecsjcetcpscpvhudieticriapipsiecnbiorioecogeoteoodoproatoartfstmatvetdetbetnetcntnotfotgrueduajuespappreptmpemparqsrvadvdevgovntrturagrjorfarjusmusdesvixxyzcozfozslzbhzmaringasantamariacampinagrandegoianiasorocabafloripasaobernardocuritibaboavistarecifeaparecidasaogoncasalvadorcuiabamorenamacapalondrinacontagemsocialfortalmaceioleilaoosascoriobranconiteroi9guacutcheblogflogvlogwikitaxicoopmanauspalmascaxiasjoinvillebaruericampinassantoandreribeiraoriopretoweorgcomnetedugovv0windsurfshiptodaycloudsitecoaccoorgnetgovofmilcomgovmediatechzacoorgcomnetedugsjgovmydnspenfnlabnbmbgcbcqconcontnuyksknsmyspreadshopno-ipawdevboxbarsyonidatemfuinabusavinstanceseceuguukussryzespawncsxcloud-ipmyphotosfantasyleaguetwmailcleverappsscrappingccwucloudnsftpaccessgame-serverccgovobjectsrmalpgcust*svcalp1aeappenginermalpgmyspreadshop4lima2ixsquare7cloudscale123websitefirenet12hpflowgotdnslinkyard-cloudcloudnslima-citydnskingobjectstorageedaccogoorusorgcomnetintedua\xE9roportxn--aroport-byaassogouvcomilgobgovcloudnses-1eu-west-1us-east-1euvipit1eurarubait1s3lbwebsites3websiteru-spbru-mskelasticcsrunstnukukcaukusnl-ams-1fr-par-1fr-par-2functionsnodess3ddlwhmrdbfnck8sifrs3-websitecockpitscblmgdbdtwhkafkpubprivs3ddlwhmrdbk8sifrs3-websitecockpitscblmgdbdtwhkafks3ddlrdbk8sifrs3-websitecockpitscblmgdbdtwhkafkk8sscalebookpl-wawfr-parnl-amsbaremetalsmartlabelinginstancesdechk2kuleuvenlaravelvoorloperurownoxazapscwhstgrvaporonline-serverobservablehqelementorantagonistreclaimjoteluluencowaydiademjelasticmatlabmagentositetrendhostingaxarnetperspectajenv-arubajelejoteravendbemergenttrafficplexconvexkeliwebserveboltbegetcdnstaticson-rancherprimetelonstackitunison-servicesdnshomelinkyardbarsyjelecloudnscocomnetgovmycn-northwest-1cn-north-1s3s3-accesspoints3-websites3s3-accesspointrdsdualstacks3-deprecatedemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspoints3s3-accesspointrdsdualstackemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicn-northwest-1cn-north-1cn-northwest-1ebcomputeelbcn-north-1airflowcn-northwest-1cn-north-1oncn-northwest-1cn-north-1amazonawssagemakeramazonwebservicesdirectasgdsdhehahljlnmhbacscahqhshhihnlnynsnmofjbjzjxjtjhkcqtwgsjssxnxjxgxxzgz\u7DB2\u7D61\u7F51\u7EDC\u516C\u53F8orgmilcomnetedugovxn--55qx5dcanva-appsxn--io0a7iquickconnectcanvasitekhsjxn--od0algcanva-codemyqnapcloudsrvrlessclustersrealtimestorageleadpagescarrdcrdorgmilcomnomnetedugovhidnssupabaserdpareplmypiumsoxmitotaplpagesfirewalledreplitowodevwebview-assetsvfswebview-assetss3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9eu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1s3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackanalytics-gatewayemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackemrappui-prods3-websiteemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspointdualstacks3-deprecateds3-websites3-object-lambdaexecute-apis3s3-accesspoints3-websites3-accesspoint-fipss3-fipss3s3-accesspointdualstackemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstackemrappui-prods3-websites3-accesspoint-fipss3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apis3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9vfss3s3-accesspointdualstackemrappui-prods3-websiteaws-cloud9emrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9eu-west-3ap-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1us-northeast-1ap-southeast-1me-south-1af-south-1ap-south-1ap-southeast-7us-west-2eu-west-2ap-east-2us-east-2ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ap-southeast-6ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1mrapaccesspoints3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3s3-accesspointdualstacks3-deprecatedanalytics-gatewayemrappui-prods3-websites3-accesspoint-fipsaws-cloud9s3-fipsemrstudio-prods3-object-lambdaemrnotebooks-prodexecute-apicloud9s3eu-west-3ap-south-2eu-south-2computes3-ap-northeast-2elbrdss3-ap-east-1s3-sa-east-1s3-us-gov-west-1s3-eu-central-1s3-ca-central-1eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3s3-website-us-west-2s3-website-eu-west-1s3-external-1eu-central-1me-central-1ca-central-1il-central-1s3-us-west-1s3-eu-west-1s3-website-sa-east-1s3-website-ap-southeast-2ap-northeast-1ap-southeast-1s3-us-west-2s3-eu-west-2me-south-1af-south-1eu-south-1ap-south-1us-west-2eu-west-2us-east-2s3-website-ap-southeast-1s3-1s3-globals3-ap-northeast-3eu-north-1airflowap-southeast-2s3-us-gov-east-1s3-fips-us-gov-east-1s3-me-south-1s3-ap-south-1ap-northeast-2s3-website-us-west-1ap-southeast-5s3-eu-north-1s3-ap-southeast-1s3-website-us-gov-west-1compute-1s3-eu-west-3us-gov-west-1s3-website-ap-northeast-1us-gov-east-1s3-fips-us-gov-west-1s3-website-us-east-1s3-ap-southeast-2ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1s3-us-east-2s3-ap-northeast-1authauthauth-fipsauth-fipseu-west-3ap-south-2eu-south-2eu-central-2ap-southeast-3ap-southeast-4ap-northeast-3eu-central-1mx-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1ca-west-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1rframeservicesbuilderstg-builderdev-builder*ociocpocsazuregcpawsdemoinstanceeu-west-3eu-south-2ap-southeast-3ap-northeast-3eu-central-1me-central-1ca-central-1il-central-1ap-northeast-1ap-southeast-1me-south-1af-south-1eu-south-1ap-south-1ap-southeast-7us-west-2eu-west-2us-east-2eu-north-1ap-southeast-2ap-northeast-2ap-southeast-5us-gov-west-1us-gov-east-1us-west-1eu-west-1us-east-1ap-east-1sa-east-1previeweu-4us-4us-1eu-1us-2eu-2us-3eu-3appscomputepaasrag-cloudrag-cloud-chjcloudjcloud-ver-jpcdemonodebalancermembersipeuxvsoncillaocelotonzayalilynxsphinxfentigercustomercaracalo365cloudstaticxendevapp001testcode-builder-stgplatformmediasiteprojedrydpagesjsx0desazacncoitrueu4uhkukgrbrushatenadiarymyspreadshopfrom-flfrom-wvwebspace-hosttheworkpchatenablogcursorusercontentservesarcasmapplinzisakuratanwixsiteappchizigiizeis-into-carsdnsiskinkyadobeaemcloudis-a-therapistpgfogmyvncdojinis-an-actress1kappfldrvkozowqa2jpnmexprgmrfirewall-gatewaydynnscafjsfbsbxooguyfrom-gawoltlab-demois-a-anarchistwiardwebteaches-yogadattowebtb-hostinglive-websiteservegamegotpantheonfrom-nhsubsc-payfrom-ohvipsinaappfrom-cadyndns-officehomelinuxfrom-mahercules-appservebbsstreakusercontentfrom-okfrom-wyfastly-terrariumis-a-llamaqualyhqportalserveexchangeon-vaporvivenushopciscofreakgrayjayleaguesmetaaiusercontentfrom-iais-a-libertariansaves-the-whalestaveusercontentyolasiteoperaunitepoint2thisis-a-catererclaudeusercontentlinodeusercontentfrom-vagithubusercontentsells-for-lesshosteurcanva-appsplaystation-cloudddnsfreefrom-pafrom-prfrom-waddnskingoutsystemscloudhotelwithflightmydattois-a-nascarfanmydbserverminiserverdamnserverservehumouris-a-playerfrom-nvfrom-nmemergentagentgentappsamplifyappfrom-kyis-an-accountantnfshostserveircfrom-akpythonanywherestackhero-networkpostman-echolikescandydyndns-mailobservableusercontentserveftpfreeboxosfrom-utcdn77-storageamazonawsneat-urldyndns-serverlinodeis-a-teacherfrom-vtgleezemythic-beastsus1-pleniteu1-plenitla1-plenitpaywhirlservecounterstrikejdevcloudhealth-carereformis-into-animegoogleapisis-a-painterafricaisa-hockeynutatmetais-an-actora2hostedis-a-democratdatadetectest-le-patrondigitaloceanspacesis-a-designeris-a-hunterlinodeobjectstemp-dnsissmarterthanyoufrom-arsimplesiteevennodetownnews-stagingis-a-liberalgooglecodejelasticservemp3qualyhqpartnerdyndns-free1cooldnsest-a-la-masiondrayddnsdynuddnsfrom-orfrom-miis-a-bloggerfrom-himydobisscanvacodeis-an-engineerest-a-la-maisonupsunappdevinappswafflecellmyasustorwpenginepoweredfrom-ctservep2psame-appmyshopblocksthingdustdatalikes-piediscordsezis-with-thebandlpusercontentis-leetshopitsite3utilitiesis-a-personaltrainersinaappladeskis-a-cheflogoipselfipbase44-sandboxnospamproxyalibabacloudcsmesswithdnsauthgearappsiamallamawithgooglelutrausercontentmochausercontentframercanvasmytabitdyndns-homew-credentialless-staticblitzcpserverdiscordsaysis-a-nurseappspotatlassian-isolated-3premotewdfrom-mtwixstudiocode0emm180rmyactivedirectoryawsappsmytuleapdnsabrpolyspaceqbuserrenderbuiltwithdarkboutirgotdnsabrdnsdopaascanva-hosted-embedawsglobalacceleratorhomesecuritypcmyiphostditchyouripclever-clouddyndns-ipon-aptibleis-a-musicianhosted-by-filessecuritytacticsappspaceusercontenthomeunixstrapiappsame-previewcf-ipfsmycloudnaselasticbeanstalkis-certifieddontexistkasserverik-serverdrive-platformatlassian-3pfirebaseappherokuappawsapprunnerbarsycenteris-a-cubicle-slaveservehttpmyshopifyis-a-guruquicksytessiiitesorsitesmagicpatternsappis-a-cpameteorappfrom-wiis-a-rockstarbumbleshrimpdattolocaldatabricksappsreadthedocs-hostedfrom-rifamilydsdyndns-picsplesknsbplaceddnsaliasdynaliasdyndns-remotedoomdnsip-ddnsblogdnsis-a-doctorroutingthecloudamazoncognitobarsyonlinedsmynasddnsgurucloudflare-ipfsdeus-canvasfrom-idsmushcdnpagespeedmobilizerdyndns-at-homeunusualpersonhosted-by-previderis-a-republicandyn-o-saurstreamlitappworkisboringonthewificprapidqualifioappis-uberleetis-slickgetmyipwpdevcloudtypeformdyndns-at-workgentlentapismynascloudw-corp-staticblitzfrom-ingeekgalaxyservebeerfrom-mdonrenderspace-to-rentaivencloudappspacehostedwafaicloudcodespotblogspotatlassian-3p-us-gov-modfrom-ndfrom-msis-a-techieis-a-studentcustomer-ociis-a-photographerdurumisfrom-ksmassivegriddyndns-wikiis-an-entertaineris-a-hard-workermysecuritycamerafrom-mnrackmazedyndns-blogis-a-bulls-fanwritesthisblogfreemyipsimple-urlfrom-sdreservdauthgear-stagingest-mon-blogueuris-into-gamesrice-labsxtooldevicesakurawebis-an-anarchistoraclecloudappsdyndns-worksells-for-urhcloudfrom-dcfastvps-serverwpmucdnis-a-geekscrysecfrom-txis-into-cartoonsmodelscapetrycloudflarelocaltonetstreak-linkbalena-devicesfrom-njforgeblocksfreebox-oswebadorsitefrom-ncdoesntexisthobby-sitestreaklinkshomesecuritymacownprovidertuleap-partnersdattorelaywphostedmailservequakeis-a-socialistservehalflifepivohostingdynuhostingquipelementsw-staticblitzdyndns-webfrom-deproject-studyaliases121is-not-certifiedhercules-devis-a-financialadvisorservepicsis-a-greenloseyouripfrom-ilwithyoutubemwcloudnonprodwiredbladehostingdnsdojofrom-tnpixolinomyqnapcloudis-an-artisthostedpiis-a-landscaperauiusercontentoaiusercontenton-forgeis-a-conservativedreamhostersnet-freaksapps-1and1is-goneencoreapifastly-edgefrom-nesalesforcefrom-scdeployagentoraclegovcloudappsfrom-alis-a-lawyercechirevultrobjectsstufftoreadisa-geekddnsgeeklovableprojecttry-snowplowfrom-moblogsyteis-a-bookkeepernogmyforumravendbmyboxdeelementoredsaacficogoorinforgcomgobnatneteduidstoreorgcomnetintedudevnomepublorgcomneteduathgovtestscalculatorspaynowinfoquizzesresearchedcloudnsfunnelsassessmentsjscaleforcetmacltdorgmilcompronetgovbizpresseklogesrsccloudcustomfltusrcloude4corealmgovmunicontentproxy9metacentrumdyndyndyndnsdynpagespages-researchitionoccustomercomymyspreadshopipv64diskussionsbereich4limacomrub2ixfirewall-gatewayddnssspdnsbarsykeymachinesquare7myhome-serverspeedpartnercommunity-proschuldockxenonconnectg\xFCnstigliefernbwcloud-os-instancedyndnssecmy-routerxn--gnstigliefern-wobin-butterl-o-g-i-nisteingeekin-dslin-berlinin-brbfuettertdasnetzleitungsenin-vpnlcube-serverdyn-ip24logoipdyn-berlinruhr-uni-bochum12hpgoipsrvdnsfruskygit-repossvn-reposinternet-dnsg\xFCnstigbestellenhome-webserverxn--gnstigbestellen-zvbbplacedheimdnscosidnswebspaceconfiglima-citydyndns1istmeinvirtualuserschulplattformmy-gatewayddnsseclebtimnetztest-iservmein-iservvirtual-userhome64iservschuletaifun-dnstraeumtgeradeschulserverdynamisches-dns123webseitednshomehs-heilbronndnsupdaterbssgraphicdwadpdwdaepeweaawapaafpfwfabwbpbacwcpcciwebuserapiobjectsidsiskospockkimodorikerbonesteamsparisjanewaypicardglobaltarpitreedpikekiraworfsulukirkarchertuckerhackercanarywesleystagingprereleaset3r2lpbravepanelngrokiservstglclcrmerpflypagesbarsyvivenushoplocalcertlocalplayerbearbloggatewaydeno-stagingis-not-ais-a-goodbotdashvercelmocha-sandboxplatter-appreplitgithubpreviewworkersinbrowserevervaultis-ahrsndenoxmitmodxmyaddrstorageapipayloadgrebedocruncontainersstgstagelclstageloginlineis-a-fullstackcodepenleapcellngrok-freeis-coolstoragewebharemediatechlibp2pdiscourseimaginecomyspreadshopstoreregbiz123hjemmesidefirmcoorgcomnetedugovsldorgmilcomwebgobartnetedugovtmorgpolcomsocartnetedugovassoagrondiscoodontk12medcuegyecpaabgengorgmilgalsaltulcomadmesmgobpubdocmonfindgnriouioproartlatvetnetfotedulojgovntrturibrbarxxxofficialbasechefprofmktgpsictechinfoarqtcontdentrrpppsiqgit-pagesritmedfieorgcomlibprieduaipgovriikmeactvsportorgmilcomscieunnetedugovnameinfopintouchtawktotawkmyspreadshoporgcomnomgobedu123miwebcomputeorgcomnetedugovbiznameinfocognito-idpeusc-de-east-1onjelasticnxaspdnsbarsydirectwpdeuxfleurstransurldogadoprvwcloudnsamazonwebservicesdnshomeuserpartycokoobinmkmfidymyspreadshopalandkapsiikixn--hkkinen-5wacloudplatformh\xE4kkinen123kotisivuidacorgmilcompronetedugovbiznameinforadioorgcomneteduuserexperts-comptablestmmyspreadshopgretaprdcomnomynhccifbxoshuissier-justicenotairesaeroportfreeboxoson-webavocatassoportgouvkdnschirurgiens-dentistes-en-franceavouesfbx-os123sitewebveterinairechirurgiens-dentistespharmacienchambagrimedecinfreebox-osdediboxgoupilemszicpyicpvicppleysheezypagesedugovcnpyorgcomcybllcpvtnetedugovtnxonlineschooldaemond6atcopanelorgnetplybotdashstackitkaasorgmilcomnetedugovbizmodltdorgcomedugovcoorgcomneteduappwriteacorgcomnetedugovcloudtranslateusercontentorgcomnetedumobiassoorgcomnetedugovbarsysimplesitediscourseindorgmilcomgobneteduorgcomwebnetedugovguaminfonxhra\u6559\u80B2\u654E\u80B2\u7DB2\u7D61\u7F51\u7D61\u7EC4\u7E54\u7D44\u7E54\u7F51\u7EDC\u7DB2\u7EDC\u7EC4\u7EC7\u7D44\u7EC7\u516C\u53F8\u653F\u5E9C\u500B\u4EBA\u4E2A\u4EBA\u7B87\u4EBAltdorgcomincneteduidvgovxn--uc0ay4axn--55qx5dxn--mk0axixn--io0a7ixn--uc0atvxn--zf0avxxn--lcvr32dxn--od0algxn--wcvs22dxn--gmqw5axn--od0aq3bxn--mxtq1mxn--ciqpnxn--tn0agxn--gmq050iorgmilcomgobneteduiservwp2tempurlmircloudfreesitewpmudevmyfastgadgetcloudaccessjelehalfboltfastvpsemergenteasypanelopencraftizcombrendlynamefromrtpersoadultmedorgpolrelcomproartnetedufirminfoassoshopcoopgouvtmcomediahotelforumvideosportorgsexagrargameslakaseroticaerotikatozsdereklamcasino2000filmsuliinfoboltshopprivnewsszexcityutazasjogaszkonyveloingatlaneacaicogoormy\u1B29\u1B2E\u1B36milwebschnetkopbizzonedesaponpesxn--9tfkymyspreadshopgovmytabittabitorderravpageaccok12idforgnetgovmuniltdplcaccotttvorgcomnetmeca6g5gpgamubacaicniocoukuptverdruscsdelhiindorgmilcomwebnicfingenpronetintedugovresbizbiharbarsyinternetbusinessschooltravelsupabasealumnigujaratfirminfoaeropostbankcoopindevscloudnsno-ipbarsybarrell-of-knowledgebarrel-of-knowledgensupdategroks-thisdnsupdatefor-ourknowsitalldvrcammittwalddynamic-dnsv-infowebhopselfipdyndnshere-for-moreilovecollegemayfirstforumzcloudnsmittwaldservertypo3servergroks-theeusekd1cdndyndnsidrawsainaueuapjpusstagemocksysdevicesclientcustreservdcustdevdisrecprodtestingcobeebyteutwenteboxfusebravepstmndedynngrokorgmilcomnomnetedugovqcxqzzbarsythingdustmo-siemensrb-hostingfh-muenstergitbookbluebitecloudbeesusercontentnodeartkiloappsforgerockdarklangresinstagingapigeebubbleb-datascryptedhypernodedappnodepantheonsitegitlabgithubkeeneticvirtualservercleverappshostyhostingon-rioedugitticketstelebitwixstudioon-k3sicp0icp12038jeleqotolairbubbleappsmyaddrstolosmyrdbxwebflowdrive-platformbeagleboardhasura-applolipopdefinimavaporcloudmusicianwebflowtestazurecontainerresindevicereadthedocsloginlineeditorxmoonscalesandcatsbasicserverwebthingsbrowsersafetymarkbeebyteappbitbucketidaccovistablogorgschnetgovxn--mgba3a4f16axn--mgba3a4fraarvanedge\u0627\u064A\u0631\u0627\u0646\u0627\u06CC\u0631\u0627\u0646jclaspeziapdudcefegelemeperetevebacanatavaparasabgagfgogrgpgalclblimfmrmcbmbvbfclcmcvcrcpcchlimifibicivipirisimncnbnanenrnpntnnolomobocoaogorosopotoptvtatctbtmtltotpusulunutpspapaqsvpvvvtvavvrtrsrprgrfrcrbrarorkrvstsssbscsmsispzczbzbozen-suedtirolmyspreadshopxn--bulsan-sdtirol-nsbxn--valledaoste-ebbtrentinoaltoadigetrentin-sued-tirolxn--forlcesena-c8axn--forl-cesena-fcbxn--bozen-sdtirol-2obtriestetrentinsuedtiroltrentino-s-tirollecceudineaostesienaparmaluccapaviagenoapaduaaostamonzaabruzzoternirietiturinmilanbozenlaziofermoleccocuneonuoropratola-speziavdataaligfvgpugmolcalcamlomumbsicpmnvenvaoedugovabrsarmaremrbastoslazibxosfirenzetrentinos\xFCdtirolval-d-aostavalle-aostamessinacremonaravennatoscanatrentin-suedtirolbolognacalabriaurbinopesarofriuli-v-giuliaogliastraxn--valle-aoste-ebblaquilaandriatranibarlettasyncloudxn--valle-d-aoste-ehbaostavalleyvalled-aostatrentino-alto-adigevallee-d-aostexn--balsan-sdtirol-nsbpistoiasicilialucaniacataniaiserniaperugiabresciaveneziagorizialiguriaimperiabulsan-suedtirolbalsan-suedtirolbarlettatraniandriaxn--trentino-sdtirol-szbforl\xEC-cesenatuscanyvall\xE9e-d-aostemantovavall\xE9e-aostecasertapiemontevalleaostaval-daostafriulivgiuliatrevisoforli-cesenavall\xE9edaosteferrarapescaravald-aostatrentino-altoadigefriuli-vegiuliavallee-aostecarboniaiglesiastarantomediocampidanovalleedaostetrentinosud-tirolcampobassotrentins\xFCd-tiroltrentinos\xFCd-tirolmonzabrianzatrentino-s\xFCdtirolxn--trentino-sd-tirol-c3bpotenzacosenzavicenzaemiliaromagnavenicefrosinonemarchepordenonetrentinosued-tirolvaresemolisevall\xE9eaostefriuli-veneziagiuliabasilicatalatinaanconasavonaveronamodenabiellabolzano-altoadigepugliafoggiaumbriatrentino-stirolgenovapadovamateranovararagusapiacenzatrentinostirolvalleeaostetempio-olbiasudsardegnatrentinsudtirolmassa-carrarafriuliveneziagiuliatrentinosuedtirolandria-barletta-tranitrapanixn--cesenaforl-i8amaceratacaltanissettaascoli-picenobrindisicarraramassacagliaririmininapolivibo-valentiachietibulsan-sudtirolbalsan-sudtiroltrentino-a-adigebulsanbalsaniglesiascarboniamilanotorinoteramodell-ogliastraarezzotrentinoalto-adigerovigotrentovenetoiglesias-carboniatrentino-sud-tirolaltoadigereggio-emiliareggio-calabriasardegnatranibarlettaandriapiedmontxn--sdtirol-n2amedio-campidanotrentino-s\xFCd-tirolfriuli-vgiuliafriuli-ve-giuliaromeennaromapisa32-b16-b64-blodiastibarineencomonaplesforlicesenailiadboxosalessandriasicilytrani-barletta-andriaxn--trentin-sdtirol-7vbpesarourbinotrentinsued-tirolcesena-forliforl\xECcesenaemilia-romagnamonzaebrianzaxn--trentinsdtirol-nsbtrentinos-tiroltrentins\xFCdtirolvalledaostaolbia-tempiocampidanomediovibovalentiasassarivalle-daostalombardysud-sardegnafriulivegiuliareggioemiliamonzaedellabrianzaalto-adigevercellitrentin-sudtiroltraniandriabarlettatrentino-sudtirolascolipicenobozen-s\xFCdtirolfriulive-giuliaflorencexn--cesena-forl-mcbcarbonia-iglesiasaosta-valleycarrara-massadellogliastratrentinoa-adigexn--valleaoste-e7apesaro-urbinoxn--trentinosdtirol-7vbxn--trentin-sd-tirol-rzbxn--trentinsd-tirol-6vbtrani-andria-barlettatrentin-s\xFCd-tirolxn--trentinosd-tirol-rzbgrossetomonza-e-della-brianzas\xFCdtirolreggiocalabriatrentinoaadigetrentin-s\xFCdtirolverbano-cusio-ossolafriuliv-giuliaverbaniacampaniatrentino-aadigefriulivenezia-giuliasardiniaandriabarlettatranibarletta-trani-andriacatanzarooristanourbino-pesarocesena-forl\xECvalle-d-aostacampidano-medio123homepagesiracusatempioolbiasuedtirollombardiaavellinocesenaforl\xECtrentinofriuli-venezia-giuliabozen-sudtirolandria-trani-barlettabulsan-s\xFCdtirolbalsan-s\xFCdtirolmonza-brianzabolzanotrentino-sued-tirolbellunosalernolivornocrotonesondriodnshometrentinsud-tirolmassacarraratrentin-sud-tiroltrentino-suedtirolviterbobergamocesenaforliolbiatempiopalermobeneventoagrigentoofcoorgnetfmaitvphdengorgmilcomschnetedugovperagrikanieasukehandachitatokaiaisaikonanoharuamaobuhigashiuraowariasahiinuyamatobishimaiwakurashitarainazawatoyonegamagorimihamatoyotataharakariyayatomioguchikomakimiyoshinishiotokonamekiyosuchiryutoyohashiokazakiisshikikasugaikotakiratoeianjotogofusosetohazutsushimashinshirotakahamanisshinshikatsuhekinantoyokawaichinomiyatoyoakeodateogataakitaikawakyowahonjoogayurihonjonoshirokamiokakatagamimitanegojomeyokotekosakadaisenkazunonikahohonjyomoriyoshimisatohappoukamikoanihachirogatahigashinarusesembokufujisatokitaakitaitayanagiowanitakkomutsutsurutahirosakigonoheoirasetowadamisawanohejiaomorishingohiranairokunohehashikamitsugarushichinohehachinohenakadomarisannohekuroishisakaeisumiasahiotakiinzaiabikomatsudoyachiyomutsuzawakujukuriomigawakashiwatoganemihamanaritasakuranagaramobarahanamigawachoshishiroichoseikozakishisuikatorimidorichonankyonanfuttsuonjukufunabashinagareyamanodasosatakochuotohnoshourayasukimitsuyokaichibayotsukaidosodegauratateyamakamagayayokoshibahikariyachimatakatsuuratomisatokisarazukamogawaichikawanarashinoichinomiyashimofusaminamibososhirakoichiharaoamishirasatoikatahonaiainansaijoseiyoiyoozuuwajimaniihamanamikatamasakiuchikokihokutobetoonshikokuchuomatsuyamaimabarikamijimakumakogenyawatahamamatsunosabaeikedaobamasakaifukuiohionotsurugamihamawakasaminamiechizeneiheijikatsuyamatakahamaechizensoedaukihaomutaokawanishiogoribuzenonojosueumiokiotochikugosasagurisaigawamizumakishinyoshitomikurumekurateyamadakasuganakamamiyamanogatatakatahakataiizukakawaratagawakasuyaashiyainatsukimunakataminamitsuikishonaikurogifukuchikeisenhigashimiyakoshinguyukuhashiokagakiyamekogaongausuikahotohochuotoyotsumiyawakadazaifuhisayamatachiaraiyanagawanakagawahirokawachikujochikushinochikuhochikuzennamieotamaokumashowateneiiwakikoorinangoononishigoshimogoomotegomishimafukushimaasakawakagamiishishirakawaiitatefutabahiratayugawahanawakitakatakawamatakunimiyabukibandaihigashihironoyamatomiharuyamatsuriaizubangedatesomaaizuwakamatsuyanaizuaizumisatonishiaizuizumizakikitashiobarataishinkaneyamakoriyamainawashirotanagurafurudonosamegawasukagawaishikawatamakawaikedaogakitaruiginanenahashimahichisonakatsugawaibigawashirakawamizunamiminokamomitakekawauesekigaharatomikasakahogikitagatayamagatatajimianpachimotosuyaotsukakamigaharahidakanisekitokigujominogodoyorogifukasamatsutakayamawanouchihigashishirakawakasaharashimonitatsumagoichiyodakannakanrashowameiwakiryuotaoratomiokafujiokaitakuranaganoharahigashiagatsumatakasakishibukawaminakamikatashinatsukiyonokawabanumataannakaoizumimidorishintoisesakiuenoyoshiokakusatsutakayamanakanojonanmokutamamuratatebayashimaebashiotakekaitadaiwahongofuchukuietajimashobaramiharahatsukaichihigashihiroshimamiyoshikumanokurenakasakaseraseranishiasaminamifukuyamashinichionomichiosakikamijimajinsekikogentakeharaotobenanaeikedatohmaozoraobiraabirakyowaeniwataikibibaisharirebunerimohiroooketootarupippunishiokoppechitosefurubirahakodateshiranukakitahiroshimakushiroobihironanporoiwamizawaniikappukunneppufukushimanakasatsunaitoyourakuromatsunaiakabirakamisunagawashibechaurakawakamifuranonakatombetsuasahikawashimokawakayabeokoppebiratoriabashirisaromaatsumanumatahidakabifukamukawamikasahorokanaitoyotomisarufutsuhigashikawaishikarikitamiyoichiesashiiwanaitomariminamifuranoakkeshifuranotoyakoyakumootoineppushikaoishiraoinemuronayorohaboroashorobihororishirifujiutashinaihokutotakasuebetsuurausuassabukikonaishimamakinaiedatetoyabieinikiesanuryuoumuteshikagarikubetsuashibetsukimobetsuaibetsutobetsusobetsuembetsushimizuchippubetsurishirihokuryuhoronobeshintokutsubetsushibetsuhonbetsumombetsutsukigatakuriyamakoshimizushiriuchikutchanmurorannoboribetsukamishihorowassamushinshinotsukembuchiwakkanaikamoenaikiyosatotakinoueshikabesunagawafukagawanakagawatakikawakamikawahigashikagurahamatonbetsumatsumaemoseushirankoshishakotanimakanemashikeotofuketomakomaisandatambaitamiawajikasaiasagoshisoonoakoyashirotoyookaminamiawajiinagawafukusakitakasagokamigorikasugaharimayokawaashiyahimejiakashitaishiaogakisannantakinosumototakarazukanishinomiyashingugoshikinishiwakiyokatakaaioimikisayoyabukawanishiamagasakisasayamashinonsenkakogawaichikawakamikawatatsunotsukubaiwamaogawaasahisakaitokaioaraiitakobandodaigosuifuinaamikasumigaurakashimaomitamayachiyoshimodatetomobetoridehitachinakainashikisakuragawakasamayawaramoriyahitachiomiyanamegatayamagatahitachikamisuushikutakahagiibarakitonekoganakasowayukimihojosomitoryugasakishimotsumafujishirotsuchiurachikuseihitachiotashirosatotamatsukuriuchiharashikahakuinanaotsubatawajimakahokukawakitatsurugikaganominotosuzuuchinadakomatsuanamizunakanotohakusannonoichikanazawaiwateshiwafudaikawaimoriokaofunatohanamakikuzumakikitakamininohekunoheyamadayahabasumitaichinosekitanohatahiraizumirikuzentakatajobojiotsuchihironomiyakoiwaizumikarumaiichinohenodakujitonooshushizukuishifujisawamizusawakamaishikanegasakimannoutazukotohiraayagawazentsujihigashikagawauchinomikanonjisanukimarugamemitoyotakamatsutadotsunaoshimatonoshoakuneamamiizumihiokiyusuikinkoisasookouyamanakatanekagoshimakanoyaisenkawanabeminamitanemakurazakitarumizunishinoomotematsumotosatsumasendaioimatsudaayaseebinamiurazushinakaiodawaraiseharasagamiharahakoneaikawakaiseiatsugitsukuihadanoyamatoyamakitazamaoisochigasakininomiyayokosukakamakuraminamiashigarafujisawasamukawakiyokawahiratsukayugawaraokawaumajikochitsunootoyoakiinonishitosayasudahidakamiharasakawaniyodogawahigashitsunokagamigeiseisusakiotsukinaharisukumomurototosakamiochitoyotosashimizumotoyamanankokunakamurakitagawayusuharaogunichoyoukiasoutoozugyokutoamakusamifunetakamoriyamagaminamataminamiogunikikuchisumotoyamatonagasumashikiaraokumamotokamiamakusanishiharayatsushiroayabeseikasakyoideineujinakagyokameokakyotangokyotanabekyotambaminamiyamashiroyamashinatanabeyawatawazukaminaminantanmiyazuhigashiyamafukuchiyamakitamukokamojoyokizumaizuruujitawaraoyamazakinagaokakyokumiyamakawagoeinabeshimameiwaasahitaikiudonoisetsukisosakikuwanamihamamiyamasuzukatamakimisuginabarikumanokomonominamiisewataraitobakiwatakikihotadomatsusakayokkaichikameyamaureshinoishinomakishichikashukuohirataiwaosakizaohigashimatsushimashikamaiwanumashibataogawaraonagawakawasakiseminemarumoriminamisanrikukakudamuratawakuyatomiyanatoriwataritagajomisatotomekamirifushiroishimatsushimayamamotoshiogamafurukawahyugaebinotsunosaitoayakushimanobeokakitauramiyazakitakazakigokaseshiibamimatashintomikunitomikitakatakobayashikawaminamitakaharukijotakanabemiyakonojonishimeranichinankitagawakadogawamorotsukakisofukushimaminamimakisakaeobuseikedaogawamiasaokayaasahiotakiotarichinoinaomichikumakomaganechikuhokukaruizawayasuokaooshikaikusakaminamiaikitogakushimatsukawakawakamitateshinatakamorikitaaikishiojirimiyadahakubaiizunaiijimaiiyamamiyotasuzakayasakatoguraookuwanagawaminowahirayayamagataminamiminowafujimiomachisakakitakaginaganonakanosakuhokomoronagisoshinanomachiwadauedaiidaharasuwatomiachiaokianankisosakunozawaonsenagematsutakayamashimosuwamatsumotoyamanouchinakagawamochizukiazuminotatsunoobamaomuraseihiunzenosetofutsuikichijiwanagasakiisahayahasamisaikaikawatanasasebohiradokuchinotsugototogitsutsushimashimabarashinkamigotomatsuurayamazoekashibaikomakawaitenrioyodosangokoryoudaojiikarugayamatokoriyamatenkawakatsuragikurotakikawakamimiyakemitsuetakatorikamikitayamayamatotakadahegurishinjokanmakisakuraitawaramotogoseoudanarasoniandokawanishishimoichihigashiyoshinokashiharashimokitayamanosegawayoshinomintsivorytopazsakuragehirnsumomoaseinetopalmail-boxmokurenyoitamuikaojiyagosensanjoaganomyokoseiroagaomishibataniigatanagaokamurakamiuonumayuzawakariwatagamitainaitsunanminamiuonumatochioyahikojoetsuseiroukamosadoizumozakitokamachiitoigawasekikawakashiwazakitsubamemitsukekokonoesaikiusukibeppuusahimeshimakunisakihasamataketatsukumihitaoitahijikusuyufukujukamitsuebungoonobungotakadaibaraniimibizentsuyamaokayamakasaokahayashimayakagemaniwaakaiwamisakishinjotamanotakahashikibichuowakesojanagishookumenannishiawakurakurashikiasakuchisetouchikagaminosatoshotomigusukunakagusukuyaeseizenaurumaiheyaaguniogiminanjokinminamidaitokitanakagusukuyonaguniokinawaishigakikunigamiurasoekadenataramahiraraginozataketomishimojizamamitonakiitomanhigashimotobuyonabarugushikamionnanahanagohaebarukumejimakitadaitonakijinnishiharayomitanginowantokashikiishikawaikedasuitaminohizuminishisakaikananabenodaitoosakasayamayaokishiwadatadaokakaizukatondabayashichihayaakasakakumatorikadomasayamahigashiosakashijonawatehirakatataishimisakitajirihannansennankatanotoyonominatosettsuhigashiyodogawaibarakinosekitachuohigashisumiyoshifujiiderakashiwaraizumiotsutoyonakamatsubaramoriguchiizumisanoshimamototakatsukineyagawahabikinotakaishikawachinaganoyoshinogarikamiminearitaouchiimarihizenogikashimaariakekiyamafukudomikitagatakitahataomachigenkaikanzakinishiaritakyuragisagataratosutakushiroishikaratsuhamatamakouhokukawagoeyoshidasatteogoseirumaasakaurawaogawaniizaomiyayoriiotakishikihonjooganohannohanyuinasaitamaokegawaarakawayoshikawayokozehasudasayamahidakafukayachichibuiwatsukiryokamiyoshimikamiizumifujimiwarabiranzanmiyoshiminanoyashiosakadosugitomisatohigashichichibutodasokakukiyonokazoshiraokakasukabekounosukawajimatsurugashimamiyashirokitamotohatoyamamoroyamahatogayakumagayakawaguchinagatorokamisatomatsubushinamegawatokigawakamikawafujiminohigashimatsuyamakoshigayatokorozawas3isk01isk02ryuohkoseikonanaishorittotakashimamaibarahikonetorahimenishiazaikokagamokotoyasuotsukusatsunagahamamoriyamatoyosatotakatsukinotogawaomihachimanhigashiomiakagiunnanizumogotsuamayatsukakakinokimatsuehamadamasudahikawahikimiokuizumoyasugiyakumomisatotamayuohdahigashiizumookinoshimanishinoshimatsuwanoshimaneshimadafujiedayoshidashimodagotembaiwataatamikosaiyaizuitoizumishimahaibaramakinoharaomaezakikawanehonkannamisusonohigashiizufukuroinumazukawazufujiaraishizuokahamamatsushimizuizunokunimatsuzakimorimachiminamiizunishiizukikugawakakegawafujikawafujinomiyaujiietsugaoyamayaitaohiranikkoashikagakuroisokanumasakurashioyakarasuyamamotegiichikaikaminokawatochigihagamokanogisanobatonasumibunasushiobaranishikatautsunomiyaiwafunemashikoshimotsukeohtawaratakanezawaitanokomatsushimatokushimaichibaminamiaizumiwajikikainanmiyoshinarutomimamugiananmatsushigesanagochishishikuinakagawamachidachiyodakomaefussainagitaitochofufuchuomeotahigashiyamatotoshimaokutamaaogashimakodairaedogawaarakawahachiojishinagawatachikawashibuyasuginamihinodekiyosesumidaoshimanerimamitakahamuraadachinakanomizuhobunkyomegurominatokoganeihigashikurumekokubunjihigashimurayamamusashimurayamatamakitahinochuokotokatsushikakouzushimaogasawaraakishimakunitachishinjukusetagayamusashinohachijoitabashiakirunohinoharachizunanbukotouramisasawakasayonagokogehinoyazutottorinichinansakaiminatokawaharaoyabetairainamiasahinantoimizufuchutakaokakurobeyamadajohanatoyamatonaminyuzenfunahashinakaniikawanamerikawaunazukitogahimiuozufukumitsutateyamakamiichiiwadearidayuasainamitaijikatsuragiaridagawatanabemihamahidakakainankiminomisatoshingushirahamakamitondayurakozakoyagobokitayamawakayamakudoyamahashimotokushimotokozagawahirogawakinokawanachikatsuurarsuseroeoishidasagaeoguniasahinagaitendonanyoobanazawanishikawasakataohkuratozawamikawamamurogawayamagatafunagatatakahatashonaishinjokahokuiideyuzakawanishitsuruokakaminoyamayamanobeshiratakamurayamanakayamakaneyamahigashineyonezawasakegawamitouubeyuuabushimonosekitabuseoshimatoyotaiwakunihikarishunannagatohagihofukudamatsutokuyamashowadoshitsurunanbukoshukaiminami-alpsnirasakikosugeotsukioshinohokutominobuyamanashifuefukichuokofuichikawamisatoyamanakakonakamichitabayamanishikatsuranarusawafujikawahayakawafujiyoshidafujikawaguchikouenohara\u9577\u91CE\u4EAC\u90FD\u5C90\u961C\u5927\u962A\u4E09\u91CD\u7FA4\u99AC\u5343\u8449\u6ECB\u8CC0\u4F50\u8CC0\u5948\u826Fadednelgaccogogror\u79CB\u7530\u611B\u77E5\u9AD8\u77E5\u57FC\u7389\u6C96\u7E04\u6803\u6728\u718A\u672C\u5CA9\u624B\u9752\u68EE\u5C71\u68A8\u65B0\u6F5F\u5CF6\u6839\u9CE5\u53D6\u9577\u5D0E\u9999\u5DDD\u5BAE\u57CE\u77F3\u5DDD\u5927\u5206\u5BAE\u5D0E\u8328\u57CE\u5C71\u53E3\u5175\u5EAB\u5C71\u5F62\u5FB3\u5CF6\u5E83\u5CF6\u798F\u5CF6\u798F\u5CA1\u5CA1\u5C71\u5BCC\u5C71\u9759\u5CA1\u611B\u5A9B\u798F\u4E95\u6771\u4EACxn--4it168dhatenadiaryxn--vgu402ckawaiishophatenablogcocottenamaste\u5317\u6D77\u9053penneehimeiwateversestabachibashigagonnagunmapermahaccaakitaosakauh-ohblushkochiaichifukuikuroncapooitigohyogotokyokyotopunyuthickcheap0t00g00j0mie2-ddaapyawjg0amfemsubxiiboomoobutchueekpgwrgrherskrboyrdyupperunderflierchipsmydnsheavyangryhippygirlyrulez\u795E\u5948\u5DDD\u9E7F\u5150\u5CF6\u548C\u6B4C\u5C71bambinaxn--nit225kokayamasaitamaxn--k7yn95exn--1lqs03nsapporoparasitelolipopmcxn--efvn9sniigatafukuokatokushimafukushimahiroshimakagoshimafakefurokinawaxn--8pvr4ucoolblogxn--0trq7p7nnkawasakinagasakimiyazakichilloutxn--8ltr62kxn--klty5xpeeweezombiecutegirlxn--rny31hxn--uuwu58axn--ntso0iqx3axn--djrs72d6uytoyamanikitanyantakagawamimozanagoyaboyfriendxn--2m4a15egreaterchowderegoismyamagatafashionstorexn--elqq16hxn--pssu33lsendaimiyagixn--rht27zpecoriaomorisaloonwatsonvivianxn--djty4knobushipigboatnaganopinokoxn--f6qx53asadistvelvetsecretxn--5js045dchicappayamanashiibarakidigickgirlfriendxn--1lqs71dmongolianxn--c3s14mxn--qqqt11mtochigixn--5rtq34kparallelo0o0mondkobesagabonadecaoitanarafoolkilldecimainhiholomosblokilociaoundopupugifutankcrapflopnooroopsmodsholyjeezstripperpepperbittershizuokaxn--rht3dkitakyushureadymadeicurusversusmatrixxn--rht61ehungryfloppygloomycrankyhandcraftedlittlestarxn--klt787dxn--kltx9awhitesnowsunnydaytottorilovepoptheshopbuyshopxn--5rtp49cxn--d5qv7z876cwebaccelxn--kbrq7oxn--4pvxsxn--1ctwolovesickkumamotocatfoodxn--tor131oyokohamawakayamatonkotsuxn--ehqz56nxn--uist22hxn--6btw5axn--kltp7dyamaguchifrenchkisspussycatxn--4it797kxn--uisz3gbabybluexn--zbx025dnetgamersxn--7t0a264ckanagawaxn--6orx2rishikawaxn--ntsq17ghalfmoonschoolbusjellybeanxn--mkru45iusercontentlolitapunkxn--32vp30hsakurastoragehokkaidoshimanecandypopbabymilksupersaleweblikeraindropbackdropwebsozaikikirarahateblodaynightmeneacsccogoormobiinfoaeusxxorgmilcomnetedugovorgcomnetedugovbizinfotmprdorgmilcomnomedugovassnotairespresseassocoopgouvveterinairemedecinpharmaciensorgnetedugovtraorgcomedurepgovmeneperekgacscaiiocogoitoresmshsseoulbusanulsandaeguc01milvkimmvchungnamjeonnamjeonbukeliv-dnsgyeonggijejueliv-cdnincheondaejeongangwongyeongbukgwangjuchungbukgyeongnameliv-apicoeduindorgcomembnetedugovorgmilcomnetedugovjcloudorgcomnetintedugovperbnrinfocooyorgcomnetedugovethipfscanvamypepethw3sstorachakeeneticjoinmcinbrowserdwebcyonnftstoragemyfritzaemewphlxachotelltdorgcomwebsocschngonetintedugrpgovassnomgacsccoorgnetedugovbizinfo123websiteidorgmilcomasnnetedugovconfidmedorgcomplcschnetedugovaccoorgnetgovpresstmassoirseproxaccosoundcasthoptocraftvp4c66orgnetedugovitsmcdirmyboxbarsyedgestacksynologylogintoopencloudnohostwebhopdiskstationi234tcp4hoocgroknoipprivmydsddnsdnsforlohmustransipdscloudfilegear-sgbrasiliafilegearframerbarsybarsyonlinecoprdorgmilcomnomedugovinforgcomnetedugovnameacprorgcomartnetedugovpresseinfoassoinstgouvorgnycedugovbarsydscloudjuorgcomnetedugovminisiteaccoororgcomnetgovorgmilcompronetintedugovbizmuseumnameinfoaerocoopaccoorgcomnetintedugovbizcooporgcomgobneteduorgmilcomnetedugovbiznameaccoorgmilneteduadvgovcoorgcomnetaltgovforgotherhiskeeneticispmanagernomassoprod5476132eastasiacentraluswesteuropewestus2eastus2pnortheurope-01newzealandnorth-01southindia-01southcentralus2-01norwaywest-01eastus2-01westus2-01australiaeast-01italynorth-01israelnorthwest-01swedencentral-01westeurope-01centraluseuap-01taiwannorthwest-01uaecentral-01northcentralusstage-01israelcentral-01mexicocentral-01canadacentral-01austriaeast-01germanywestcentral-01francecentral-01ukwest-01denmarkeast-01polandcentral-01eastus-01westus-01swedensouth-01eastus3-01westus3-01brazilsouth-01centralus-01francesouth-01australiacentral-01westindia-01uaenorth-01jioindiacentral-01canadaeast-01belgiumcentral-01spaincentral-01koreacentral-01chilecentral-01qatarcentral-01westcentralus-01eastus2euap-01norwayeast-01southafricanorth-01brazilsoutheast-01germanynorth-01switzerlandnorth-01switzerlandwest-01japanwest-01southafricawest-01japaneast-01eastasia-01indiasouthcentral-01taiwannorth-01centralindia-01uksouth-01southcentralus-01northcentralus-01eastasiastage-01indonesiacentral-01australiacentral2-01australiasoutheast-01malaysiawest-01koreasouth-01southeastasia-01southeastus5-01northeastus5-01jioindiawest-01rucdnwest1-usfra1-desandboxjls-sto1jls-sto3jls-sto2aglobalabglobalsslmapprodfreetlsmapvpslon-1lon-2ny-1fr-1sg-1ny-2paassnwebpaashostingjelasticnordeste-idcsocuserpagescwebfileblobservicebuscoreatlricnjsjelasticwebsitestoragesezagbinruhuukjptsmyspreadshopmynetnameakamaiorigin-stagingfrom-coipv64dynv6cdn77serveblogadobeaemcloudhicamsprytdnsupno-ipownipde5ovhicpfirewall-gatewaysytesmypsxbarsyusgovcloudapimyamazemyradwebakamaihdsaveincloudfastlylbfrom-lasubsc-paysquare7in-the-bandblackbaudcdnhomelinuxoninfernoctfcloudservebbsdns-dynamiccloudfrontakamai-stagingipifonyham-radio-opsenseeringclickrisingcommunity-profrom-nylocalcertgrafana-devedgesuite-stagingcloudflareanycasteating-organicatlassian-devmydattofeste-iplocaltotorprojectknx-serveredgekeycloudflareglobalcloudyclustercasacamserveftpakamaized-stagingakamaiorigindns-cloudmyeffectboomlabotdashbuyshousestwmailhetemlazure-mobilein-dslthruhereredirectmedynuddnsbouncemesupabaseluyanicloudappakamaicloudfunctionsdebiannhlfanpgafanstatic-accessin-vpnmysynologymafeloappudohomeftptrafficmanagersiteleafseidatmemsetcloudflarecloudaccesskeyword-onazure-apiis-a-chefdoes-itgets-itwebhopselfiphomeipkicks-assedgesuitewindowsserver-ontunnelmolemydissentscrapper-sitecloudflarecnuni5srcfggffiobbzabchrsndenodynuopikddnsvpndnsakadnselastxkinghostvps-hostfastlyhomeunixazureedgeshopselectdontexistmyfritzcloudjiffyalwaysdatasells-itsquaresbroke-itazurefddattolocalat-band-campmeinforumfamilydsazurestaticappsdefinimabplaceddnsaliasdynaliasnow-dnsblogdnsroutingthecloudendofinternetdsmynasakamaiedgemymediapcadobeio-staticakamaiedge-stagingakamaihd-stagingddns-ipprivatizehealthinsurancelive-onkrellianschokokeksmassivegridmysecuritycamerarackmazeserveminecraftfrom-azis-a-geekakamaizedmoonscaleoffice-on-theusgovtrafficmanageradobeioruntimeedgekey-stagingreserve-onlinechannelsdvrdnsdojousgovcloudappcdn77-sslapps-1and1podzoneazurewebsitesdynathomescaleforceyandexcloudvusercontentisa-geekcdn-edgescoaemalcesappwriteazimuthtlonarvobuiltwithrocketnoticeablestorecomwebrecnetperotherfirminfoartslgdloncogoiltdorgmilcolcomplcschgenngonetedugovbiznamefirmmobiacincoorgmilcomnomwebgobnetintedubizinfocomyspreadshopdemongovtransurl123websitehosting-clusterkhplaycistrongsnesosvalerv\xE5lerxn--vler-qoaossandeheroysandeher\xF8yb\xF8boheroyher\xF8yxn--hery-iraxn--b-5gavalerb\xF8boxn--b-5gasandesandexn--hery-iraxn--vler-qoav\xE5lerh\xE5re\xE5laahavaofsfvfhlolnlalrlhmfmtmahcostntbu\xE5strmreigersundmyspreadshopg\xE1ls\xE1eidsvolltingvollgildeskalflor\xF8vads\xF8vard\xF8vanylvenxn--bhccavuotna-k7astrandaxn--kvnangen-k0axn--sknland-fxaxn--mosjen-eyarakkestadhyllestadnannestadvevelstadvaapstenordre-landsondre-lands\xF8ndre-landtjieltexn--vrggt-xqads\xF8r-aurdalsor-aurdalheradstordmoldefordef\xF8rdeseljefedjeryggehemnexn--krehamn-dxasognegranes\xF8gnebrynetjomevallebykletokkegiskedovretj\xF8mehob\xF8lvoldasaudatolgas\xF8mnaviknad\xF8nnasomnadonnatranafrananesnaraumasmolatr\xE6nafr\xE6nalesjasm\xF8la\xF8rstaorstahitrafloraaukraloppafr\xF8yarissasnasahalsagalsaromsaraisar\xE1isafroyasn\xE5sagronghobolfjelltydal\xE5rdalardalaskimharamkraanghkekr\xE5anghkesorumbarumhurumb\xE6rums\xF8rummodums\xE1l\xE1tb\xE1l\xE1tfrognbjugnv\xE5ganvagangulenskienl\xF8tenlotenstrynvefsnxn--merker-kuaskaunsveiob\xF8mlobomloskj\xE5kvardoflorovadsosalatbalats\xE1latkl\xE6buklabuselbubarduulvikskjakkleppris\xF8rxn--nttery-byaefl\xE5eidflahofmilgolholsellomskifetvikdepvgsfhsaskerrisorhamarasnes\xE5snesr\xF8rosrorosxn--slat-5namasoynaroyvaroyluroydyroyaskoyradoyandoyrodoymeloyrad\xF8yand\xF8yr\xF8d\xF8ymel\xF8yask\xF8ylur\xF8ydyr\xF8ym\xE5s\xF8yv\xE6r\xF8yn\xE6r\xF8yhoylandeth\xF8ylandetdivtasvuodnal\xF8renskoglorenskognesoddtangenxn--tjme-hraxn--smla-hraxn--stjrdal-s1aunjargalillehammerunj\xE1rgaxn--hamary-fyadavvenjargaxn--bearalvhki-y4a123hjemmesidegjerdrumxn--brnnysund-m8acxn--tnsberg-q1axn--mlatvuopmi-s4axn--snsa-roaxn--skierv-utaxn--brum-voatysfjordkvafjordeidfjordkv\xE6fjordsongdalenmjondalenmj\xF8ndalenxn--gls-elackragerog\xE1\u014Bgaviikagangaviikas\xF8rreisasorreisas\xF8r-varangersor-varangerxn--risr-iraskiervaxn--frna-woaxn--trna-woakvinesdalleksvikleirvikr\xF8yrvikroyrviksvelvikvenneslaevje-og-hornnessandnessj\xF8enmarnardalvindafjordsandefjordenebakksnillfjordullensvangxn--trany-yuabr\xF8nn\xF8ysundnamsskoganaustevollxn--stjrdalshalsen-sqbnord-aurdalnord-frontr\xF8gstadtrogstadgrimstadflakstadgjerstadxn--sandy-yuaxn--leagaviika-52bnore-og-uvdalvegarsheixn--rlingen-mxaxn--ggaviika-8ya47hveg\xE5rsheikarlsoykvitsoymasfjordenhamaroyinderoyosteroydavvenj\xE1rgasauheradguovdageaidnuxn--vre-eiker-k8abronnoysiellakkr\xF8dsheradkrodsheradkvinnheradbr\xF8nn\xF8yxn--mtta-vrjjat-k7afxn--lrenskog-54akvits\xF8yv\xE1rgg\xE1tkarls\xF8yoster\xF8yinder\xF8yhamar\xF8ybronnoysundxn--aurskog-hland-jnbbahccavuotnab\xE1hccavuotnagiehtavuoatnastor-elvdalmidtre-gauldalxn--gildeskl-g0akarasjokevenassixn--bievt-0qaxn--yer-znalebesbynessebyxn--hbmer-xqamalselvm\xE5lselvxn--unjrga-rtam\xF8re-og-romsdalmore-og-romsdalhareidmeland\xF8rlandorlandstrand\xE5lg\xE5rdsolundalgardafjord\xE5fjorddielddanuorrikautokeinoxn--stre-toten-zcbskodjeaejriestangeliernebamblestokkefauskesn\xE5asesnaasekongsvingerlangevagberlevagxn--flor-jrahattfjelldalostre-toten\xF8stre-totenvestfoldxn--mely-ira\xE1laheadjualaheadjunordreisaxn--troms-zuaxn--lgrd-poacporsangerflatangerstavangerleikangerbremangersamnangergieldakarasjohkaxn--rdy-0nabfrostautsirasnoasatromsaxn--sr-aurdal-l8aflekkefjordj\xF8lsterjolsteraremarkhedmarkn\xE5\xE5mesjevuemienaamesjevuemiexn--vard-jrarollagmer\xE5kermerakerorskog\xF8rskogxn--bdddj-mrabd\xE1k\u014Boluoktaxn--osyro-wuaaknoluoktatrysilskjerv\xF8ymandaljondalbindalrindalmeldalsuldalorkdalsigdalalvdall\xE6rdalhurdalsirdalverdallerdallardaloppdal\xE5seralaseralhadselkrager\xF8divttasvuotnaoverhallasteinkjerxn--hnefoss-q1askedsmokorsettroms\xF8xn--dyry-iravestre-totenmuseumxn--sandnessjen-ogbrahkkeravjufylkesbiblb\xE1jddarbajddarxn--laheadju-7yarennes\xF8yxn--koluokta-7ya57hxn--hgebostad-g3aleirfjordstorfjordbalsfjordb\xE5tsfjordbatsfjordmuos\xE1tbiev\xE1tloab\xE1tk\xE1r\xE1\u0161johkan\xF8tter\xF8yxn--mjndalen-64anordkappl\xE1hppilahppialstahaugsiljanverranr\xF8ykenroykenhaldenlyngenbergenhortenh\xF8nefosshonefosstroandinbeiarnvarggatosoyroos\xF8yrotromsoidrettmuosatbievatruovatloabatvoagattynsetnessetxn--indery-fyask\xE1nitskanitraholtr\xE5holtxn--ystre-slidre-ujbandebusarpsborgbearduxn--karlsy-fyahordalandjorpelandj\xF8rpelanddeatnuringsakers\xF8r-odalsor-odalxn--slt-elabringerikeaudnedalnittedalnissedalhemsedalslattumsurnadalxn--blt-elabelverumstj\xF8rdalnaustdalhjartdalgj\xF8vikfyresdalhasviknarviklarvikgjovikmalvikgamviklenvikporsgrunnstjordalengerdaldrobakdr\xF8bakxn--msy-ula0hvestvagoyxn--vgan-qoaxn--ryken-vuaxn--lten-graxn--stfold-9xaxn--hpmir-xqaxn--lury-iram\xE1latvuopmimalatvuopmitysv\xE6rkirkenesbirkenesmoskenesb\xE1id\xE1rxn--fjord-lraxn--rdal-poabahcavuotnab\xE1hcavuotnaxn--frde-gralind\xE5sbearalvahkixn--hobl-irar\xE1hkker\xE1vjuxn--loabt-0qav\xE5g\xE5\xE1lt\xE1bod\xF8sundlundrader\xE5deetnetimeholeauregrueoddavagavegaranatanaarnasolasulaaltalekafusavangbergkvam\xE5mliamlibokntinnroangranosenoslobodor\xF8stroststat\xE5motamotivgupriv\xF8yeroyerliermossvossxn--nvuotna-hwalusterlunnermarkerh\xE1bmerhabmerhvalerfjalerxn--rholt-mratysvarbaidarfitjargaularh\xE1pmirhapmirmelhusfosnes\xF8ksnesoksnestysneshemnesevenesflesbergeidsbergtonsbergt\xF8nsberglindasxn--sndre-land-0cbnamsosxn--srum-gra\xF8ystre-slidreoystre-slidrevestre-slidretrondheimbalestrandxn--langevg-jxaaustrheimxn--skjk-soavagsoyaveroysandoykarmoyfinnoytranoyvestbytranbysykkylvenxn--hyanger-q1aspjelkavikandasuoloxn--fl-ziaxn--drbak-wuastathellexn--sr-varanger-ggbtelemarkxn--bhcavuotna-s4axn--porsgu-sta26f\u010D\xE1hcesuolocahcesuoloakrehamn\xE5krehamnsand\xF8ykarm\xF8yfinn\xF8ytran\xF8yv\xE5gs\xF8yaver\xF8ynamdalseidxn--lesund-huabadaddjaxn--vegrshei-c0axn--btsfjord-9zagildesk\xE5lporsanguxn--trgstad-r1an\xE1vuotnanavuotnahammerfestxn--sgne-graxn--brnny-wuacibestadharstadnarviikaeven\xE1\u0161\u0161ivestnesgjemnessandnesagdenesrennesoyxn--avery-yuaxn--tysvr-vrabearalv\xE1hkikongsbergspydebergrandabergxn--andy-iradavvesiidaxn--krdsherad-m8apors\xE1\u014Bgufredrikstadbjerkreimringeburennebuaurskog-holandnotteroyxn--vgsy-qoa0jxn--rmskog-byaskierv\xE1ivelandbyglandfrolandaurlandforsandxn--bjddar-ptamidsund\xE5lesundalesundfetsundfarsundovre-eiker\xF8vre-eikerakershusxn--moreke-juas\xF8rfold\xF8stfoldostfoldsorfoldh\xF8yangerhoyangerlevangerorkangertanangerxn--vestvgy-ixa6olillesandulsteinxn--rennesy-v1agranvinskjervoyxn--klbu-woalavagisxn--h-2faxn--ryrvik-byakafjordk\xE5fjordseljordfolkebiblxn--gjvik-wuajevnakerxn--kfjord-iuabudejjuxn--kranghke-b0axn--davvenjrga-y4axn--rland-uuaxn--ldingen-q1axn--mlselv-iuaxn--rady-iraxn--linds-prabrumunddalxn--ygarden-p1amo-i-ranaeidskogr\xF8mskogromskoghjelmelandxn--finny-yuaxn--sr-odal-q1axn--skjervy-v1aballangenkvanangenkv\xE6nangengratangenxn--hmmrfeasta-s4acvossevangensuohkanxn--rde-ulaxn--mli-tlaxn--ksnes-uuanordlandskanlandsk\xE5nlandsortlandfuoiskuxn--rros-graxn--hcesuolo-7ya35bxn--eveni-0qa01gagaivuotnag\xE1ivuotnaxn--seral-lradrammenmodalenmosjoenjan-mayentorskensteigengloppenxn--snes-poamatta-varjjatxn--sr-fron-q1aomasvuotnajessheimb\xE5d\xE5ddj\xE5xn--krager-gyaxn--kvfjord-nxaxn--asky-iraxn--snase-nraxn--bidr-5nacholt\xE5lenxn--vads-jraxn--jlster-byamosj\xF8enxn--rst-0nastavernxn--ostery-fyaxn--oppegrd-ixaxn--sknit-yqaxn--risa-5naoppeg\xE5rdskiptvetrendalenholtalenxn--mot-tlaxn--lhppi-xqaxn--holtlen-hxaxn--srreisa-q1akopervikxn--muost-0qaxn--bmlo-grahokksundkvalsundegersundxn--karmy-yuaullensakerxn--hylandet-54axn--kvitsy-fyaxn--bod-2nalangev\xE5gberlev\xE5gkristiansandxn--rsta-frahornindalstj\xF8rdalshalsenstjordalshalsensandnessjoenh\xE1mm\xE1rfeastaxn--lrdal-sras\xF8r-fronsor-fronnord-odalkristiansundm\xE1tta-v\xE1rjjatvestv\xE5g\xF8ynesoddennotoddenbuskerud\xF8ygardenoygardensalangenlavangenralingenr\xE6lingenlodingenl\xF8dingenlea\u014Bgaviikalaakesvuemieleangaviikauenorgexn--srfold-byaaskvollxn--rskog-uuaxn--nry-yla5gxn--vry-yla5ghammarfeastaxn--rhkkervju-01afxn--givuotna-8yakommunekrokstadelvanedre-eikerhagebostadh\xE6gebostadxn--berlevg-jxakviteseidxn--s-1faxn--l-1faxn--nmesjevuemie-tcbafuosskomo\xE5rekemoarekexn--lt-liacxn--jrpeland-54asvalbardoppegardholmestrandtvedestrandsogndalsokndalarendalsunndalfolldalxn--krjohka-hwab49jlyngdaletnedalnorddalsaltdalgausdalskedsmovaksdalgjesdalstordalxn--frya-hraaarbortedrangedalxn--smna-graaurskog-h\xF8landxn--vg-yiabtjeldsundhaugesundlindesnesxn--mre-og-romsdal-qqbxn--dnna-gradyntmpheremerseineshacknetenterprisecloudmineaccomaorim\u0101oriorgmilcriiwigennetschoolhealthkiwigovtgeekxn--mori-qsacloudnsparliamentcomedorgcompronetedugovmuseumwebsitekinservicebarsywebsitebuildereerobookheimdnsleapcelleero-stagetechcrscsslorigingohomecdbedeeeiemesecabgngilnlalplchfisiincnnoroptatitmtltruauhulumkdkukskjplvtrgrfrkrhrusesismycynzcznetinteduassoososcloudstgbetaaezaeuhkusjshatenadiarycdn77hoptozaptois-a-knightmyftpno-ipjpnddnssdpdnsspdnsbarsysweetpepperis-a-bruinsfanis-very-sweetservegameis-a-soxfanhomelinuxcdn77-secureservebbsmisconfusedwebredirectblogsitefreedesktopcouchpotatofriestoolforgeaccesscamis-lostreadmyblogsmall-webfedorapeopleserveftpis-a-celticsfanmywirepotagertwmailin-dslsellsyourhomeread-booksfreeddnscable-modemis-savednflfanufcfanmlbfanstuff-4-saleendoftheinternetin-vpnmy-firewallhomeftpis-localis-a-chefboldlygoingnowherewebhopselfipkicks-assroxatunkcamdvrfedoraprojectgotdnsdvrdnsdyndnspubtlspimientahomeunixdontexistfedorainfracloudwmflabsfspagesbmoattachmentsteckidsfamilydsdnsaliasdynaliasnow-dnscloudnsdoomdnsduckdnsblogdnshomednsroutingthecloudendofinternetdsmynasip-dynamicpoivronhttpbinmyfirewallis-very-evilmysecuritycamerais-a-linux-userwmcloudis-a-geektuxfamilyis-a-candidatedoesntexistis-very-badhobby-sitegame-hostaltervistais-foundis-a-patsfandnsdojohepforgepodzonedynservcollegefanis-very-goodfrom-meis-very-niceisa-geeknerdpolacmedsldingorgcomnomgobabonetedupleskaemhlxmyboxrockyprvcydeuxfleurspdnscodebergheyflowstatichostorgmilcomnomgobneteduorgcomeduiorgmilcomngonetedugovcloudns1337ngrokacorggogfamcomwebgobnetedugokgopgkpgovgosbizpasaugumicsopozpapuwmwsrprusiskwpspkppspkmpspokeoiawsawifoumsdnskokwpmuppuppsppiwwiwoowuzswkzoschrzpisdnwzmiuwwitdpssewsseumigugimoirmpinbwinbwiihupporzgwgriwupowwskrwioswuozstarostwokonsulattmpccopruszkowmyspreadshopostrodakartuzyopolegminamediaustkazgorajgoraolawailawalomzawloclradombytomjaworznotargilubinkoninzagantorunkutnokepnonakloczestsopotsanokturekplockslasksklepzarowlukowmedaidgdaorgmilrelcomnomatmgsmartneteduelkgovwawsossexbiztgorysejnytychypomorzeboleslawiechomesklepsdscloudunicloudzakopanelegnicarawa-mazbydgoszczswidnikkrasnikwloclawekbielawamragowograjeworealestatebeskidykaszubymalopolskaprzeworskswiebodzinlecznadfirmaszkolawarmiagdyniamiastakazimierz-dolnymalborkswidnicadlugolekaostrolekapodlasieelblagtravelsimplesitezachpomormielecszczecinnieruchomosciwalbrzychlezajsklublinbedzinpoznanwielunmielnooleckostarachowicedkontopowiatwroclawrybniksuwalkileborkslupskgdanskostrowwlkptarnobrzegtourismwegrowkrakowglogowyou2pilanysamailwrocinfoagroautobeepshopprivlapypiszlodzcfolksecommerce-shopmazurypulawyskoczowrzeszowpomorskiezgierzkaliszolkuszlowiczostrowiecsosnowiecmazowszewodzislawbialowiezazgorzeleckatowicepabianicejelenia-gorawolominkarpaczsieradznowarudaczeladzkonskowolaskierniewiceswinoujscieturystykabieszczadycieszynketrzynolsztynbialystokbabia-goraprochowicewarszawastalowa-wolapolkowicegorlicegliwiceponiatowalimanowalubartowaugustowkobierzyceopocznognieznoszczytnokolobrzegshoparenapodhalebielskoklodzkostargardatwithplayitownnamecoorgnetedugovacorgcomproestnetedugovbiznameislaprofinforechtngrokmedaaaacacpaenglawjurbarbarsykeeneticavocatacctcloudnsorgcomsecplonetedugov123paginaweborgcomnetintedugovnomepublidkinbarsygovx443cloudnsorgmilcomnetedugovcooporgmilcomschnetedugovnamecomcannetlibassoaemclantmcontstoreorgcomnomrecwwwbarsyfirminfoshopartsstackitmyddnswebspacelima-cityacincooxorgedugovbarsybrendlyhbvpsvpsspectrumlandinghostingacppmordoviamcprecbgorgmilcomspbnetintedumsknovgovbirrasmcdirmytismircloudvladimirnalchikadygeyamarinepyatigorskmyjinobashkiriaeurodirvladikavkazna4ugroznykustanaikalmykiacldmaildagestaniranbuildcloudcanvaliaravalwixdevelopmentappwritemigrationneedleverceldatabasestackitcodereplravendbonporterlovableaccoorgmilnetgovcoopmedorgcompubschnetedugovservicemecomygovorggovtvmedorgcomnetedugovinfoedgfacbmlonihkutwpsryxzbdtmacfhppmyspreadshopbrandpartiorgcomfhvpress123minsidaitcouldbeworlanbibkommunalforbundfhskiopsyskomvuxkomforbnaturbruksgymnloginlineorgcomnetedugovenscaledeuusentsurgebotdaorgmilcomnetgovnowteleporthashbangplatformlovablebarsyshopwarebasehoplixbarsyonlinemsf5gitappgitpagewawamscofigma-govcaffeinefigmacanvasoltstscwputerbarsysupportchatgptsquareomniweopensocialcpanelplaycodenotionnovecorewpsquaredpreviewjelecyonbyensrhtfastvpspieboxconvexjouwwebheyflowplatformshloginlinemadethissourcecraftclouderaorgorgcomartedugouvunivmeorgcomnetedugovsurveysstatichfheiyuxs4allprojectmyfastubervibehostapp-ionosdeployagentmecoorgcomschnetedugovbizcncostoreorgmilcomneteduembaixadaconsuladokiraranohoprincipesaotomeheliohobarsystorebaseshopwaresellfyaiabkhaziavologdamordoviapenzalenugsochinavoiexnetspbmsknovnorth-kazakhstanashgabadkareliaarmeniageorgiavladimirnalchikivanovobukharaadygeyakhakassiakalugakrasnodarjambylaktyubinsktroitskbryanskobninskkurganazerbaijanpokrovskbashkiriatselinogradvladikavkazmurmansktulatuvamangyshlaktashkentchimkentgroznykaragandatermezarkhangelskkustanaikalmykiabalashoveast-kazakhstankaracoldagestantogliattibarsyredorgcomgobedumirenknightpointaccoorgjelasticdiscoursecleverappsschacmiincogoornetonlineshopcogoorgmilcomwebnicnetintedugovbiznametestcoorgmilcomnomnetedugovorangecloudpersoindorgcomfinnatnetgovensmincomtourismintlinfox0611oyaorgmilcomnetedugovquickconnectvpnplusnettprequalifymeaddrmyaddrntdllwadlnctvavdrk12orgmilpolbeltelcomwebgennetedutskkepgovbbsbiznameinfocoorgmilcompronetedugovbiznameinfobetter-thanworse-thansakurafromdyndnson-the-webmymailerorgmilurlcomneteduidvgovmydnsgameclubebizmeneacsccogotvorhotelmilmobiinfovodteiflgplkmsmsbcckhincndnvncoztltmkckppzpdprvcvkvlvcrkrkscxuzchernovtsyrivneyaltaodesavolynrovnolutskltdinforgcomnetedugovbizvinnicazhitomirternopilpoltavakropyvnytskyizaporizhzhiasevastopolsebastopoluzhgoroduzhhorodkharkovkharkivvinnytsiakhmelnytskyizaporizhzhecrimeaodessazhytomyrnikolaevcherkassydonetskluganskluhanskkirovogradivano-frankivskchernivtsikrymkievkyivlvivsumyzakarpattiamykolaivcherkasychernigovkhersonchernihivdnipropetrovskdnepropetrovskkhmelnitskiyneacsccogoorusorgmilcomedugovmyspreadshopadimono-ipbarsybarsyonlinelayershiftnh-servretrosnubapicampaignservicelugaffinitylotteryweeklylotteryraffleentrygluglugsmeaccoindependent-inquestnimsitecopropymntltdorgplcschnetgovnhsbarsyindependent-commissionindependent-reviewpolicepublic-inquiryindependent-panelconnhospindependent-inquiryroyal-commissionoraclegovcloudappscck12libaws-govccphxcclibpvtparochchtrcck12libcceatonk12coglibtecgendstmusann-arborwashtenawcck12glghcck12sealibforksolympiabainbridge-islkeyporthoquiamyarrow-pointcentraliaport-townsendsequimport-ludlowrentonsilverdalebremertonredmondsheltonbellevueport-orchardport-angeleskingstonchehalisaberdeengig-harborseattlepoulsboidmdndsddemenegacalamaiavawapailalflnmdcncscohnhmihiviwiriinmntnmocoutvtctmtgunjokakwvnvprarorasmskstxwynykyazisadninsnngosrvis-bymircloudservernamepointtoenscaledland-4-salefreeddnsstuff-4-saleazure-apinoipdatabricksappscloudnsgolffanheliohostazurewebsitesgvorgmilcomgubneteducoorgcomnetd0egvorgmilcomnetedugovmydnsiacostoree12orgmilcomnomwebgobbibrectecnetintedugovraremprendefirminfoartseducok12orgcomnethidnsidacaiiosonlahanamhanoicamauhueorgcompronetintedugovbizbacninhtayninhhoabinhnamdinhtravinhhaiphongvinhlonghaiduongquangnamquangtrithuathienhuequangninhbacgianghaugiangquangbinhsoctrangbentrethanhphohochiminhdanangkontumhatinhkhanhhoathanhhoahealthgialailaocaiyenbaibackanngheanlonganphuyenphuthocanthodaklakdongnainameinfovinhphucdongthapkiengiangtiengiangquangngailaichaulangsonlamdongdaknonghagiangangiangcaobangbinhduongninhthuanbinhthuanbaclieuthaibinhninhbinhbinhdinhtuyenquanghungyenbaria-vungtauthainguyendienbienbinhphuocschbizputerimagine-proxyorgcomnetedugovcloud66advisormypetsdyndnsxn--8dbq2axn--4dbgdty6cxn--5dbhl8dxn--hebda8bxn--80auxn--d1atxn--c1avgxn--o1acxn--o1achxn--90azhxn--55qx5dxn--uc0atvxn--od0algxn--wcvs22dxn--gmqw5axn--mxtq1mxn--12c1fe0brxn--h3cuzk1dixn--12co0c3b4evaxn--12cfi8ixb8lxn--o3cyx2axn--m3ch0j3axn--j1adpxn--90amcxn--90a1afxn--h1ahnxn--j1ael8bxn--h1alizxn--c1avgxn--j1aefxn--80aaa0cvacxn--41acaffeineexeopentunnelbotdashtelebitorgtmaccoagricorgmilnomwebnicngonetaltedugovlawnisschoolgrondaraccoorgmilcomschnetedugovbizinfoprg1-zeropstritonstackitlimazeropsaccoorgmilgov\u044F\u0441\u043F\u0431\u043E\u0440\u0433\u043A\u043E\u043C\u043C\u0441\u043A\u0431\u0438\u0437\u043C\u0438\u0440\u0441\u0430\u043C\u0430\u0440\u0430\u043A\u0440\u044B\u043C\u0441\u043E\u0447\u0438\u0430\u043A\u043E\u0434\u043F\u0440\u043E\u0440\u0433\u043E\u0431\u0440\u0443\u043F\u0440\u05E6\u05D4\u05DC\u05DE\u05DE\u05E9\u05DC\u05D9\u05E9\u05D5\u05D1\u05D0\u05E7\u05D3\u05DE\u05D9\u05D4\u0E2D\u0E07\u0E04\u0E4C\u0E01\u0E23\u0E18\u0E38\u0E23\u0E01\u0E34\u0E08\u0E23\u0E31\u0E10\u0E1A\u0E32\u0E25\u0E28\u0E36\u0E01\u0E29\u0E32\u0E17\u0E2B\u0E32\u0E23\u0E40\u0E19\u0E47\u0E15\u6559\u80B2\u7DB2\u7D61\u7D44\u7E54\u516C\u53F8\u653F\u5E9C\u500B\u4EBA\uB2F7\uB137\uD55C\uAD6D\u6FB3\u95E8\u65B0\u95FB\u6FB3\u9580\u8054\u901A\u5BB6\u96FB\u5609\u91CC\u62DB\u8058\u901A\u8CA9\uB2F7\uCEF4\uC0BC\uC131\u30B3\u30E0\u10D2\u10D4\u0431\u0433\u0440\u0444\u0435\u044Eadcdbdgdidmdsdtdaebedeeegeiejekemenepereseveyegabacalamanauavapaqasazacfbfafgfnfpfwftfbgcgagggegkgngmgsgpgvgtgugilmlnlalclglplsltlhmimjmkmmmomambmcmdmfmgmzmpmsmtmgbbblbsbecccacnclcmcvctcscmhkhghchbhthphshlinikifigiaibicivisikninhnmncnbngnsnpnvntnjoionomobocoaofodorosotoptstttytatbtetgtithtmtltrusuvuaucueuguhulumunufjdjbjtjsjlkmkhkfkdkcktkukskpkgpmpnpkpjpgqaqmqiqsvtvcvbvmvlvrwpwtwzwbwcwawgwkwmwtrsrprgrfrercrbrarnrmrlrkrirhrwsusrssspsgsesbsaslsmsissxmxaxcxuypysylymykygybycyuztzsznzmzkzdzczbzaz\u03B5\u03BB\u03B5\u03C5\u4E16\u754C\u53F0\u7063\u8D2D\u7269\u516C\u76CA\u70B9\u770B\u81FA\u7063\u7F51\u7EDC\u66F8\u7C4D\u5728\u7EBF\u7F51\u7AD9\u624B\u673A\u673A\u6784\u5927\u62FF\u6E38\u620F\u4FE1\u606F\u53F0\u6E7E\u8C37\u6B4C\u6148\u5584\u5546\u6807\u9999\u6E2F\u4E2D\u56FD\u9910\u5385\u7F51\u5740\u4E2D\u570B\u5546\u57CE\u98DF\u54C1\u5FAE\u535A\u653F\u52A1\u79FB\u52A8\u96C6\u56E2\u516C\u53F8\u516B\u5366\u5546\u5E97\u5065\u5EB7\u7F51\u5E97\u653F\u5E9C\u65F6\u5C1A\u4F5B\u5C71\u4E2D\u4FE1\u5A31\u4E50\u5E7F\u4E1C\u4F01\u4E1Ahomedepotengineering\u0627\u0645\u0627\u0631\u0627\u062Arepublicankuokgroupversicherungchannelcitadelxn--pgbs0dhxn--b4w605ferdstatebankwebsitexn--mgb9awbf\u4E9A\u9A6C\u900A\u6DE1\u9A6C\u9521alibabaxn--ngbc5azdxn--mgbbh1axn--45br5cyltoshibabuildworldcloudtradeguideplacespacedancemoviephoneprimesmilebiblestyleappleazurestoreskypegripexn--l1accdrivelottehorsehouseleasechasereisestadahondaomegaaetnaamicaninjanokiamediadeltavodkaedekaosakapizzaslingemailgmailtirolshelltmallfinallegaltotalhotelamfamforumrehabmusicciticricohcoachwatchboschearthfaithirishmiamiarchidubaiguccipraxi\u307F\u3093\u306A\u30B9\u30C8\u30A2\u30BB\u30FC\u30EBcanonsalononionnikonepsonkoelngreensevencrownikanoradioaudioweiboglobopromogalloyahoociscorodeovideomangobingotokyovolvolottokyotophotosmartsportquesttrusthyattjetztadultcymrubaidutushuxn--kprw13dubankclickblackmerckgroupsharpcheapnowtvxn--h2brj9c\u05E7\u05D5\u05DD\u0570\u0561\u0575\u043E\u0440\u0433\u0441\u0440\u0431\u043C\u043E\u043D\u043A\u043E\u043C\u0431\u0435\u043B\u043C\u043A\u0434\u049B\u0430\u0437\u0440\u0443\u0441\u0443\u043A\u0440\u0645\u0635\u0631\u0642\u0637\u0631\u0639\u0631\u0628\u0643\u0648\u0645dadcfdmedwedredphdthdbidpidkrdmsdltdiceonewmeglemoerwecfageacbanbambaaaammakianraspacpaaxawtfbcgaegongingaigvigorgdogdhlmilrilonlaolloluoljllcalgalnflafltelsrlfrllplkimibmcamcombommomifmabbjcbscbwebcabnabtabmlbpubabcbbcnecincpncllcstcwtcpwcnyckfhbzhovhmoiskiobisbitcifyituipinvinwinxincbnbcnmanfangdnmenrenkpnmtnyunrunfununobiojioriohbogmofooboooooacoecoceongoproartistottnttbbtcateatlatvetpetbetnethktmitfitintjothotgotdotbotprueduicujnjyouinknhktdkappsapgapmapdnptopgopllpjmpzipvipripesqtrvdtvitvdevmovgovhivnrwlawsewnewbmwwownowhowdvrftrmtrsfrbarcartvscrseusawsupsubssbsadsddsldssasbmsmlsxxxboxfoxgmxtjxsextaxbuyflydiysoyjoyskypaydaygayxyzanzbizwebersenerpokerlameractortatarsolar\u0EA5\u0EB2\u0EA7\u0E04\u0E2D\u0E21\u0E44\u0E17\u0E22tourslocusnexuslexusgiftsbeatsboatspartspressglassswiss\u0915\u0949\u092E\u0928\u0947\u091Ftiresgivescodeshomesgamestunesshoescardswalesloansvegastoolsdealsautosparis\u30D5\u30A1\u30C3\u30B7\u30E7\u30F3workssucksrocksxeroxforexfedexpartylillymoneystudyrugbytoraytoday\u4E2D\u6587\u7F51xn--unup4y\u5929\u4E3B\u6559\u98DE\u5229\u6D66\u65B0\u52A0\u5761enterprises\u6211\u7231\u4F60\u5609\u91CC\u5927\u9152\u5E97christmasxn--fct429kholdingsxn--8y0a063axn--mgbx4cd0ablifestyleabogadoallstatenetbank\u0643\u0627\u062B\u0648\u0644\u064A\u0643xn--s9brj9cxn--gk3at1ebestbuycharityxn--55qx5dmicrosoftpropertybasketballhomegoodscorsicajewelrygallerygrocerysurgerycountrybrusselsverisignferreroxn--czr694bhdfcbankcommbanksoftbank\u067E\u0627\u0643\u0633\u062A\u0627\u0646\u067E\u0627\u06A9\u0633\u062A\u0627\u0646nextdirect\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0647\u0627\u0644\u0639\u0644\u064A\u0627\u0646xn--h2brj9c8cxn--80adxhksshikshaxn--mgbai9azgqp6jcuisinellabarclayscatholicxn--kpry57dcompanyxn--xhq521bblackfridayxn--mgba3a3ejtsandvikxn--d1acj3bacademydownload\u0645\u0644\u064A\u0633\u064A\u0627xn--j1amhxn--w4r85el8fhu5dnraipirangaathletaxn--fhbeixn--mgbqly7cvafrzuerichxn--c2br7g\u0B87\u0BB2\u0B99\u0BCD\u0B95\u0BC8contractorsxn--io0a7igraphicsinsurancetemasekxn--xkc2al3hye2amotorcyclesphotographydirectoryplumbingxn--vhquvclothingtrainingcleaningwilliamhilllightingxn--mgba3a4f16ashoppingcateringeducationokinawapicturesventuresproductionsxn--9et52uwalmart\u0D2D\u0D3E\u0D30\u0D24\u0D02supportrealestatecapitalonexn--nqv7fs00emaauspostfloristdentistxn--qxamgodaddybradescobargainsmitsubishikerryhotelsxn--9dbq2axn--3pxu8kimmobilienxn--fjq720axn--mgbtx2bholidaymckinseymadridbusinessbuildershelsinkixn--4gbrim\u043C\u043E\u0441\u043A\u0432\u0430\u0627\u0644\u0633\u0639\u0648\u062F\u06CC\u0629coffeedegreelacaixapartnersalsaceofficeabbvievoyageorangegeorgeonlinechromemobilekindlegoogleoraclecircleschulesecureinsurexn--mgba7c0bbn0aestatexn--mgbc0a9azcgcruisehangoutxn--vuq861bxn--42c2d9arexrothfirestoneuniversityxn--nnx388alifeinsuranceextraspace\u043E\u043D\u043B\u0430\u0439\u043Dverm\xF6gensberatersoftwarexn--fiqs8sxn--mgbab2bdxn--w4rs40ltienda\u092D\u093E\u0930\u0924\u092E\u094Dafricatoyotaotsukasakuracameracreditcardnagoyaconsultingnetworkjunipertheatermonsterprogressivepioneerxn--55qw42gracingdatingvotingvikinglivinggivingxn--bck1b9a5dre4cbrotherweatherjoburg\u0641\u0644\u0633\u0637\u064A\u0646lplfinancialxn--clchc0ea0b2g2a9gcdfutbolschoolsocialglobaldentalwoodsidechanelairtelmatteltravelrealtorwebcamstream\u0C2D\u0C3E\u0C30\u0C24\u0C4Dunicomalstomxn--nodexn--6frz82gmuseumfurniturexn--rvc1e0am3exn--mix891faccenturexn--11b4c3dismailineustardiscountquebeccomsecclinicservicesxn--y9a3aqxn--c1avgswatchchurchsearch\u0627\u0644\u0627\u0631\u062F\u0646marketingcontacthealthmonashshoujisanofitaipeiamericanexpresssuzuki\u30A2\u30DE\u30BE\u30F3\u30AF\u30E9\u30A6\u30C9\u30DD\u30A4\u30F3\u30C8bharti\u30B0\u30FC\u30B0\u30EBxn--mgberp4a5d4armemorialxn--1qqw23alondonmormoninstitutevisionbostonnortoncouponmaisonamazonvirginberlindesigndurbanolayannissananquanxihuanhitachikaufengardenreisenbayerntechnologydatsunxn--90a3aclatinocasinostudiophysioxn--ngbe9e0apharmacytattootaobaoaramcoexpertreportabbottdirectselectimamatfairwindspictettargetmarketintuittravelersinsurancecreditdupontryukyusuppliesxn--tckwebnpparibasschmidtmerckmsdyodobashirestaurantbridgestonecricketxn--fpcrj9c3dbostikbroadwayattorneylefrakemerckxn--fiq228c5hscareersfarmerswinnersflowersxn--wgbh1cguitarsxn--54b7fta0ccxn--p1acfmakeupgalluplandroverxn--kcrx77d1x4agoldpointbauhausxn--mgbayh7gpahiphopplaystationxn--mgba3a4fraxn--eckvdtc9dhyundaixn--gckr3f0fistanbulticketsmarketsflightschintaireviewsxn--3e0b707ewindowsxn--fiqz9sfinancialxn--fzys8d69uvgm\u0627\u0628\u0648\u0638\u0628\u064Adiscoverreview\u09AC\u09BE\u0982\u09B2\u09BExn--5su34j936bgsgmoscowobserverapartments\u0434\u0435\u0442\u0438\u0627\u0631\u0627\u0645\u0643\u0648\u0441\u0430\u0439\u0442eurovisionxn--i1b6b1a6a2exn--xkc2dl3a5ee0h\u062A\u0648\u0646\u0633\u0645\u0648\u0642\u0639\u0628\u0627\u0631\u062A\u0680\u0627\u0631\u062A\u0634\u0628\u0643\u0629\u0639\u0645\u0627\u0646\u0628\u064A\u062A\u0643\u0639\u0631\u0627\u0642readkredbondlandbandfundfoodprodgoldfordtubecafesafelifeggeeieeefreefagepagegugezonewinememenamegamesaleablebikenikelikecarecbreherefiresaveloveliveblueartedatesitevotecaseluxebofamodaltdaasdatiaayogasinavanashiaasiajavabbvatevavivadatazaraarpacasavisasncfprofmaifsurfgolfdvagsongbingpingwangkpmggoogblogpohlfailcooldellcalldeallidlsarlfilmteamroomfarmimdbarabclubhdfcicbchsbcgmbhrichtechfishdishcashminiernikddiaudiwikimobitaxicitikiwidesiqponskinloanakdnwienopenporncerntownimmolimoolloinfonicofidolegosaxozeroaerovivoautovotomotofastbestresthostpostnextlgbtchatseatgiftmeetdietreitmintrentgentspotscotguruitausohumenucyoubanklinkpinkdclktalksilkbookseekworkrsvpaarpjeepshopcoophelpcamppccwshowbeerstarruhrflirweirhaircarsparsjprshausplusnewstipstoysjobskidsfanspicsdocsxboxamexsexynavycitysonyarmyallybabyplaydeliverybuzzgbizlamborghiniphilips\u0DBD\u0D82\u0D9A\u0DCF\u0CAD\u0CBE\u0CB0\u0CA4fitnessexpresslanxesspfizercenterwalterlawyersoccercareerkosherbrokerlockerdealerdoctorauthorxn--mgbqly7c0a67fbcverm\xF6gensberatungjaguarxn--pssy2uxn--hxt814eflickrrepairrogersairbusxn--mgbai9a5eva00beventsyachtsxn--t60b56a\u09AD\u09BE\u09F0\u09A4\u09AD\u09BE\u09B0\u09A4\u092D\u093E\u0930\u0924\u092D\u093E\u0930\u094B\u0924viajeshermeshughesxn--j1aef\u0938\u0902\u0917\u0920\u0928villas\u0B2D\u0B3E\u0B30\u0B24claimshotels\u0AAD\u0ABE\u0AB0\u0AA4zapposphotosjuegoscondostatamotorsgratistennis\u0A2D\u0A3E\u0A30\u0A24tkmaxxtjmaxxschaeffleryandexxn--80aswgrealtysafetybeautyluxuryxn--3ds443gsupplyfamilyxn--o3cw4hhockeysydneyxn--90aenissayalipayenergycomputeragencyxn--rovu88b\u96FB\u8A0A\u76C8\u79D1xn--gecrj9cstatefarmaccountantaquarelleolayangroup\u9999\u683C\u91CC\u62C9xn--p1ai\u7EC4\u7EC7\u673A\u6784xn--1ck2e1bxn--mgbt3dhdschwarz\u0645\u0648\u0631\u064A\u062A\u0627\u0646\u064A\u0627abudhabinowruzkomatsufujitsuhospitalxn--80asehdbxn--mgbtf8flxn--j6w193gxn--yfro4i67oprudentialxn--flw351ecruisescoursesrecipesxn--e1a4cferrarixn--ses554gxn--wgbl6awatchesstaplessinglesxn--mgbcpq6gpa1axn--otu796dpropertiescreditunionxn--mgbah1a3hjkrdstockholmhisamitsu\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629stcgroupdomainsoriginscouponsbloombergclubmedfroganslimitedxn--80aqecdr1aexposedinternationalequipmentbarclaycardxn--q7ce6axn--mgbi4ecexpprotectionassociatesconstructionxn--cck2b3bxn--45q11candroidfoundation\u05D9\u05E9\u05E8\u05D0\u05DCxn--mgbca7dzdocliniqueboutiqueengineerxn--qxa6asystemsfirmdalefashionauctionxn--nqv7finfinitirentalsreliancetradingweddingfishinghostinggentingbookingcookingxn--3hcrj9cgraingerxn--czrs0tdemocratsamsungyokohamaxn--h2breg3evexn--nyqy26alundbeckmelbournevacationssolutionsfrontierxn--vermgensberatung-pwbmanagementxn--cg4bkixn--mgb2ddeslincolnhamburgsandvikcoromantblockbusterairforcebarefootxn--4dbrk0ceinvestmentsfeedbackcommunityxn--ngbrx\u0627\u0644\u0628\u062D\u0631\u064A\u0646diamondsamsterdamhealthcareredumbrellaxn--mxtq1mxn--2scrj9cagakhanxn--mgbpl2fh\u043A\u0430\u0442\u043E\u043B\u0438\u043Acaravan\u0B9A\u0BBF\u0B99\u0BCD\u0B95\u0BAA\u0BCD\u0BAA\u0BC2\u0BB0\u0BCDrichardlimortgageamericanfamilyxn--fzc2c9e2cscholarshipssaarlandxn--imr513nvlaanderensamsclubgoodyearkitchen\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBEweatherchannelallfinanzxn--kput3i\u0627\u0644\u0633\u0639\u0648\u062F\u06CC\u06C3xn--90aisxn--efvy88h\u0627\u0644\u062C\u0632\u0627\u0626\u0631xn--mgbaam7a8hexchangejpmorganxn--tiq49xqyjfidelitysecurityxn--mk1bu44cwanggouxn--fiq64bxn--6qq986b3xlxn--mgbbh1a71exn--80ao21amarshallsxn--5tzm5gtravelerspanasoniclatrobeyoutubeaccountantsxn--rhqv96gxn--cckwcxetdanalyticsxn--ygbi2ammx\u0628\u0627\u0632\u0627\u0631\u0628\u06BE\u0627\u0631\u062A\u0633\u0648\u0631\u064A\u0629organicfresenius\u0633\u0648\u0631\u064A\u0627xn--9krt00axn--qcka1pmcxn--jlq480n2rgdeloittesciencefinancexn--jvr189mxn--30rr7yhomesensehotmailbaseballfootballleclercboehringerxn--q9jyb4cxn--mix082f\u0627\u0644\u064A\u0645\u0646\u0647\u0645\u0631\u0627\u0647politie\u0633\u0648\u062F\u0627\u0646\u0627\u064A\u0631\u0627\u0646\u0627\u06CC\u0631\u0627\u0646netflixyamaxunxn--lgbbat1ad8jcollegestoragecapetowncolognekerrypropertiesxn--mgbgu82axn--ogbpf8flxn--czru2dwhoswhociprianilasallexn--g2xx48cforsalebanamexaudiblexn--vermgensberater-ctbxn--zfr164bericssonvanguardxn--45brj9cindustriestheatremarriottxn--3bst00mcomparexn--mgberp4a5d4a87gcapitaldigital\u0627\u0644\u0645\u063A\u0631\u0628barcelonashangrilaxn--d1alfcalvinkleinwwwcitysapporokawasakinagoyasendaikobekitakyushuyokohamackjp";
1784
- var rulesRoot = 624;
1785
- var exceptionsRoot = 628;
1786
-
1787
- // ../../node_modules/.pnpm/tldts@7.4.15/node_modules/tldts/dist/es6/src/suffix-trie.js
1788
- var numberOfNodes = nodeFlags.length;
1789
- var numberOfEdges = edgeLength.length;
1790
- var edgeOffset = new Uint32Array(numberOfEdges);
1791
- var edgeHash = new Uint32Array(numberOfEdges);
1792
- var wildcardEdge = new Int32Array(numberOfNodes).fill(-1);
1793
- for (let node = 0, offset = 0; node < numberOfNodes; node += 1) {
1794
- for (let edge = edgeStart[node]; edge < edgeStart[node + 1]; edge += 1) {
1795
- edgeOffset[edge] = offset;
1796
- const end = offset + edgeLength[edge];
1797
- let hash = 5381;
1798
- for (let i = end - 1; i >= offset; i -= 1) {
1799
- hash = hash * 33 ^ labelText.charCodeAt(i);
1800
- }
1801
- edgeHash[edge] = hash >>> 0;
1802
- if (edgeLength[edge] === 1 && labelText.charCodeAt(offset) === 42) {
1803
- wildcardEdge[node] = edge;
1804
- }
1805
- offset = end;
1806
- }
1807
- }
1808
- var matchNode = -1;
1809
- var matchStart = 0;
1810
- var matchEnd = 0;
1811
- function labelEquals(edge, hostname, start, length) {
1812
- if (edgeLength[edge] !== length) {
1813
- return false;
1814
- }
1815
- const offset = edgeOffset[edge];
1816
- for (let i = 0; i < length; i += 1) {
1817
- if (labelText.charCodeAt(offset + i) !== hostname.charCodeAt(start + i)) {
1818
- return false;
1819
- }
1820
- }
1821
- return true;
1822
- }
1823
- function findEdge(node, hash, hostname, start, length) {
1824
- let lo = edgeStart[node];
1825
- let hi = edgeStart[node + 1];
1826
- while (lo < hi) {
1827
- const mid = lo + hi >>> 1;
1828
- const value = edgeHash[mid];
1829
- if (value < hash) {
1830
- lo = mid + 1;
1831
- } else if (value > hash) {
1832
- hi = mid;
1833
- } else {
1834
- for (let e = mid; e >= lo && edgeHash[e] === hash; e -= 1) {
1835
- if (labelEquals(e, hostname, start, length))
1836
- return e;
1837
- }
1838
- for (let e = mid + 1; e < hi && edgeHash[e] === hash; e += 1) {
1839
- if (labelEquals(e, hostname, start, length))
1840
- return e;
1841
- }
1842
- return -1;
1843
- }
1844
- }
1845
- return -1;
1846
- }
1847
- function walk(hostname, root, allowedMask) {
1848
- let node = root;
1849
- let end = hostname.length;
1850
- let hash = 5381;
1851
- matchNode = -1;
1852
- for (let i = hostname.length - 1; i >= 0; i -= 1) {
1853
- const code = hostname.charCodeAt(i);
1854
- if (code === 46) {
1855
- const start = i + 1;
1856
- let edge2 = findEdge(node, hash >>> 0, hostname, start, end - start);
1857
- if (edge2 === -1) {
1858
- edge2 = wildcardEdge[node];
1859
- }
1860
- if (edge2 === -1) {
1861
- return matchNode !== -1;
1862
- }
1863
- node = edgeChild[edge2];
1864
- if ((nodeFlags[node] & allowedMask) !== 0) {
1865
- matchNode = node;
1866
- matchStart = start;
1867
- matchEnd = end;
1868
- }
1869
- end = i;
1870
- hash = 5381;
1871
- } else {
1872
- hash = hash * 33 ^ code;
1873
- }
1874
- }
1875
- let edge = findEdge(node, hash >>> 0, hostname, 0, end);
1876
- if (edge === -1) {
1877
- edge = wildcardEdge[node];
1878
- }
1879
- if (edge !== -1) {
1880
- node = edgeChild[edge];
1881
- if ((nodeFlags[node] & allowedMask) !== 0) {
1882
- matchNode = node;
1883
- matchStart = 0;
1884
- matchEnd = end;
1885
- }
1886
- }
1887
- return matchNode !== -1;
1888
- }
1889
- function suffixLookup(hostname, options, out) {
1890
- if (fast_path_default(hostname, options, out)) {
1891
- return;
1892
- }
1893
- const allowedMask = (options.allowPrivateDomains ? 2 : 0) | (options.allowIcannDomains ? 1 : 0);
1894
- if (walk(hostname, exceptionsRoot, allowedMask)) {
1895
- out.isIcann = (nodeFlags[matchNode] & 1) !== 0;
1896
- out.isPrivate = (nodeFlags[matchNode] & 2) !== 0;
1897
- out.publicSuffix = hostname.slice(matchEnd + 1);
1898
- return;
1899
- }
1900
- if (walk(hostname, rulesRoot, allowedMask)) {
1901
- out.isIcann = (nodeFlags[matchNode] & 1) !== 0;
1902
- out.isPrivate = (nodeFlags[matchNode] & 2) !== 0;
1903
- out.publicSuffix = hostname.slice(matchStart);
1904
- return;
1905
- }
1906
- out.isIcann = false;
1907
- out.isPrivate = false;
1908
- const lastDot = hostname.lastIndexOf(".");
1909
- out.publicSuffix = lastDot === -1 ? hostname : hostname.slice(lastDot + 1);
1910
- }
1911
-
1912
- // ../../node_modules/.pnpm/tldts@7.4.15/node_modules/tldts/dist/es6/index.js
1913
- var RESULT = getEmptyResult();
1914
- function parse(url, options) {
1915
- return parseImpl(url, 5, suffixLookup, options, getEmptyResult());
1916
- }
1917
- function getPublicSuffix(url, options) {
1918
- resetResult(RESULT);
1919
- return parseImpl(url, 2, suffixLookup, options, RESULT).publicSuffix;
1920
- }
1921
-
1922
- // ../api/src/ads-google/criteria.ts
1923
- import { z as z3 } from "zod";
1924
- var AGE_RANGES = [
1925
- "AGE_RANGE_18_24",
1926
- "AGE_RANGE_25_34",
1927
- "AGE_RANGE_35_44",
1928
- "AGE_RANGE_45_54",
1929
- "AGE_RANGE_55_64",
1930
- "AGE_RANGE_65_UP",
1931
- "AGE_RANGE_UNDETERMINED"
1932
- ];
1933
- var GENDERS = ["MALE", "FEMALE", "UNDETERMINED"];
1934
- var PARENTAL_STATUSES = ["PARENT", "NOT_A_PARENT", "UNDETERMINED"];
1935
- var INCOME_RANGES = [
1936
- "INCOME_RANGE_0_50",
1937
- "INCOME_RANGE_50_60",
1938
- "INCOME_RANGE_60_70",
1939
- "INCOME_RANGE_70_80",
1940
- "INCOME_RANGE_80_90",
1941
- "INCOME_RANGE_90_UP",
1942
- "INCOME_RANGE_UNDETERMINED"
1943
- ];
1944
- var BRAND_SUITABILITY_LABELS = [
1945
- "BRAND_SUITABILITY_CONTENT_FOR_FAMILIES",
1946
- "BRAND_SUITABILITY_GAMES_FIGHTING",
1947
- "BRAND_SUITABILITY_GAMES_MATURE",
1948
- "BRAND_SUITABILITY_HEALTH_SENSITIVE",
1949
- "BRAND_SUITABILITY_HEALTH_SOURCE_UNDETERMINED",
1950
- "BRAND_SUITABILITY_NEWS_RECENT",
1951
- "BRAND_SUITABILITY_NEWS_SENSITIVE",
1952
- "BRAND_SUITABILITY_NEWS_SOURCE_NOT_FEATURED",
1953
- "BRAND_SUITABILITY_POLITICS",
1954
- "BRAND_SUITABILITY_RELIGION"
1955
- ];
1956
- var CONTENT_LABELS = [
1957
- "SEXUALLY_SUGGESTIVE",
1958
- "BELOW_THE_FOLD",
1959
- "PARKED_DOMAIN",
1960
- "JUVENILE",
1961
- "PROFANITY",
1962
- "TRAGEDY",
1963
- "VIDEO",
1964
- "VIDEO_RATING_DV_G",
1965
- "VIDEO_RATING_DV_PG",
1966
- "VIDEO_RATING_DV_T",
1967
- "VIDEO_RATING_DV_MA",
1968
- "VIDEO_NOT_YET_RATED",
1969
- "EMBEDDED_VIDEO",
1970
- "LIVE_STREAMING_VIDEO",
1971
- "SOCIAL_ISSUES",
1972
- ...BRAND_SUITABILITY_LABELS
1973
- ];
1974
- var ACCOUNT_ONLY_CONTENT_LABELS = new Set(BRAND_SUITABILITY_LABELS);
1975
- var CAMPAIGN_ONLY_CONTENT_LABELS = /* @__PURE__ */ new Set(["VIDEO"]);
1976
- var PROXIMITY_RADIUS_UNITS = ["KILOMETERS", "MILES"];
1977
- var WEBPAGE_OPERANDS = ["URL", "CATEGORY", "PAGE_TITLE", "PAGE_CONTENT", "CUSTOM_LABEL"];
1978
- var WEBPAGE_OPERATORS = ["EQUALS", "CONTAINS"];
1979
- var SCHEDULE_MINUTES = ["ZERO", "FIFTEEN", "THIRTY", "FORTY_FIVE"];
1980
- var refSchema = z3.union([
1981
- z3.string().regex(RESOURCE_NAME_REGEX, "expected a customers/\u2026/\u2026/\u2026 resource name"),
1982
- z3.string().regex(NUMERIC_ID_REGEX, "expected a numeric id"),
1983
- z3.string().regex(TEMP_REF_REGEX, "expected a g_temp_* reference")
1984
- ]);
1985
- var existingRefSchema = z3.union([
1986
- z3.string().regex(RESOURCE_NAME_REGEX, "expected a customers/\u2026/\u2026/\u2026 resource name"),
1987
- z3.string().regex(NUMERIC_ID_REGEX, "expected a numeric id")
1988
- ]);
1989
- function constantSchema(collection) {
1990
- return z3.union([z3.string().regex(new RegExp(`^${collection}/\\d+$`)), z3.string().regex(NUMERIC_ID_REGEX)]);
1991
- }
1992
- var bidModifierSchema = z3.number().min(0).max(10).refine((v) => v === 0 || v >= 0.1, {
1993
- message: "bid modifier must be 0 (exclude the device) or between 0.1 and 10.0"
1994
- });
1995
- function isPlacementSite(url) {
1996
- const host = parse(url);
1997
- return !/\s/.test(url) && host.isIcann === true && host.domain !== null;
1998
- }
1999
- var criterionBidModifierSchema = z3.number().min(0.1, "bid modifier must be between 0.1 and 10.0 \u2014 only a device takes 0").max(10);
2000
- var bid = { bidModifier: criterionBidModifierSchema.optional() };
2001
- var deviceBid = { bidModifier: bidModifierSchema.optional() };
2002
- var criterionSchemas = [
2003
- z3.strictObject({
2004
- criterionType: z3.literal("location"),
2005
- geoTargetConstant: z3.union([z3.string().regex(GEO_TARGET_CONSTANT_REGEX), z3.string().regex(NUMERIC_ID_REGEX)]),
2006
- ...bid
2007
- }),
2008
- z3.strictObject({
2009
- criterionType: z3.literal("language"),
2010
- languageConstant: z3.union([z3.string().regex(LANGUAGE_CONSTANT_REGEX), z3.string().regex(NUMERIC_ID_REGEX)])
2011
- }),
2012
- z3.strictObject({
2013
- criterionType: z3.literal("adSchedule"),
2014
- dayOfWeek: z3.enum(DAYS_OF_WEEK),
2015
- startHour: z3.number().int().min(0).max(23),
2016
- startMinute: z3.enum(SCHEDULE_MINUTES).default("ZERO"),
2017
- endHour: z3.number().int().min(0).max(24),
2018
- endMinute: z3.enum(SCHEDULE_MINUTES).default("ZERO"),
2019
- ...bid
2020
- }),
2021
- z3.strictObject({ criterionType: z3.literal("device"), device: z3.enum(DEVICE_TYPES), ...deviceBid }),
2022
- /** A radius around a point (latitude/longitude in degrees) or around an address. */
2023
- z3.strictObject({
2024
- criterionType: z3.literal("proximity"),
2025
- latitude: z3.number().min(-90).max(90).optional(),
2026
- longitude: z3.number().min(-180).max(180).optional(),
2027
- address: z3.strictObject({
2028
- streetAddress: z3.string().min(1).optional(),
2029
- cityName: z3.string().min(1).optional(),
2030
- postalCode: z3.string().min(1).optional(),
2031
- countryCode: z3.string().length(2)
2032
- }).optional(),
2033
- radius: z3.number().positive(),
2034
- radiusUnits: z3.enum(PROXIMITY_RADIUS_UNITS),
2035
- ...bid
2036
- }),
2037
- /** A website, app or YouTube page the ads show on (`example.com`, `example.com/news`). */
2038
- z3.strictObject({
2039
- criterionType: z3.literal("placement"),
2040
- url: z3.string().min(1).refine(isPlacementSite, {
2041
- error: 'a placement is a website address with a real domain ending, like example.com or example.com/news \u2014 Google refuses any other ("Placement URL has wrong format")'
2042
- }),
2043
- ...bid
2044
- }),
2045
- /** A mobile app by Google's id: `1-<appStoreId>` for iOS, `2-<packageName>` for Android. */
2046
- z3.strictObject({
2047
- criterionType: z3.literal("mobileApp"),
2048
- appId: z3.string().regex(/^[12]-.+$/, "appId is 1-<App Store id> for iOS or 2-<package name> for Android"),
2049
- ...bid
2050
- }),
2051
- z3.strictObject({
2052
- criterionType: z3.literal("mobileAppCategory"),
2053
- mobileAppCategoryConstant: constantSchema("mobileAppCategoryConstants"),
2054
- ...bid
2055
- }),
2056
- z3.strictObject({ criterionType: z3.literal("youtubeChannel"), channelId: z3.string().min(1), ...bid }),
2057
- z3.strictObject({ criterionType: z3.literal("youtubeVideo"), videoId: z3.string().min(1), ...bid }),
2058
- z3.strictObject({ criterionType: z3.literal("topic"), topicConstant: constantSchema("topicConstants"), ...bid }),
2059
- z3.strictObject({ criterionType: z3.literal("ageRange"), ageRange: z3.enum(AGE_RANGES), ...bid }),
2060
- z3.strictObject({ criterionType: z3.literal("gender"), gender: z3.enum(GENDERS), ...bid }),
2061
- z3.strictObject({ criterionType: z3.literal("parentalStatus"), parentalStatus: z3.enum(PARENTAL_STATUSES), ...bid }),
2062
- z3.strictObject({ criterionType: z3.literal("incomeRange"), incomeRange: z3.enum(INCOME_RANGES), ...bid }),
2063
- z3.strictObject({ criterionType: z3.literal("ipBlock"), ipAddress: z3.string().min(1) }),
2064
- z3.strictObject({ criterionType: z3.literal("contentLabel"), contentLabel: z3.enum(CONTENT_LABELS) }),
2065
- z3.strictObject({ criterionType: z3.literal("carrier"), carrierConstant: constantSchema("carrierConstants") }),
2066
- z3.strictObject({
2067
- criterionType: z3.literal("operatingSystem"),
2068
- operatingSystemVersionConstant: constantSchema("operatingSystemVersionConstants")
2069
- }),
2070
- /** Pages of the advertiser's own site, for Dynamic Search Ads targeting or URL exclusions. */
2071
- z3.strictObject({
2072
- criterionType: z3.literal("webpage"),
2073
- name: z3.string().min(1).max(255),
2074
- conditions: z3.array(
2075
- z3.strictObject({
2076
- operand: z3.enum(WEBPAGE_OPERANDS),
2077
- operator: z3.enum(WEBPAGE_OPERATORS).optional(),
2078
- argument: z3.string().min(1)
2079
- })
2080
- ).min(1).max(3)
2081
- }),
2082
- /** A BRANDS shared set (`keyword-lists create --type BRANDS`), attached as an inclusion or exclusion. */
2083
- z3.strictObject({ criterionType: z3.literal("brandList"), sharedSet: refSchema }),
2084
- /** A member of a BRANDS list: Google's brand entity id (`/g/11txzrylsb`, from `baker ads google brands`). */
2085
- z3.strictObject({ criterionType: z3.literal("brand"), entityId: z3.string().regex(/^\/[a-z]\/\w+$/) }),
2086
- z3.strictObject({ criterionType: z3.literal("userList"), userList: refSchema, ...bid }),
2087
- z3.strictObject({ criterionType: z3.literal("userInterest"), userInterest: existingRefSchema, ...bid }),
2088
- z3.strictObject({ criterionType: z3.literal("customAudience"), customAudience: existingRefSchema, ...bid }),
2089
- /** A Demand Gen ad group's one combined audience (the `audiences/{id}` resource). */
2090
- z3.strictObject({ criterionType: z3.literal("audience"), audience: existingRefSchema }),
2091
- /** An ACCOUNT_LEVEL_NEGATIVE_KEYWORDS list applied to the whole account (account exclusions only). */
2092
- z3.strictObject({ criterionType: z3.literal("negativeKeywordList"), sharedSet: refSchema }),
2093
- /** A Performance Max search theme (asset-group signal only). */
2094
- z3.strictObject({ criterionType: z3.literal("searchTheme"), text: z3.string().min(1).max(80) })
2095
- ];
2096
- var LOCATION_GROUP_MESSAGE = 'Targeting near business locations (a location group) needs the account\'s location assets, which Baker cannot stage yet. Target a radius instead \u2014 `criterionType: "proximity"` with an address or latitude/longitude and a radius \u2014 or tell the user to add the business locations in Google Ads; carry on with the rest of the job.';
2097
- var RETIRED_CRITERION_TYPES = {
2098
- locationGroup: LOCATION_GROUP_MESSAGE,
2099
- keyword: "Keywords are not criteria here: target them with `baker ads google keywords add`, exclude them with `baker ads google negative-keywords add`, or put them in a list with `baker ads google keyword-lists add`."
2100
- };
2101
- var criterionSpecSchema = z3.discriminatedUnion("criterionType", criterionSchemas, {
2102
- error: (issue) => {
2103
- const input = issue.input;
2104
- const type = typeof input?.criterionType === "string" ? input.criterionType : void 0;
2105
- return type ? RETIRED_CRITERION_TYPES[type] : void 0;
2106
- }
2107
- });
2108
- var CRITERION_TYPES = criterionSchemas.map((schema) => schema.shape.criterionType.value);
2109
- function criterionSpecIssues(spec) {
2110
- if (spec.criterionType === "adSchedule" && spec.endHour === 24 && spec.endMinute !== "ZERO") {
2111
- return [{ path: ["endMinute"], message: "endHour 24 (midnight) cannot have a non-zero endMinute" }];
2112
- }
2113
- if (spec.criterionType === "proximity") {
2114
- const point = spec.latitude !== void 0 || spec.longitude !== void 0;
2115
- const both = spec.latitude !== void 0 && spec.longitude !== void 0;
2116
- if (point === (spec.address !== void 0) || point && !both) {
2117
- return [
2118
- {
2119
- path: [],
2120
- message: "a radius is around either a point (latitude AND longitude) or an address (countryCode plus street, city or postal code) \u2014 give exactly one"
2121
- }
2122
- ];
2123
- }
2124
- }
2125
- return [];
2126
- }
2127
- var BOTH = ["target", "exclude"];
2128
- var TARGET = ["target"];
2129
- var EXCLUDE = ["exclude"];
2130
- var PLACEMENT_LISTS = ["NEGATIVE_PLACEMENTS"];
2131
- var CRITERION_PLACEMENTS = {
2132
- location: { label: "location", campaign: BOTH, adGroup: BOTH },
2133
- language: { label: "language", campaign: TARGET, adGroup: TARGET },
2134
- adSchedule: { label: "ad schedule", campaign: TARGET },
2135
- // A device is never excluded: a bid adjustment of 0 is how it stops serving.
2136
- device: { label: "device", campaign: TARGET },
2137
- proximity: { label: "radius", campaign: TARGET },
2138
- placement: { label: "placement", campaign: EXCLUDE, adGroup: BOTH, account: true, sharedSet: PLACEMENT_LISTS },
2139
- mobileApp: { label: "app", campaign: EXCLUDE, adGroup: BOTH, account: true, sharedSet: PLACEMENT_LISTS },
2140
- mobileAppCategory: {
2141
- label: "app category",
2142
- campaign: EXCLUDE,
2143
- adGroup: BOTH,
2144
- account: true,
2145
- sharedSet: PLACEMENT_LISTS
2146
- },
2147
- youtubeChannel: {
2148
- label: "YouTube channel",
2149
- campaign: EXCLUDE,
2150
- adGroup: BOTH,
2151
- account: true,
2152
- sharedSet: PLACEMENT_LISTS
2153
- },
2154
- youtubeVideo: {
2155
- label: "YouTube video",
2156
- campaign: EXCLUDE,
2157
- adGroup: BOTH,
2158
- account: true,
2159
- sharedSet: PLACEMENT_LISTS
2160
- },
2161
- topic: { label: "topic", campaign: EXCLUDE, adGroup: BOTH },
2162
- ageRange: { label: "age", campaign: EXCLUDE, adGroup: BOTH },
2163
- gender: { label: "gender", campaign: EXCLUDE, adGroup: BOTH },
2164
- parentalStatus: { label: "parental status", campaign: EXCLUDE, adGroup: BOTH },
2165
- incomeRange: { label: "household income", campaign: EXCLUDE, adGroup: BOTH },
2166
- ipBlock: { label: "IP address", campaign: EXCLUDE, account: true },
2167
- contentLabel: { label: "content type", campaign: EXCLUDE, account: true },
2168
- carrier: { label: "mobile carrier", campaign: TARGET },
2169
- operatingSystem: { label: "operating system", campaign: TARGET },
2170
- webpage: { label: "web pages", campaign: EXCLUDE, adGroup: BOTH },
2171
- brandList: { label: "brand list", campaign: BOTH, adGroup: TARGET },
2172
- brand: { label: "brand", sharedSet: ["BRANDS"] },
2173
- negativeKeywordList: { label: "account negative keyword list", account: true },
2174
- userList: { label: "audience list", campaign: BOTH, adGroup: BOTH },
2175
- userInterest: { label: "interest", campaign: BOTH, adGroup: BOTH },
2176
- customAudience: { label: "custom segment", campaign: BOTH, adGroup: BOTH },
2177
- audience: { label: "audience", adGroup: TARGET, assetGroup: true },
2178
- searchTheme: { label: "search theme", assetGroup: true }
2179
- };
2180
- var AUDIENCE_SEGMENT_TYPES = /* @__PURE__ */ new Set([
2181
- "userList",
2182
- "userInterest",
2183
- "customAudience"
2184
- ]);
2185
- var AUDIENCE_SEGMENT_MESSAGE = "Audience lists, interests and custom segments go on a campaign or ad group with `baker ads google audiences attach` (`--user-list`, `--interest` or `--custom-segment`) \u2014 that command reads whether the parent narrows its reach to them (Targeting) or only adjusts bids (Observation) and stages the switch. Use it instead.";
2186
- var LEVEL_WORDS = {
2187
- campaign: "a campaign",
2188
- adGroup: "an ad group",
2189
- account: "the account's exclusions",
2190
- sharedSet: "a list",
2191
- assetGroup: "an asset group signal"
2192
- };
2193
- var PAST = { target: "targeted", exclude: "excluded" };
2194
- function acceptedAt(type) {
2195
- const placement = CRITERION_PLACEMENTS[type];
2196
- const where = [];
2197
- for (const level of ["campaign", "adGroup"]) {
2198
- const polarities = placement[level];
2199
- if (polarities) {
2200
- where.push(
2201
- `${polarities.length === 2 ? "targeted or excluded" : PAST[polarities[0] ?? "target"]} on ${LEVEL_WORDS[level]}`
2202
- );
2203
- }
2204
- }
2205
- if (placement.account) {
2206
- where.push("excluded account-wide");
2207
- }
2208
- if (placement.sharedSet) {
2209
- where.push(`a member of a ${placement.sharedSet.join("/")} list`);
2210
- }
2211
- if (placement.assetGroup) {
2212
- where.push("an asset group signal");
2213
- }
2214
- return where.join(", ");
2215
- }
2216
- function criterionLevelIssue(spec, level, options = {}) {
2217
- const type = spec.criterionType;
2218
- const placement = CRITERION_PLACEMENTS[type];
2219
- const audience = audienceRouteIssue(type, level, options.viaAudiences === true);
2220
- if (audience) {
2221
- return audience;
2222
- }
2223
- const polarity = options.negative ? "exclude" : "target";
2224
- if (levelAllows(placement, level, polarity)) {
2225
- return spec.criterionType === "contentLabel" ? contentLabelLevelIssue(spec.contentLabel, level) : void 0;
2226
- }
2227
- if (type === "device" && options.negative) {
2228
- return "A device is never excluded \u2014 stage it with bidModifier 0 to stop the ads showing on it.";
2229
- }
2230
- const what = withArticle(placement.label);
2231
- const where = level === "account" || level === "sharedSet" ? `put ${what} in ${LEVEL_WORDS[level]}` : `${polarity} ${what} on ${LEVEL_WORDS[level]}`;
2232
- return `Google's API cannot ${where} \u2014 ${what} can be ${acceptedAt(type)}.`;
2233
- }
2234
- function withArticle(label) {
2235
- return `${/^[aeiou]/i.test(label) ? "an" : "a"} ${label}`;
2236
- }
2237
- function audienceRouteIssue(type, level, viaAudiences) {
2238
- if (level !== "campaign" && level !== "adGroup" || AUDIENCE_SEGMENT_TYPES.has(type) === viaAudiences) {
2239
- return void 0;
2240
- }
2241
- return viaAudiences ? `\`audiences attach\` takes an audience list, interest or custom segment \u2014 a ${CRITERION_PLACEMENTS[type].label} is a criterion: stage it with \`baker ads google ${level === "campaign" ? "campaign" : "ad-group"}-criteria add\`.` : AUDIENCE_SEGMENT_MESSAGE;
2242
- }
2243
- function levelAllows(placement, level, polarity) {
2244
- switch (level) {
2245
- case "campaign":
2246
- case "adGroup":
2247
- return (placement[level] ?? []).includes(polarity);
2248
- case "account":
2249
- return placement.account === true;
2250
- case "assetGroup":
2251
- return placement.assetGroup === true;
2252
- default:
2253
- return (placement.sharedSet?.length ?? 0) > 0;
2254
- }
2255
- }
2256
- function contentLabelLevelIssue(label, level) {
2257
- if (level === "campaign" && ACCOUNT_ONLY_CONTENT_LABELS.has(label)) {
2258
- return `${label} is excluded account-wide only (Google answers CANNOT_EXCLUDE_CRITERION on a campaign) \u2014 stage it with \`baker ads google account-exclusions add\`.`;
2259
- }
2260
- if (level === "account" && CAMPAIGN_ONLY_CONTENT_LABELS.has(label)) {
2261
- return `${label} is excluded per campaign only (Google answers CANNOT_EXCLUDE_CRITERION account-wide) \u2014 stage it with \`baker ads google campaign-criteria add\`.`;
2262
- }
2263
- return void 0;
2264
- }
2265
- function criterionBidIssue(spec, negative) {
2266
- if (!("bidModifier" in spec) || spec.bidModifier === void 0) {
2267
- return void 0;
2268
- }
2269
- return negative ? "An exclusion carries no bid adjustment \u2014 Google refuses one on a negative criterion (FIELD_INCOMPATIBLE_WITH_NEGATIVE_TARGETING). Drop bidModifier." : void 0;
2270
- }
2271
- var AUDIENCES = ["userList", "userInterest", "customAudience"];
2272
- var PLACEMENT_TYPES = ["placement", "mobileApp", "mobileAppCategory", "youtubeChannel", "youtubeVideo"];
2273
- var SEARCH_DEMOGRAPHICS = ["ageRange", "gender", "incomeRange"];
2274
- var DEMOGRAPHICS = ["ageRange", "gender", "parentalStatus", "incomeRange"];
2275
- var CAMPAIGN_REACH = ["location", "language", "adSchedule", "device", "proximity"];
2276
- var BID_AT_CAMPAIGN = ["location", "adSchedule", "device", "proximity"];
2277
- var PHONE_DEVICES = ["MOBILE", "TABLET", "DESKTOP"];
2278
- var CRITERIA_BY_CHANNEL = {
2279
- SEARCH: {
2280
- campaign: {
2281
- target: [...CAMPAIGN_REACH, ...AUDIENCES, "brandList"],
2282
- exclude: [
2283
- "location",
2284
- ...SEARCH_DEMOGRAPHICS,
2285
- "ipBlock",
2286
- "contentLabel",
2287
- ...PLACEMENT_TYPES,
2288
- "webpage",
2289
- ...AUDIENCES,
2290
- "brandList"
2291
- ],
2292
- bid: [...BID_AT_CAMPAIGN, ...AUDIENCES]
2293
- },
2294
- adGroup: {
2295
- target: [...SEARCH_DEMOGRAPHICS, ...AUDIENCES, "webpage", "location", "brandList"],
2296
- exclude: [...SEARCH_DEMOGRAPHICS, ...PLACEMENT_TYPES, ...AUDIENCES, "webpage"],
2297
- bid: [...SEARCH_DEMOGRAPHICS, ...AUDIENCES]
2298
- },
2299
- conditional: {
2300
- "campaign:target:brandList": "aiMax",
2301
- "campaign:exclude:brandList": "aiMax",
2302
- "adGroup:target:location": "aiMax",
2303
- "adGroup:target:brandList": "aiMax",
2304
- "adGroup:target:webpage": "dynamicAdGroup",
2305
- "adGroup:exclude:webpage": "dynamicAdGroup"
2306
- },
2307
- adGroupDevices: PHONE_DEVICES
2308
- },
2309
- DISPLAY: {
2310
- campaign: {
2311
- target: [...CAMPAIGN_REACH, "carrier", "operatingSystem"],
2312
- exclude: ["location", ...DEMOGRAPHICS, "ipBlock", "contentLabel", ...PLACEMENT_TYPES, "topic", ...AUDIENCES],
2313
- bid: BID_AT_CAMPAIGN
2314
- },
2315
- adGroup: {
2316
- target: [...PLACEMENT_TYPES, "topic", ...DEMOGRAPHICS, ...AUDIENCES],
2317
- exclude: [...PLACEMENT_TYPES, "topic", ...DEMOGRAPHICS, ...AUDIENCES],
2318
- bid: [...PLACEMENT_TYPES, "topic", ...DEMOGRAPHICS, ...AUDIENCES]
2319
- },
2320
- adGroupDevices: ["MOBILE", "TABLET", "DESKTOP", "CONNECTED_TV"]
2321
- },
2322
- DEMAND_GEN: {
2323
- campaign: {
2324
- target: ["adSchedule", "device", "carrier", "operatingSystem"],
2325
- exclude: ["ipBlock", ...PLACEMENT_TYPES, "topic"],
2326
- bid: ["adSchedule", "device"]
2327
- },
2328
- adGroup: {
2329
- target: ["location", "language", ...PLACEMENT_TYPES, "topic", "audience"],
2330
- exclude: ["location", ...PLACEMENT_TYPES, "topic"],
2331
- bid: []
2332
- }
2333
- },
2334
- PERFORMANCE_MAX: {
2335
- campaign: {
2336
- target: CAMPAIGN_REACH,
2337
- exclude: ["location", "ageRange", "gender", "webpage", "brandList", "userList"],
2338
- bid: BID_AT_CAMPAIGN
2339
- }
2340
- },
2341
- SHOPPING: {
2342
- campaign: {
2343
- target: ["location", "adSchedule", "device", "proximity", "brandList", ...AUDIENCES],
2344
- exclude: ["location", "ipBlock", "webpage", "brandList", ...AUDIENCES],
2345
- bid: [...BID_AT_CAMPAIGN, ...AUDIENCES]
2346
- },
2347
- adGroup: { target: AUDIENCES, exclude: AUDIENCES, bid: AUDIENCES },
2348
- adGroupDevices: PHONE_DEVICES
2349
- }
2350
- };
2351
-
2352
- // ../api/src/ads-google/structured-snippet-headers.ts
2353
- var STRUCTURED_SNIPPET_HEADERS_EN = [
2354
- "Brands",
2355
- "Amenities",
2356
- "Styles",
2357
- "Types",
2358
- "Destinations",
2359
- "Services",
2360
- "Courses",
2361
- "Neighborhoods",
2362
- "Shows",
2363
- "Insurance coverage",
2364
- "Degree programs",
2365
- "Featured hotels",
2366
- "Models"
2367
- ];
2368
- var STRUCTURED_SNIPPET_HEADERS_LOCALIZED = [
2369
- "Aanbevolen hotels",
2370
- "Acara",
2371
- "Apdro\u0161in\u0101\u0161ana",
2372
- "Apkaimes",
2373
- "Arredores",
2374
- "Asigurare",
2375
- "Asseguran\xE7a",
2376
- "Ausstattung",
2377
- "Automerkit",
2378
- "Bairros",
2379
- "Barrios",
2380
- "Barris",
2381
- "Bestemmingen",
2382
- "Biztos\xEDt\xE1si m\xF3dozat",
2383
- "Blagovne znamke",
2384
- "Brand",
2385
- "Br\xE4ndid",
2386
- "Br\xE4ndit",
2387
- "Buurten",
2388
- "Cakupan asuransi",
2389
- "Carreras universitarias",
2390
- "Cartiere",
2391
- "Ch\u01B0\u01A1ng tr\xECnh",
2392
- "Cilji",
2393
- "Cobertura de seguro",
2394
- "Cobertura do seguro",
2395
- "Comodidades",
2396
- "Coperture assicurativa",
2397
- "Corsi",
2398
- "Corsi di laurea",
2399
- "Cours",
2400
- "Couverture d'assurance",
2401
- "Cursos",
2402
- "Cursuri",
2403
- "Cursussen",
2404
- "C\xEDle",
2405
- "C\u1EA5p b\u1EB1ng",
2406
- "Degree programmes",
2407
- "Dekking",
2408
- "Design",
2409
- "Destinacions",
2410
- "Destinasi",
2411
- "Destinasjoner",
2412
- "Destinationer",
2413
- "Destinazioni",
2414
- "Destina\u021Bii",
2415
- "Destinos",
2416
- "Destin\xE1cie",
2417
- "Dienstleistungen",
2418
- "Diplomaprogramok",
2419
- "Dot\u0103ri",
2420
- "Draudimo apr\u0117ptis",
2421
- "Dzielnice",
2422
- "D\u1ECBch v\u1EE5",
2423
- "Emisije",
2424
- "Emisiuni",
2425
- "Espect\xE1culos",
2426
- "Estilos",
2427
- "Estils",
2428
- "Faciliteter",
2429
- "Fasilitas",
2430
- "Fasiliteter",
2431
- "Forsikringsdekning",
2432
- "Forsikringsd\xE6kning",
2433
- "F\xF6rs\xE4kringstyper",
2434
- "Galam\u0113r\u0137i",
2435
- "Gaya",
2436
- "Hizmetler",
2437
- "Hotel consigliati",
2438
- "Hotel ditampilkan",
2439
- "Hotel pilihan",
2440
- "Hoteles destacados",
2441
- "Hotels destacats",
2442
- "Hoteluri prezentate",
2443
- "Hot\xE9is em destaque",
2444
- "Istaknuti hoteli",
2445
- "Itinatampok na hotel",
2446
- "Jenama",
2447
- "Jenis",
2448
- "Kaupunginosat",
2449
- "Kawasan",
2450
- "Kejiranan",
2451
- "Kemudahan",
2452
- "Kh\xE1ch s\u1EA1n n\u1ED5i b\u1EADt",
2453
- "Kh\xF3a h\u1ECDc",
2454
- "Kiemelt sz\xE1llod\xE1k",
2455
- "Kierunki studi\xF3w",
2456
- "Kindlustuskaitse",
2457
- "Ki\u1EC3u",
2458
- "Kohteet",
2459
- "Kraadi\xF5ppeprogrammid",
2460
- "Kritje zavarovanj",
2461
- "Kurs",
2462
- "Kursai",
2463
- "Kurse",
2464
- "Kurser",
2465
- "Kursi",
2466
- "Kurslar",
2467
- "Kurssit",
2468
- "Kursus",
2469
- "Kursused",
2470
- "Kursy",
2471
- "Kurzy",
2472
- "Laidos",
2473
- "Layanan",
2474
- "Licenciaturas",
2475
- "Liputan insurans",
2476
- "Lisans programlar\u0131",
2477
- "Lis\xE4palvelut",
2478
- "Lokalomr\xE5der",
2479
- "Lo\u1EA1i",
2480
- "Mahalleler",
2481
- "Marcas",
2482
- "Markalar",
2483
- "Marken",
2484
- "Marki",
2485
- "Marques",
2486
- "Mata pelajaran",
2487
- "Merek",
2488
- "Merken",
2489
- "Merkevarer",
2490
- "Mga Amenity",
2491
- "Mga Brand",
2492
- "Mga Destinasyon",
2493
- "Mga Istilo",
2494
- "Mga Komunidad",
2495
- "Mga Kurso",
2496
- "Mga Modelo",
2497
- "Mga Palabas",
2498
- "Mga Serbisyo",
2499
- "Mga Uri",
2500
- "Mga degree program",
2501
- "Miejsca",
2502
- "Model",
2503
- "Modele",
2504
- "Modeli",
2505
- "Modeliai",
2506
- "Modelle",
2507
- "Modellek",
2508
- "Modellen",
2509
- "Modeller",
2510
- "Modelli",
2511
- "Modelos",
2512
- "Modely",
2513
- "Mode\u013Ci",
2514
- "Mod\xE8les",
2515
- "Moksliniai laipsniai",
2516
- "Mudelid",
2517
- "Mugavusteenused",
2518
- "M\xE1rk\xE1k",
2519
- "M\u0103rci",
2520
- "M\u0171sorok",
2521
- "Nabolag",
2522
- "Nam\u0173 apylink\u0117s",
2523
- "Neighbourhoods",
2524
- "Oddaje",
2525
- "Odpor\xFA\u010Dan\xE9 hotely",
2526
- "Odredi\u0161ta",
2527
- "Oppiaineet",
2528
- "Osiguranje",
2529
- "Pakalpojumi",
2530
- "Palvelut",
2531
- "Paskirties vietos",
2532
- "Paslaugos",
2533
- "Patogumai",
2534
- "Perkhidmatan",
2535
- "Ph\u1EA1m vi b\u1EA3o hi\u1EC3m",
2536
- "Pied\u0101v\u0101t\u0101s viesn\u012Bcas",
2537
- "Poistenie",
2538
- "Poji\u0161t\u011Bn\xED",
2539
- "Polecane hotele",
2540
- "Ponudba",
2541
- "Po\u0159ady",
2542
- "Predstavljeni hoteli",
2543
- "Preki\u0173 \u017Eenklai",
2544
- "Program",
2545
- "Program ijazah",
2546
- "Program sarjana",
2547
- "Programas",
2548
- "Programas de gradua\xE7\xE3o",
2549
- "Programe de studiu",
2550
- "Programes",
2551
- "Programlar",
2552
- "Programmer",
2553
- "Programmes d'\xE9tudes",
2554
- "Programmi",
2555
- "Programy",
2556
- "P\u0101rraides",
2557
- "Quartieri",
2558
- "Quartiers",
2559
- "Rancangan",
2560
- "Rel\xE1cie",
2561
- "Resm\xE5l",
2562
- "Robne marke",
2563
- "Saated ja etendused",
2564
- "Sadr\u017Eaji",
2565
- "Sakop ng insurance",
2566
- "Serien",
2567
- "Serier",
2568
- "Serveis",
2569
- "Serveis addicionals",
2570
- "Servicii",
2571
- "Servicios",
2572
- "Servicios adicionales",
2573
- "Servizi",
2574
- "Servi\xE7os",
2575
- "Show't",
2576
- "Sigorta kapsam\u0131",
2577
- "Sihtkohad",
2578
- "Si\u016Blomi vie\u0161bu\u010Diai",
2579
- "Slogi",
2580
- "Slu\u017Eby",
2581
- "Soovitatud hotellid",
2582
- "Soseske",
2583
- "Stiilid",
2584
- "Stijlen",
2585
- "Stilar",
2586
- "Stile",
2587
- "Stiler",
2588
- "Stili",
2589
- "Stiliai",
2590
- "Stiller",
2591
- "Stilovi",
2592
- "Stiluri",
2593
- "Storitve",
2594
- "Studieng\xE4nge",
2595
- "Studieprogramma's",
2596
- "Studijn\xED programy",
2597
- "Studijski programi",
2598
- "Studiju programmas",
2599
- "Style",
2600
- "Styly",
2601
- "St\xEDlusok",
2602
- "Sunulan olanaklar",
2603
- "Suositellut hotellit",
2604
- "Szolg\xE1ltat\xE1sok",
2605
- "S\xE9lection d'h\xF4tels",
2606
- "Tanfolyamok",
2607
- "Teenused",
2608
- "Te\u010Dajevi",
2609
- "Te\u010Daji",
2610
- "Th\u01B0\u01A1ng hi\u1EC7u",
2611
- "Tipai",
2612
- "Tipi",
2613
- "Tipos",
2614
- "Tipuri",
2615
- "Tipus",
2616
- "Titulacions",
2617
- "Ti\u1EC7n nghi",
2618
- "Tjenester",
2619
- "Tj\xE4nster",
2620
- "Typen",
2621
- "Typer",
2622
- "Typy",
2623
- "Tyylit",
2624
- "Tyypit",
2625
- "T\xEDpusok",
2626
- "T\xFCrler",
2627
- "T\xFC\xFCbid",
2628
- "Ubezpieczenia",
2629
- "Uddannelser",
2630
- "Udogodnienia",
2631
- "Udvalgte hoteller",
2632
- "Usluge",
2633
- "Us\u0142ugi",
2634
- "Utbildningsprogram",
2635
- "Utdanningsprogrammer",
2636
- "Utvalda hotell",
2637
- "Utvalgte hoteller",
2638
- "Vakuutukset",
2639
- "Varum\xE4rken",
2640
- "Veidi",
2641
- "Versicherungsleistung",
2642
- "Viertel",
2643
- "Voorzieningen",
2644
- "Vorgestellte Hotels",
2645
- "Vrste",
2646
- "Vybavenie",
2647
- "Vybaven\xED",
2648
- "Vybran\xE9 hotely",
2649
- "Vzdel\xE1vacie programy",
2650
- "V\xE1rosr\xE9szek",
2651
- "V\xF9ng l\xE2n c\u1EADn",
2652
- "Ziele",
2653
- "Zna\u010Dky",
2654
- "Zn\xE1m\xE9 oblasti",
2655
- "Z\u012Bmoli",
2656
- "destinasyonlar",
2657
- "\xC9missions",
2658
- "\xC9quipements",
2659
- "\xD6ne \xE7\u0131kan oteller",
2660
- "\xDAti c\xE9lok",
2661
- "\xDCmbruskonnad",
2662
- "\u010Cetvrti",
2663
- "\u0110i\u1EC3m \u0111\u1EBFn",
2664
- "\u0112rt\u012Bbas",
2665
- "\u0160tudijski programi",
2666
- "\u0160tvrte",
2667
- "\u0160t\xFDly",
2668
- "\u0391\u03C3\u03C6\u03B1\u03BB\u03B9\u03C3\u03C4\u03B9\u03BA\u03AE \u03BA\u03AC\u03BB\u03C5\u03C8\u03B7",
2669
- "\u0393\u03B5\u03B9\u03C4\u03BF\u03BD\u03B9\u03AD\u03C2",
2670
- "\u0395\u03BA\u03C0\u03BF\u03BC\u03C0\u03AD\u03C2",
2671
- "\u0395\u03C0\u03C9\u03BD\u03C5\u03BC\u03AF\u03B5\u03C2",
2672
- "\u039C\u03B1\u03B8\u03AE\u03BC\u03B1\u03C4\u03B1",
2673
- "\u039C\u03BF\u03BD\u03C4\u03AD\u03BB\u03B1",
2674
- "\u039E\u03B5\u03BD\u03BF\u03B4\u03BF\u03C7\u03B5\u03AF\u03B1",
2675
- "\u03A0\u03B1\u03C1\u03BF\u03C7\u03AD\u03C2",
2676
- "\u03A0\u03C1\u03BF\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03B1 \u03C0\u03C4\u03C5\u03C7\u03AF\u03C9\u03BD",
2677
- "\u03A0\u03C1\u03BF\u03BF\u03C1\u03B9\u03C3\u03BC\u03BF\u03AF",
2678
- "\u03A3\u03C4\u03C5\u03BB",
2679
- "\u03A4\u03CD\u03C0\u03BF\u03B9",
2680
- "\u03A5\u03C0\u03B7\u03C1\u03B5\u03C3\u03AF\u03B5\u03C2",
2681
- "\u0411\u0440\u0435\u043D\u0434\u0438",
2682
- "\u0411\u0440\u0435\u043D\u0434\u044B",
2683
- "\u0414\u0435\u0441\u0442\u0438\u043D\u0430\u0446\u0438\u0438",
2684
- "\u0417\u0430\u0441\u0442\u0440\u0430\u0445\u043E\u0432\u043A\u0430",
2685
- "\u0417\u0440\u0443\u0447\u043D\u043E\u0441\u0442\u0456",
2686
- "\u041A\u0432\u0430\u0440\u0442\u0430\u043B\u0438",
2687
- "\u041A\u0443\u0440\u0441\u0438",
2688
- "\u041A\u0443\u0440\u0441\u043E\u0432\u0435",
2689
- "\u041A\u0443\u0440\u0441\u044B",
2690
- "\u041C\u0430\u0440\u043A\u0438",
2691
- "\u041C\u0435\u0441\u0442\u0430",
2692
- "\u041C\u043E\u0434\u0435\u043B\u0438",
2693
- "\u041C\u043E\u0434\u0435\u043B\u0456",
2694
- "\u041C\u0456\u0441\u0446\u044F",
2695
- "\u041E\u0441\u0432\u0456\u0442\u043D\u0456 \u043F\u0440\u043E\u0433\u0440\u0430\u043C\u0438",
2696
- "\u041F\u043E\u0441\u043B\u0443\u0433\u0438",
2697
- "\u041F\u0440\u0435\u0434\u0430\u0432\u0430\u043D\u0438\u044F",
2698
- "\u041F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0435\u043D\u0438 \u0445\u043E\u0442\u0435\u043B\u0438",
2699
- "\u041F\u0440\u043E\u0433\u0440\u0430\u043C\u043C\u044B \u0432\u044B\u0441\u0448\u0435\u0433\u043E \u043E\u0431\u0440\u0430\u0437\u043E\u0432\u0430\u043D\u0438\u044F",
2700
- "\u0420\u0430\u0439\u043E\u043D\u044B",
2701
- "\u0420\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u043E\u0432\u0430\u043D\u0456 \u0433\u043E\u0442\u0435\u043B\u0456",
2702
- "\u0420\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0435\u043C\u044B\u0435 \u043E\u0442\u0435\u043B\u0438",
2703
- "\u0421\u043F\u0435\u0446\u0438\u0430\u043B\u043D\u043E\u0441\u0442\u0438",
2704
- "\u0421\u0442\u0438\u043B\u0438",
2705
- "\u0421\u0442\u0438\u043B\u043E\u0432\u0435",
2706
- "\u0421\u0442\u0438\u043B\u0456",
2707
- "\u0421\u0442\u0440\u0430\u0445\u043E\u0432\u0430\u044F \u0437\u0430\u0449\u0438\u0442\u0430",
2708
- "\u0421\u0442\u0440\u0430\u0445\u043E\u0432\u0438\u0439 \u0437\u0430\u0445\u0438\u0441\u0442",
2709
- "\u0422\u0438\u043F\u0438",
2710
- "\u0422\u0438\u043F\u043E\u0432\u0435",
2711
- "\u0422\u0438\u043F\u044B",
2712
- "\u0423\u0434\u043E\u0431\u0441\u0442\u0432\u0430",
2713
- "\u0423\u0441\u043B\u0443\u0433\u0438",
2714
- "\u0428\u043E\u0443",
2715
- "\u0431\u0440\u0435\u043D\u0434\u043E\u0432\u0438",
2716
- "\u0434\u0435\u043B\u043E\u0432\u0438 \u0433\u0440\u0430\u0434\u0430",
2717
- "\u0434\u0435\u0441\u0442\u0438\u043D\u0430\u0446\u0438\u0458\u0435",
2718
- "\u0434\u0438\u043F\u043B\u043E\u043C\u0435",
2719
- "\u0435\u043C\u0438\u0441\u0438\u0458\u0435",
2720
- "\u0438\u0441\u0442\u0430\u043A\u043D\u0443\u0442\u0438 \u0445\u043E\u0442\u0435\u043B\u0438",
2721
- "\u043A\u0443\u0440\u0441\u0435\u0432\u0438",
2722
- "\u043C\u043E\u0434\u0435\u043B\u0438",
2723
- "\u043E\u0441\u0438\u0433\u0443\u0440\u0430\u045A\u0435",
2724
- "\u0441\u0430\u0434\u0440\u0436\u0430\u0458\u0438",
2725
- "\u0441\u0442\u0438\u043B\u043E\u0432\u0438",
2726
- "\u0442\u0438\u043F\u043E\u0432\u0438",
2727
- "\u0443\u0441\u043B\u0443\u0433\u0435",
2728
- "\u05D3\u05D2\u05DE\u05D9\u05DD",
2729
- "\u05D4\u05D5\u05E4\u05E2\u05D5\u05EA \u05D5\u05EA\u05D5\u05DB\u05E0\u05D9\u05D5\u05EA",
2730
- "\u05D9\u05E2\u05D3\u05D9\u05DD \u05D2\u05D9\u05D0\u05D5\u05D2\u05E8\u05E4\u05D9\u05D9\u05DD",
2731
- "\u05DB\u05D9\u05E1\u05D5\u05D9 \u05D1\u05D9\u05D8\u05D5\u05D7\u05D9",
2732
- "\u05DE\u05D5\u05EA\u05D2\u05D9\u05DD",
2733
- "\u05DE\u05DC\u05D5\u05E0\u05D5\u05EA \u05DE\u05D5\u05DE\u05DC\u05E6\u05D9\u05DD",
2734
- "\u05E1\u05D2\u05E0\u05D5\u05E0\u05D5\u05EA",
2735
- "\u05E1\u05D5\u05D2\u05D9\u05DD",
2736
- "\u05E7\u05D5\u05E8\u05E1\u05D9\u05DD",
2737
- "\u05E9\u05D9\u05E8\u05D5\u05EA\u05D9 \u05D4\u05DE\u05E7\u05D5\u05DD",
2738
- "\u05E9\u05D9\u05E8\u05D5\u05EA\u05D9\u05DD",
2739
- "\u05E9\u05DB\u05D5\u05E0\u05D5\u05EA",
2740
- "\u05EA\u05D5\u05DB\u05E0\u05D9\u05D5\u05EA \u05DC\u05DC\u05D9\u05DE\u05D5\u05D3\u05D9 \u05EA\u05D5\u05D0\u05E8",
2741
- "\u0627\u0644\u0623\u062D\u064A\u0627\u0621",
2742
- "\u0627\u0644\u0623\u0646\u0645\u0627\u0637",
2743
- "\u0627\u0644\u0623\u0646\u0648\u0627\u0639",
2744
- "\u0627\u0644\u062A\u063A\u0637\u064A\u0629 \u0627\u0644\u062A\u0623\u0645\u064A\u0646\u064A\u0629",
2745
- "\u0627\u0644\u062E\u062F\u0645\u0627\u062A",
2746
- "\u0627\u0644\u062F\u0648\u0631\u0627\u062A \u0627\u0644\u062A\u062F\u0631\u064A\u0628\u064A\u0629",
2747
- "\u0627\u0644\u0639\u0631\u0648\u0636",
2748
- "\u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062A \u0627\u0644\u062A\u062C\u0627\u0631\u064A\u0629",
2749
- "\u0627\u0644\u0641\u0646\u0627\u062F\u0642 \u0627\u0644\u0645\u0645\u064A\u0651\u0632\u0629",
2750
- "\u0627\u0644\u0646\u0645\u0627\u0630\u062C",
2751
- "\u0627\u0644\u0648\u062C\u0647\u0627\u062A",
2752
- "\u0628\u0631\u0627\u0645\u062C \u0627\u0644\u0634\u0647\u0627\u062F\u0627\u062A",
2753
- "\u0648\u0633\u0627\u0626\u0644 \u0627\u0644\u0631\u0627\u062D\u0629",
2754
- "\u0906\u0938-\u092A\u0921\u093C\u094B\u0938",
2755
- "\u0917\u0902\u0924\u0935\u094D\u092F",
2756
- "\u0921\u093F\u0917\u094D\u0930\u0940 \u0915\u093E\u0930\u094D\u092F\u0915\u094D\u0930\u092E",
2757
- "\u092A\u093E\u0920\u094D\u200D\u092F\u0915\u094D\u0930\u092E",
2758
- "\u092A\u094D\u0930\u0915\u093E\u0930",
2759
- "\u092A\u094D\u0930\u0926\u0930\u094D\u0936\u093F\u0924 \u0939\u094B\u091F\u0932",
2760
- "\u092C\u0940\u092E\u093E \u0915\u0935\u0930\u0947\u091C",
2761
- "\u092C\u094D\u0930\u093E\u0902\u0921",
2762
- "\u092E\u0949\u0921\u0932",
2763
- "\u0936\u0948\u0932\u093F\u092F\u093E\u0902",
2764
- "\u0936\u094B",
2765
- "\u0938\u0941\u0935\u093F\u0927\u093E\u090F\u0902",
2766
- "\u0938\u0947\u0935\u093E\u090F\u0902",
2767
- "\u0E04\u0E27\u0E32\u0E21\u0E04\u0E38\u0E49\u0E21\u0E04\u0E23\u0E2D\u0E07\u0E43\u0E19\u0E1B\u0E23\u0E30\u0E01\u0E31\u0E19",
2768
- "\u0E1A\u0E23\u0E34\u0E01\u0E32\u0E23",
2769
- "\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17",
2770
- "\u0E1B\u0E25\u0E32\u0E22\u0E17\u0E32\u0E07",
2771
- "\u0E22\u0E48\u0E32\u0E19\u0E43\u0E01\u0E25\u0E49\u0E40\u0E04\u0E35\u0E22\u0E07",
2772
- "\u0E23\u0E38\u0E48\u0E19",
2773
- "\u0E2A\u0E34\u0E48\u0E07\u0E2D\u0E33\u0E19\u0E27\u0E22\u0E04\u0E27\u0E32\u0E21\u0E2A\u0E30\u0E14\u0E27\u0E01",
2774
- "\u0E2A\u0E44\u0E15\u0E25\u0E4C",
2775
- "\u0E2B\u0E25\u0E31\u0E01\u0E2A\u0E39\u0E15\u0E23",
2776
- "\u0E2B\u0E25\u0E31\u0E01\u0E2A\u0E39\u0E15\u0E23\u0E1B\u0E23\u0E34\u0E0D\u0E0D\u0E32",
2777
- "\u0E41\u0E1A\u0E23\u0E19\u0E14\u0E4C",
2778
- "\u0E42\u0E0A\u0E27\u0E4C",
2779
- "\u0E42\u0E23\u0E07\u0E41\u0E23\u0E21\u0E40\u0E14\u0E48\u0E19",
2780
- "\u304A\u3059\u3059\u3081\u306E\u30DB\u30C6\u30EB",
2781
- "\u30B3\u30FC\u30B9",
2782
- "\u30B5\u30FC\u30D3\u30B9",
2783
- "\u30B9\u30BF\u30A4\u30EB",
2784
- "\u30BF\u30A4\u30D7",
2785
- "\u30D6\u30E9\u30F3\u30C9",
2786
- "\u30E2\u30C7\u30EB",
2787
- "\u4FDD\u967A\u306E\u4FDD\u969C",
2788
- "\u4FDD\u969C\u7BC4\u570D",
2789
- "\u5230\u7740\u5730",
2790
- "\u5468\u8FBA\u5730\u57DF",
2791
- "\u54C1\u724C",
2792
- "\u578B\u53F7",
2793
- "\u578B\u865F",
2794
- "\u5B66\u4F4D\u30D7\u30ED\u30B0\u30E9\u30E0",
2795
- "\u5B66\u4F4D\u8BFE\u7A0B",
2796
- "\u5B78\u4F4D\u8AB2\u7A0B",
2797
- "\u627F\u4FDD\u7BC4\u570D",
2798
- "\u670D\u52A1",
2799
- "\u670D\u52D9",
2800
- "\u6B3E\u5F0F",
2801
- "\u7279\u8272\u9152\u5E97",
2802
- "\u756A\u7D44",
2803
- "\u76EE\u7684\u5730",
2804
- "\u793E\u533A",
2805
- "\u793E\u5340",
2806
- "\u7BC0\u76EE",
2807
- "\u7C7B\u578B",
2808
- "\u7CBE\u9009\u9152\u5E97",
2809
- "\u7CBE\u9078\u98EF\u5E97",
2810
- "\u8282\u76EE",
2811
- "\u8A2D\u5099",
2812
- "\u8A2D\u65BD",
2813
- "\u8AB2\u7A0B",
2814
- "\u8BBE\u65BD",
2815
- "\u8BFE\u7A0B",
2816
- "\u9669\u79CD",
2817
- "\u985E\u578B",
2818
- "\uACFC\uC815",
2819
- "\uBAA8\uB378",
2820
- "\uBAA9\uC801\uC9C0",
2821
- "\uBCF4\uD5D8 \uBCF4\uC0C1 \uBC94\uC704",
2822
- "\uBE0C\uB79C\uB4DC",
2823
- "\uC11C\uBE44\uC2A4",
2824
- "\uC2A4\uD0C0\uC77C",
2825
- "\uC720\uD615",
2826
- "\uC778\uADFC \uC9C0\uC5ED",
2827
- "\uCD94\uCC9C \uD638\uD154",
2828
- "\uD3B8\uC758 \uC2DC\uC124",
2829
- "\uD504\uB85C\uADF8\uB7A8",
2830
- "\uD559\uC704 \uCDE8\uB4DD \uD504\uB85C\uADF8\uB7A8"
2831
- ];
2832
- var HEADER_ALIASES = /* @__PURE__ */ new Map([["service catalog", "Services"]]);
2833
- var ACCEPTED = /* @__PURE__ */ new Set([...STRUCTURED_SNIPPET_HEADERS_EN, ...STRUCTURED_SNIPPET_HEADERS_LOCALIZED]);
2834
- var BY_FOLDED_CASE = new Map([...ACCEPTED].map((header) => [header.toLowerCase(), header]));
2835
- function canonicalStructuredSnippetHeader(header) {
2836
- const trimmed = header.trim();
2837
- if (ACCEPTED.has(trimmed)) {
2838
- return trimmed;
2839
- }
2840
- const folded = trimmed.toLowerCase();
2841
- return HEADER_ALIASES.get(folded) ?? BY_FOLDED_CASE.get(folded);
2842
- }
2843
-
2844
- // ../api/src/ads-google/ops.ts
2845
- import { z as z4 } from "zod";
2846
- var tempRefSchema = z4.string().regex(TEMP_REF_REGEX, "expected a g_temp_* reference");
2847
- var refSchema2 = z4.union([
2848
- z4.string().regex(RESOURCE_NAME_REGEX, "expected a customers/\u2026/\u2026/\u2026 resource name"),
2849
- z4.string().regex(NUMERIC_ID_REGEX, "expected a numeric id"),
2850
- tempRefSchema
2851
- ]);
2852
- var targetRefSchema = refSchema2;
2853
- var microsSchema = z4.number().int().positive("expected a positive micros amount");
2854
- var httpsUrlSchema = z4.string().url().refine((u) => u.startsWith("https://"), "final URLs must be https");
2855
- var customerIdSchema = z4.string().regex(NUMERIC_ID_REGEX, "customerId must be the bare numeric customer id");
2856
- var stageableStatusSchema = z4.enum(STAGEABLE_CREATE_STATUSES);
2857
- var matchTypeSchema = z4.enum(KEYWORD_MATCH_TYPES);
2858
- var finalUrlSuffixSchema = z4.string().max(GOOGLE_ADS_LIMITS.campaign.finalUrlSuffixMax).refine((s) => !/^[?&]/.test(s), "drop the leading ? or & \u2014 a final URL suffix is bare query parameters").refine((s) => !s.includes("{lpurl}"), "{lpurl} belongs in a tracking template, not in a final URL suffix").refine((s) => !/\s/.test(s), "a final URL suffix cannot contain whitespace").refine((s) => s === "" || s.includes("="), 'expected key=value pairs, e.g. "utm_source=google&utm_agency=baker"');
2859
- var LANDING_PAGE_TAGS = ["{lpurl}", "{unescapedlpurl}", "{escapedlpurl}", "{lpurl+2}", "{lpurl+3}"];
2860
- var trackingUrlTemplateSchema = z4.string().max(GOOGLE_ADS_LIMITS.campaign.trackingUrlTemplateMax).refine((t) => !/\s/.test(t), "a tracking template cannot contain whitespace").refine(
2861
- (t) => t === "" || LANDING_PAGE_TAGS.some((tag) => t.includes(tag)),
2862
- `a tracking template must carry the landing page through one of ${LANDING_PAGE_TAGS.join(", ")}, e.g. "https://tracker.example/?url={lpurl}"`
2863
- ).refine(
2864
- (t) => t === "" || /^(https?:\/\/|\{)/.test(t),
2865
- "a tracking template must start with http://, https:// or a {lpurl} tag"
2866
- );
2867
- var urlCustomParametersSchema = z4.array(
2868
- z4.strictObject({
2869
- key: z4.string().min(1).max(GOOGLE_ADS_LIMITS.campaign.urlCustomParameterKeyMax).regex(/^[A-Za-z0-9_]+$/, "a custom parameter key is letters, digits and underscores only"),
2870
- value: z4.string().max(GOOGLE_ADS_LIMITS.campaign.urlCustomParameterValueMax)
2871
- })
2872
- ).max(GOOGLE_ADS_LIMITS.campaign.urlCustomParametersMax).refine(
2873
- (params) => new Set(params.map((p) => p.key)).size === params.length,
2874
- "each custom parameter key can appear only once"
2875
- );
2876
- var keywordTextSchema = z4.string().min(1).max(GOOGLE_ADS_LIMITS.keyword.textMax).refine((t) => t.trim().split(/\s+/).length <= GOOGLE_ADS_LIMITS.keyword.wordsMax, "keyword exceeds 10 words");
2877
- var deliveryMethodSchema = z4.enum(BUDGET_DELIVERY_METHODS, {
2878
- error: retiredChoiceError({ ACCELERATED: ACCELERATED_DELIVERY_MESSAGE })
2879
- });
2880
- var TOTAL_BUDGET_NOT_SHARED_MESSAGE = "a total budget belongs to one campaign and cannot be shared \u2014 leave explicitlyShared out";
2881
- var ONE_BUDGET_AMOUNT_MESSAGE = "set amountMicros (a daily budget) OR totalAmountMicros (one total for the campaign's whole flight), not both";
2882
- var budgetCreateSchema = z4.strictObject({
2883
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.budget.nameMax),
2884
- amountMicros: microsSchema.optional(),
2885
- /** A total for the campaign's whole flight instead of a daily amount (needs the campaign's end date). */
2886
- totalAmountMicros: microsSchema.optional(),
2887
- deliveryMethod: deliveryMethodSchema.default("STANDARD"),
2888
- explicitlyShared: z4.boolean().default(false)
2889
- }).superRefine((p, ctx) => {
2890
- if (p.amountMicros === void 0 === (p.totalAmountMicros === void 0)) {
2891
- ctx.addIssue({ code: "custom", path: ["amountMicros"], message: ONE_BUDGET_AMOUNT_MESSAGE });
2892
- }
2893
- if (p.totalAmountMicros !== void 0 && p.explicitlyShared) {
2894
- ctx.addIssue({ code: "custom", path: ["explicitlyShared"], message: TOTAL_BUDGET_NOT_SHARED_MESSAGE });
2895
- }
2896
- });
2897
- var budgetUpdateSchema = z4.strictObject({
2898
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.budget.nameMax).optional(),
2899
- amountMicros: microsSchema.optional(),
2900
- /** A total budget's new total. A budget's kind (daily or total) never changes after it is created. */
2901
- totalAmountMicros: microsSchema.optional(),
2902
- deliveryMethod: deliveryMethodSchema.optional()
2903
- }).superRefine((p, ctx) => {
2904
- if (Object.values(p).every((v) => v === void 0)) {
2905
- ctx.addIssue({ code: "custom", message: "update needs at least one field" });
2906
- }
2907
- if (p.amountMicros !== void 0 && p.totalAmountMicros !== void 0) {
2908
- ctx.addIssue({ code: "custom", path: ["amountMicros"], message: ONE_BUDGET_AMOUNT_MESSAGE });
2909
- }
2910
- });
2911
- var biddingConfigSchema = z4.strictObject({
2912
- type: z4.enum(BIDDING_STRATEGY_TYPES),
2913
- targetCpaMicros: microsSchema.optional(),
2914
- targetRoas: z4.number().positive().optional(),
2915
- /** Demand Gen only — `Campaign.target_cpc.target_cpc_micros`. */
2916
- targetCpcMicros: microsSchema.optional(),
2917
- cpcBidCeilingMicros: microsSchema.optional(),
2918
- enhancedCpcEnabled: z4.boolean().optional(),
2919
- /** Target impression share: where on the page the share is counted. */
2920
- location: z4.enum(TARGET_IMPRESSION_SHARE_LOCATIONS).optional(),
2921
- /** Target impression share: the share to reach, in millionths (700000 = 70%). */
2922
- locationFractionMicros: z4.number().int().min(1).max(1e6).optional()
2923
- }).superRefine((p, ctx) => {
2924
- if (p.type !== "TARGET_IMPRESSION_SHARE" && (p.location !== void 0 || p.locationFractionMicros !== void 0)) {
2925
- ctx.addIssue({
2926
- code: "custom",
2927
- path: ["location"],
2928
- message: "location and locationFractionMicros belong to TARGET_IMPRESSION_SHARE only"
2929
- });
2930
- }
2931
- if (p.type === "TARGET_CPA" && p.targetCpaMicros === void 0) {
2932
- ctx.addIssue({ code: "custom", path: ["targetCpaMicros"], message: "TARGET_CPA needs targetCpaMicros" });
2933
- }
2934
- if (p.type === "TARGET_ROAS" && p.targetRoas === void 0) {
2935
- ctx.addIssue({ code: "custom", path: ["targetRoas"], message: "TARGET_ROAS needs targetRoas" });
2936
- }
2937
- if (p.type === "TARGET_CPC" && p.targetCpcMicros === void 0) {
2938
- ctx.addIssue({ code: "custom", path: ["targetCpcMicros"], message: "TARGET_CPC needs targetCpcMicros" });
2939
- }
2940
- });
2941
- var TARGET_IMPRESSION_SHARE_FIELDS = [
2942
- ["location", "where on the page \u2014 ANYWHERE_ON_PAGE, TOP_OF_PAGE or ABSOLUTE_TOP_OF_PAGE"],
2943
- ["locationFractionMicros", "the share to reach, in millionths (700000 = 70%)"],
2944
- ["cpcBidCeilingMicros", "the max CPC Google may bid to reach it"]
2945
- ];
2946
- function addTargetImpressionShareIssues(bidding, path, ctx) {
2947
- if (bidding?.type !== "TARGET_IMPRESSION_SHARE") {
2948
- return;
2949
- }
2950
- for (const [field, meaning] of TARGET_IMPRESSION_SHARE_FIELDS) {
2951
- if (bidding[field] === void 0) {
2952
- ctx.addIssue({
2953
- code: "custom",
2954
- path: [path, field],
2955
- message: `Target impression share needs ${field}: ${meaning}`
2956
- });
2957
- }
2958
- }
2959
- }
2960
- var networkSettingsSchema = z4.strictObject({
2961
- targetGoogleSearch: z4.boolean().optional(),
2962
- targetSearchNetwork: z4.boolean().optional(),
2963
- targetContentNetwork: z4.boolean().optional(),
2964
- targetPartnerSearchNetwork: z4.boolean().optional()
2965
- });
2966
- var dateSchema = z4.string().regex(/^\d{4}-\d{2}-\d{2}$/, "expected a YYYY-MM-DD date");
2967
- var geoTargetTypeSettingSchema = z4.strictObject({
2968
- positiveGeoTargetType: z4.enum(POSITIVE_GEO_TARGET_TYPES).optional(),
2969
- negativeGeoTargetType: z4.enum(NEGATIVE_GEO_TARGET_TYPES).optional()
2970
- }).refine(
2971
- (p) => p.positiveGeoTargetType !== void 0 || p.negativeGeoTargetType !== void 0,
2972
- "geoTargetTypeSetting needs positiveGeoTargetType and/or negativeGeoTargetType"
2973
- );
2974
- var textGuidelinesSchema = z4.strictObject({
2975
- termExclusions: z4.array(z4.string().trim().min(1).max(GOOGLE_ADS_LIMITS.campaign.termExclusionMax)).max(GOOGLE_ADS_LIMITS.campaign.termExclusionsMax).optional(),
2976
- messagingRestrictions: z4.array(z4.string().trim().min(1).max(GOOGLE_ADS_LIMITS.campaign.messagingRestrictionMax)).max(GOOGLE_ADS_LIMITS.campaign.messagingRestrictionsMax).refine(
2977
- (rules) => new Set(rules.map((rule) => rule.toLowerCase())).size === rules.length,
2978
- "each messaging restriction must be unique"
2979
- ).optional()
2980
- }).refine(
2981
- (p) => p.termExclusions !== void 0 || p.messagingRestrictions !== void 0,
2982
- "textGuidelines needs termExclusions and/or messagingRestrictions"
2983
- );
2984
- var AI_MAX_TEXT_NEEDS_AI_MAX_MESSAGE = "AI Max text customization only works with AI Max on: also turn AI Max on, or leave text customization off.";
2985
- var AI_MAX_URL_NEEDS_TEXT_MESSAGE = "AI Max final URL expansion only works with text customization on: also turn text customization on, or leave URL expansion off.";
2986
- var aiMaxSchema = z4.strictObject({
2987
- enabled: z4.boolean().optional(),
2988
- textCustomization: z4.boolean().optional(),
2989
- finalUrlExpansion: z4.boolean().optional()
2990
- }).superRefine((p, ctx) => {
2991
- if (p.enabled === void 0 && p.textCustomization === void 0 && p.finalUrlExpansion === void 0) {
2992
- ctx.addIssue({ code: "custom", message: "aiMax needs enabled, textCustomization and/or finalUrlExpansion" });
2993
- }
2994
- if (p.enabled === false && p.textCustomization === true) {
2995
- ctx.addIssue({ code: "custom", path: ["textCustomization"], message: AI_MAX_TEXT_NEEDS_AI_MAX_MESSAGE });
2996
- }
2997
- if (p.textCustomization === false && p.finalUrlExpansion === true) {
2998
- ctx.addIssue({ code: "custom", path: ["finalUrlExpansion"], message: AI_MAX_URL_NEEDS_TEXT_MESSAGE });
2999
- }
3000
- });
3001
- var AI_MAX_SEARCH_ONLY_MESSAGE = "AI Max exists only on Search campaigns.";
3002
- function aiMaxCreateRefusal(channelType, aiMax) {
3003
- if (!aiMax) {
3004
- return void 0;
3005
- }
3006
- if (channelType !== "SEARCH") {
3007
- return AI_MAX_SEARCH_ONLY_MESSAGE;
3008
- }
3009
- if (aiMax.enabled !== true && aiMax.textCustomization === true) {
3010
- return AI_MAX_TEXT_NEEDS_AI_MAX_MESSAGE;
3011
- }
3012
- if (aiMax.textCustomization !== true && aiMax.finalUrlExpansion === true) {
3013
- return AI_MAX_URL_NEEDS_TEXT_MESSAGE;
3014
- }
3015
- return void 0;
3016
- }
3017
- function createBiddingRefusal(channelType, channelSubType, bidding) {
3018
- if (channelType === "PERFORMANCE_MAX" && bidding?.type === "MANUAL_CPC") {
3019
- return "Performance Max does not support Manual CPC";
3020
- }
3021
- return mergedTargetStrategyRefusal(channelType, bidding?.type) ?? demandGenOnlyStrategyRefusal(channelType, bidding?.type) ?? manualCpcOnDemandGenRefusal(channelType, bidding?.type) ?? embeddedTargetOnDemandGenRefusal(channelType, bidding) ?? biddingMatrixRefusal({ channelType, channelSubType, strategy: bidding?.type }) ?? embeddedTargetRefusal(channelType, bidding);
3022
- }
3023
- var campaignCreateSchema = z4.strictObject({
3024
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.campaign.nameMax),
3025
- channelType: z4.enum(ADVERTISING_CHANNEL_TYPES, { error: retiredChoiceError(CHANNEL_CREATE_REFUSALS) }),
3026
- channelSubType: z4.enum(ADVERTISING_CHANNEL_SUB_TYPES, { error: retiredChoiceError(SUB_TYPE_CREATE_REFUSALS) }).optional(),
3027
- budget: refSchema2,
3028
- /** Inline standard bidding, or a portfolio strategy ref via biddingStrategy. */
3029
- bidding: biddingConfigSchema.optional(),
3030
- biddingStrategy: refSchema2.optional(),
3031
- networkSettings: networkSettingsSchema.optional(),
3032
- /**
3033
- * "Location options". Omitted stages Google's own default — reach people *in or interested in*
3034
- * the targeted locations — so pass `PRESENCE` explicitly when only people physically there count.
3035
- */
3036
- geoTargetTypeSetting: geoTargetTypeSettingSchema.optional(),
3037
- startDate: dateSchema.optional(),
3038
- endDate: dateSchema.optional(),
3039
- /** Campaign-level override of the account's final URL suffix — REPLACES it, never merges. */
3040
- finalUrlSuffix: finalUrlSuffixSchema.optional(),
3041
- /** Campaign-level override of the account's tracking template — REPLACES it, never merges. */
3042
- trackingUrlTemplate: trackingUrlTemplateSchema.optional(),
3043
- /** The `{_name}` parameters this campaign's tracking template and final URLs can reference. */
3044
- urlCustomParameters: urlCustomParametersSchema.optional(),
3045
- /** Advisory Google Ads UI objective — drives warnings, not sent to the API. */
3046
- objective: z4.enum(CAMPAIGN_OBJECTIVES).optional(),
3047
- /**
3048
- * Whether the campaign contains EU political advertising. Google requires the declaration on
3049
- * every campaign create (FieldError.REQUIRED without it); omitted means it does not.
3050
- */
3051
- euPoliticalAds: z4.boolean().optional(),
3052
- /** AI Max for Search. A new campaign has it off unless this turns it on. */
3053
- aiMax: aiMaxSchema.optional(),
3054
- /** Shopping (required) and Performance Max (optional, a retail campaign): the Merchant Center feed. */
3055
- shoppingSetting: shoppingSettingSchema.optional(),
3056
- /** App campaigns (MULTI_CHANNEL): the app, its store and the goal. Fixed at creation. */
3057
- appCampaignSetting: appCampaignSettingSchema.optional(),
3058
- /** App campaigns with an in-app or value goal: the app's conversion actions to optimize toward. */
3059
- selectiveOptimization: selectiveOptimizationSchema.optional(),
3060
- /** Travel campaigns: the linked travel account (Things to do). */
3061
- travelCampaignSettings: travelCampaignSettingsSchema.optional(),
3062
- /** Hotel campaigns: the linked Hotel Center account. */
3063
- hotelSetting: hotelSettingSchema.optional(),
3064
- /** Search: the site dynamic ads are built from. */
3065
- dynamicSearchAdsSetting: dynamicSearchAdsSettingSchema.optional(),
3066
- /** Display: how often one person sees the campaign's ads. */
3067
- frequencyCaps: frequencyCapsSchema.optional(),
3068
- /** Performance Max, or Search with AI Max + text customization: what Google's generated text must avoid. */
3069
- textGuidelines: textGuidelinesSchema.optional(),
3070
- /** Performance Max: what Google may generate (text, final URL expansion, image and video enhancements). */
3071
- assetAutomation: assetAutomationSchema.optional(),
3072
- /** Performance Max: brand guidelines (business name + logo as campaign assets, colors, font). */
3073
- brandGuidelines: brandGuidelinesCreateSchema.optional(),
3074
- status: stageableStatusSchema.default("PAUSED")
3075
- }).superRefine((p, ctx) => {
3076
- for (const issue of channelSettingsCreateIssues(p)) {
3077
- ctx.addIssue({ code: "custom", path: issue.path, message: issue.message });
3078
- }
3079
- if (!p.bidding && !p.biddingStrategy) {
3080
- ctx.addIssue({
3081
- code: "custom",
3082
- path: ["bidding"],
3083
- message: "set an inline bidding strategy or reference a portfolio biddingStrategy"
3084
- });
3085
- }
3086
- if (p.bidding && p.biddingStrategy) {
3087
- ctx.addIssue({
3088
- code: "custom",
3089
- path: ["bidding"],
3090
- message: "use inline bidding OR a portfolio biddingStrategy, not both"
3091
- });
3092
- }
3093
- addTargetImpressionShareIssues(p.bidding, "bidding", ctx);
3094
- const channelRefusal = createBiddingRefusal(p.channelType, p.channelSubType, p.bidding);
3095
- if (channelRefusal) {
3096
- ctx.addIssue({ code: "custom", path: ["bidding"], message: channelRefusal });
3097
- }
3098
- if (p.startDate && p.endDate && p.endDate <= p.startDate) {
3099
- ctx.addIssue({ code: "custom", path: ["endDate"], message: "endDate must be after startDate" });
3100
- }
3101
- if (p.channelSubType && SUB_TYPE_CHANNEL[p.channelSubType] !== p.channelType) {
3102
- ctx.addIssue({
3103
- code: "custom",
3104
- path: ["channelSubType"],
3105
- message: `${p.channelSubType} is a ${SUB_TYPE_CHANNEL[p.channelSubType]} sub-type, not ${p.channelType} \u2014 leave the sub-type out for a standard ${p.channelType} campaign`
3106
- });
3107
- }
3108
- const aiMaxRefusal = aiMaxCreateRefusal(p.channelType, p.aiMax);
3109
- if (aiMaxRefusal) {
3110
- ctx.addIssue({ code: "custom", path: ["aiMax"], message: aiMaxRefusal });
3111
- }
3112
- });
3113
- var campaignUpdateSchema = z4.strictObject({
3114
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.campaign.nameMax).optional(),
3115
- budget: refSchema2.optional(),
3116
- /**
3117
- * The campaign's own (standard) bidding. On a campaign that is on a portfolio strategy this also
3118
- * takes it OFF the portfolio — the builder clears `bidding_strategy` with it.
3119
- */
3120
- bidding: biddingConfigSchema.optional(),
3121
- /**
3122
- * Moves the campaign onto a portfolio bidding strategy (a ref: staged create, id or resource name).
3123
- * `""` takes it off its portfolio — only beside `bidding`, the campaign's own bidding from then on
3124
- * (staging adds it when `bidding` is staged on a campaign that is on a portfolio).
3125
- */
3126
- biddingStrategy: z4.union([refSchema2, z4.literal("")]).optional(),
3127
- networkSettings: networkSettingsSchema.optional(),
3128
- /** Switches an existing campaign between "Presence or interest" and "Presence". */
3129
- geoTargetTypeSetting: geoTargetTypeSettingSchema.optional(),
3130
- startDate: dateSchema.optional(),
3131
- endDate: dateSchema.optional(),
3132
- /** Campaign-level override of the account's final URL suffix. `""` clears it back to the account value. */
3133
- finalUrlSuffix: finalUrlSuffixSchema.optional(),
3134
- /** Campaign-level tracking template. `""` clears it back to the account value. */
3135
- trackingUrlTemplate: trackingUrlTemplateSchema.optional(),
3136
- /** Replaces the campaign's custom parameters wholesale; `[]` removes them all. */
3137
- urlCustomParameters: urlCustomParametersSchema.optional(),
3138
- /** Corrects the campaign's EU political advertising declaration (true = contains, false = does not). */
3139
- euPoliticalAds: z4.boolean().optional(),
3140
- /** AI Max / Performance Max text guidelines. Google refuses them on a Search campaign without AI Max. */
3141
- textGuidelines: textGuidelinesSchema.optional(),
3142
- /** Turns AI Max or its features on or off. Search campaigns only (checked against the live channel). */
3143
- aiMax: aiMaxSchema.optional(),
3144
- /** Feed label (Shopping, Performance Max), priority and local inventory (Shopping). Checked against the live channel. */
3145
- shoppingSetting: shoppingSettingUpdateSchema.optional(),
3146
- /** Search: the site dynamic ads are built from (each field on its own). Checked against the live channel. */
3147
- dynamicSearchAdsSetting: dynamicSearchAdsSettingUpdateSchema.optional(),
3148
- /** Display / Video: REPLACES the campaign's caps; `[]` removes them. Checked against the live channel. */
3149
- frequencyCaps: frequencyCapsSchema.optional(),
3150
- /** Performance Max: switches Google's generated assets; the ones left out keep their live value. */
3151
- assetAutomation: assetAutomationSchema.optional(),
3152
- /** Performance Max with brand guidelines on: its brand colors and font. Turning them on is `enableBrandGuidelines`. */
3153
- brandGuidelines: brandGuidelinesUpdateSchema.optional(),
3154
- status: z4.enum(["ENABLED", "PAUSED", "REMOVED"]).optional()
3155
- }).superRefine((p, ctx) => {
3156
- if (Object.values(p).every((v) => v === void 0)) {
3157
- ctx.addIssue({ code: "custom", message: "update needs at least one field" });
3158
- }
3159
- if (p.bidding && p.biddingStrategy) {
3160
- ctx.addIssue({
3161
- code: "custom",
3162
- path: ["biddingStrategy"],
3163
- message: "use the campaign's own bidding OR a portfolio biddingStrategy, not both \u2014 own bidding takes the campaign off its portfolio"
3164
- });
3165
- }
3166
- if (p.biddingStrategy === "" && !p.bidding) {
3167
- ctx.addIssue({
3168
- code: "custom",
3169
- path: ["biddingStrategy"],
3170
- message: "leaving a portfolio needs the campaign's own bidding \u2014 stage bidding (e.g. MAXIMIZE_CONVERSIONS) with it"
3171
- });
3172
- }
3173
- });
3174
- var customerUpdateSchema = z4.strictObject({
3175
- /** Auto-tagging: Google appends the `gclid` click id to every landing page. */
3176
- autoTaggingEnabled: z4.boolean().optional(),
3177
- /** Account tracking template. Campaign, ad group and ad templates REPLACE it; `""` clears it. */
3178
- trackingUrlTemplate: trackingUrlTemplateSchema.optional(),
3179
- /** Account final URL suffix. Campaign, ad group and ad suffixes REPLACE it; `""` clears it. */
3180
- finalUrlSuffix: finalUrlSuffixSchema.optional(),
3181
- /** Call reporting: Google counts and reports calls from call assets. */
3182
- callReportingEnabled: z4.boolean().optional(),
3183
- /** Whether calls from ads count as conversions (needs call reporting on). */
3184
- callConversionReportingEnabled: z4.boolean().optional(),
3185
- /** The account's video inventory type (brand safety) for YouTube and video placements. */
3186
- videoBrandSafety: z4.enum(VIDEO_BRAND_SAFETY_LEVELS).optional()
3187
- }).superRefine((p, ctx) => {
3188
- if (Object.values(p).every((v) => v === void 0)) {
3189
- ctx.addIssue({ code: "custom", message: "update needs at least one setting" });
3190
- }
3191
- if (p.callReportingEnabled === false && p.callConversionReportingEnabled === true) {
3192
- ctx.addIssue({
3193
- code: "custom",
3194
- path: ["callConversionReportingEnabled"],
3195
- message: "calls can count as conversions only while call reporting is on"
3196
- });
3197
- }
3198
- });
3199
- var CUSTOMER_TARGET_MESSAGE = "an account settings change targets the account itself \u2014 set target to the same id as customerId";
3200
- var adGroupCreateSchema = z4.strictObject({
3201
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.adGroup.nameMax),
3202
- campaign: refSchema2,
3203
- /**
3204
- * Optional, and NOT defaulted: Google derives an ad group's type from its campaign's channel when
3205
- * it is unset, and for a Demand Gen campaign that is the only way to say it — the v23 enum has no
3206
- * Demand Gen value at all. A default of `SEARCH_STANDARD` would state a type nobody chose on every
3207
- * ad group Baker stages, which on a Demand Gen campaign is a whole-batch publish failure.
3208
- */
3209
- type: z4.enum(AD_GROUP_TYPES).optional(),
3210
- cpcBidMicros: microsSchema.optional(),
3211
- status: stageableStatusSchema.default("PAUSED")
3212
- });
3213
- var adGroupUpdateSchema = z4.strictObject({
3214
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.adGroup.nameMax).optional(),
3215
- cpcBidMicros: microsSchema.optional(),
3216
- status: z4.enum(["ENABLED", "PAUSED", "REMOVED"]).optional()
3217
- }).refine((p) => Object.values(p).some((v) => v !== void 0), "update needs at least one field");
3218
- var keywordAddSchema = z4.strictObject({
3219
- adGroup: refSchema2,
3220
- text: keywordTextSchema,
3221
- matchType: matchTypeSchema,
3222
- cpcBidMicros: microsSchema.optional(),
3223
- finalUrls: z4.array(httpsUrlSchema).optional(),
3224
- status: stageableStatusSchema.default("ENABLED")
3225
- });
3226
- var keywordUpdateSchema = z4.strictObject({
3227
- cpcBidMicros: microsSchema.optional(),
3228
- finalUrls: z4.array(httpsUrlSchema).optional(),
3229
- status: z4.enum(["ENABLED", "PAUSED", "REMOVED"]).optional()
3230
- }).refine((p) => Object.values(p).some((v) => v !== void 0), "update needs at least one field");
3231
- var negativeKeywordAddSchema = z4.strictObject({
3232
- level: z4.enum(["adGroup", "campaign"]),
3233
- parent: refSchema2,
3234
- text: keywordTextSchema,
3235
- matchType: matchTypeSchema
3236
- });
3237
- var negativeKeywordUpdateSchema = z4.strictObject({ text: keywordTextSchema.optional(), matchType: matchTypeSchema.optional() }).refine((p) => p.text !== void 0 || p.matchType !== void 0, "update needs text or matchType");
3238
- var sharedSetCreateSchema = z4.strictObject({
3239
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.sharedSet.nameMax),
3240
- type: z4.enum(SHARED_SET_TYPES).default("NEGATIVE_KEYWORDS")
3241
- });
3242
- var sharedSetUpdateSchema = z4.strictObject({
3243
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.sharedSet.nameMax)
3244
- });
3245
- var sharedSetMemberAddSchema = z4.strictObject({
3246
- sharedSet: refSchema2,
3247
- text: keywordTextSchema.optional(),
3248
- matchType: matchTypeSchema.optional(),
3249
- criterion: criterionSpecSchema.optional()
3250
- }).superRefine((val, ctx) => {
3251
- const keyword = val.text !== void 0 || val.matchType !== void 0;
3252
- if (keyword === (val.criterion !== void 0)) {
3253
- ctx.addIssue({
3254
- code: "custom",
3255
- path: [],
3256
- message: "a list member is either a keyword (text + matchType) or a criterion (a placement, app, YouTube channel/video or brand) \u2014 give exactly one"
3257
- });
3258
- return;
3259
- }
3260
- if (keyword && (val.text === void 0 || val.matchType === void 0)) {
3261
- ctx.addIssue({
3262
- code: "custom",
3263
- path: [val.text === void 0 ? "text" : "matchType"],
3264
- message: "a keyword member needs text and matchType"
3265
- });
3266
- }
3267
- if (val.criterion) {
3268
- const message = criterionLevelIssue(val.criterion, "sharedSet") ?? criterionBidIssue(val.criterion, true);
3269
- if (message) {
3270
- ctx.addIssue({ code: "custom", path: ["criterion"], message });
3271
- }
3272
- }
3273
- });
3274
- var campaignSharedSetAttachSchema = z4.strictObject({
3275
- campaign: refSchema2,
3276
- sharedSet: refSchema2
3277
- });
3278
- var adTextAssetSchema = z4.strictObject({
3279
- text: z4.string().min(1),
3280
- pinnedField: z4.enum(PINNED_FIELDS).optional()
3281
- });
3282
- var responsiveSearchAdSchema = z4.strictObject({
3283
- format: z4.literal("responsiveSearch"),
3284
- headlines: z4.array(
3285
- adTextAssetSchema.refine(
3286
- (a) => a.text.length <= GOOGLE_ADS_LIMITS.responsiveSearchAd.headlineTextMax,
3287
- "headline exceeds 30 chars"
3288
- )
3289
- ).min(GOOGLE_ADS_LIMITS.responsiveSearchAd.headlinesMin).max(GOOGLE_ADS_LIMITS.responsiveSearchAd.headlinesMax),
3290
- descriptions: z4.array(
3291
- adTextAssetSchema.refine(
3292
- (a) => a.text.length <= GOOGLE_ADS_LIMITS.responsiveSearchAd.descriptionTextMax,
3293
- "description exceeds 90 chars"
3294
- )
3295
- ).min(GOOGLE_ADS_LIMITS.responsiveSearchAd.descriptionsMin).max(GOOGLE_ADS_LIMITS.responsiveSearchAd.descriptionsMax),
3296
- path1: z4.string().max(GOOGLE_ADS_LIMITS.responsiveSearchAd.pathMax).optional(),
3297
- path2: z4.string().max(GOOGLE_ADS_LIMITS.responsiveSearchAd.pathMax).optional(),
3298
- finalUrls: z4.array(httpsUrlSchema).min(1)
3299
- });
3300
- var responsiveDisplayAdSchema = z4.strictObject({
3301
- format: z4.literal("responsiveDisplay"),
3302
- headlines: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.responsiveDisplayAd.headlineTextMax) })).min(1).max(5),
3303
- longHeadline: z4.strictObject({
3304
- text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.responsiveDisplayAd.longHeadlineTextMax)
3305
- }),
3306
- descriptions: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.responsiveDisplayAd.descriptionTextMax) })).min(1).max(5),
3307
- businessName: z4.string().min(1).max(GOOGLE_ADS_LIMITS.responsiveDisplayAd.businessNameMax),
3308
- // A Responsive Display Ad's images are fields on the ad's own content (never campaign-level
3309
- // asset links). Google requires ≥1 landscape marketing image (1.91:1) AND ≥1 square marketing
3310
- // image (1:1) to serve; the logo images are optional.
3311
- marketingImageAssets: z4.array(refSchema2).optional(),
3312
- squareMarketingImageAssets: z4.array(refSchema2).optional(),
3313
- logoImageAssets: z4.array(refSchema2).optional(),
3314
- finalUrls: z4.array(httpsUrlSchema).min(1)
3315
- });
3316
- var appAdSchema = z4.strictObject({
3317
- format: z4.literal("app"),
3318
- headlines: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.appAd.headlineTextMax) })).min(GOOGLE_ADS_LIMITS.appAd.headlinesMin).max(GOOGLE_ADS_LIMITS.appAd.headlinesMax),
3319
- descriptions: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.appAd.descriptionTextMax) })).min(GOOGLE_ADS_LIMITS.appAd.descriptionsMin).max(GOOGLE_ADS_LIMITS.appAd.descriptionsMax),
3320
- // An App campaign ad carries its images on its own content (`AppAdInfo.images`), not as
3321
- // campaign-level asset links — same shape as a responsive display ad's marketing images.
3322
- images: z4.array(refSchema2).max(GOOGLE_ADS_LIMITS.appAd.imagesMax).optional(),
3323
- // `AppAdInfo.youtube_videos` — an App ad's videos live on its content too. Without this field
3324
- // there is no way to express "keep these videos on the ad", so a content update that only
3325
- // restated headlines silently left the ad's videos to whatever the mask happened to omit.
3326
- youtubeVideos: z4.array(refSchema2).max(GOOGLE_ADS_LIMITS.appAd.youtubeVideosMax).optional()
3327
- });
3328
- var videoAdSchema = z4.strictObject({
3329
- format: z4.literal("video"),
3330
- // A raw YouTube id is not a publishable Google Ads reference — the video must be staged as
3331
- // its own `google.asset.create` (type: youtubeVideo) first, then referenced here by asset ref.
3332
- videoAssets: z4.array(refSchema2).min(1),
3333
- /**
3334
- * Google requires both since v24 (`VideoResponsiveAdInfo.business_name` / `.logo_images`). Optional
3335
- * here for the same reason as a Demand Gen video ad's media: an update masks only what it sends.
3336
- * A create without them is refused at stage (`videoAdCreateRefusal`, backend `adFormatMatch.ts`).
3337
- * The business name is an `AdTextAsset` on the wire, held to the Demand Gen video ad's 25 characters.
3338
- */
3339
- businessName: z4.string().min(1).max(GOOGLE_ADS_LIMITS.demandGenVideoAd.businessNameMax).optional(),
3340
- logoImageAssets: z4.array(refSchema2).optional(),
3341
- finalUrls: z4.array(httpsUrlSchema).min(1)
3342
- });
3343
- var demandGenAdSchema = z4.strictObject({
3344
- format: z4.literal("demandGen"),
3345
- /**
3346
- * `Ad.name`. Accepted here but NOT required: a multi-asset Demand Gen ad published against a live
3347
- * account with no name was created, and reads back with none. Only the video format requires one.
3348
- */
3349
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.demandGenAd.adNameMax).optional(),
3350
- headlines: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.demandGenAd.headlineTextMax) })).min(GOOGLE_ADS_LIMITS.demandGenAd.headlinesMin).max(GOOGLE_ADS_LIMITS.demandGenAd.headlinesMax),
3351
- descriptions: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.demandGenAd.descriptionTextMax) })).min(GOOGLE_ADS_LIMITS.demandGenAd.descriptionsMin).max(GOOGLE_ADS_LIMITS.demandGenAd.descriptionsMax),
3352
- businessName: z4.string().min(1).max(GOOGLE_ADS_LIMITS.demandGenAd.businessNameMax),
3353
- finalUrls: z4.array(httpsUrlSchema).min(1),
3354
- imageAssets: z4.array(refSchema2).optional(),
3355
- squareImageAssets: z4.array(refSchema2).optional(),
3356
- logoImageAssets: z4.array(refSchema2).optional()
3357
- });
3358
- var demandGenVideoAdSchema = z4.strictObject({
3359
- format: z4.literal("demandGenVideo"),
3360
- /**
3361
- * `Ad.name` — the ad's own name, which Google REQUIRES on this format and asks for in its
3362
- * interface as "Ad name". No other format Baker writes needs one (the multi-asset Demand Gen ad
3363
- * was published without one and accepted), so nothing carried it: a create without it comes back
3364
- * as `REQUIRED … at mutate_operations[n].ad_group_ad_operation.create.ad.name`, after every asset
3365
- * in the same batch has already been created. Optional in the schema because `Ad.name` is
3366
- * IMMUTABLE — an update must be able to restate the whole content without renaming the ad.
3367
- */
3368
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.demandGenVideoAd.adNameMax).optional(),
3369
- headlines: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.demandGenVideoAd.headlineTextMax) })).min(GOOGLE_ADS_LIMITS.demandGenVideoAd.headlinesMin).max(GOOGLE_ADS_LIMITS.demandGenVideoAd.headlinesMax),
3370
- longHeadlines: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.demandGenVideoAd.longHeadlineTextMax) })).min(GOOGLE_ADS_LIMITS.demandGenVideoAd.longHeadlinesMin).max(GOOGLE_ADS_LIMITS.demandGenVideoAd.longHeadlinesMax),
3371
- descriptions: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.demandGenVideoAd.descriptionTextMax) })).min(GOOGLE_ADS_LIMITS.demandGenVideoAd.descriptionsMin).max(GOOGLE_ADS_LIMITS.demandGenVideoAd.descriptionsMax),
3372
- businessName: z4.string().min(1).max(GOOGLE_ADS_LIMITS.demandGenVideoAd.businessNameMax),
3373
- finalUrls: z4.array(httpsUrlSchema).min(1),
3374
- videoAssets: z4.array(refSchema2).optional(),
3375
- logoImageAssets: z4.array(refSchema2).optional(),
3376
- callToActionAssets: z4.array(refSchema2).optional()
3377
- });
3378
- var RETIRED_AD_FORMATS = {
3379
- call: CALL_AD_RETIRED_MESSAGE
3380
- };
3381
- var shoppingProductAdSchema = z4.strictObject({ format: z4.literal("shoppingProduct") });
3382
- var SHOPPING_PRODUCT_AD_UPDATE_MESSAGE = "A Shopping product ad has no copy to change \u2014 its title, image and price come from the Merchant Center feed. Change the product in Merchant Center, or pause or resume the ad.";
3383
- var adContentSchema = z4.discriminatedUnion(
3384
- "format",
3385
- [
3386
- responsiveSearchAdSchema,
3387
- responsiveDisplayAdSchema,
3388
- appAdSchema,
3389
- videoAdSchema,
3390
- demandGenAdSchema,
3391
- demandGenVideoAdSchema,
3392
- shoppingProductAdSchema
3393
- ],
3394
- {
3395
- error: (issue) => {
3396
- const input = issue.input;
3397
- const format = typeof input === "object" && input !== null ? input.format : void 0;
3398
- return typeof format === "string" ? RETIRED_AD_FORMATS[format] : void 0;
3399
- }
3400
- }
3401
- );
3402
- var APP_AD_PAUSED_MESSAGE = "An App ad cannot be created paused \u2014 Google refuses it (AD_TYPE_CANNOT_BE_PAUSED). Stage it ENABLED (`--status ENABLED`); it serves only once its ad group and campaign are enabled, so keep those paused until the user is ready.";
3403
- var adCreateSchema = z4.strictObject({
3404
- adGroup: refSchema2,
3405
- status: stageableStatusSchema.default("PAUSED"),
3406
- content: adContentSchema
3407
- }).refine((p) => !(p.content.format === "app" && p.status === "PAUSED"), {
3408
- message: APP_AD_PAUSED_MESSAGE,
3409
- path: ["status"]
3410
- });
3411
- var adUpdateSchema = z4.strictObject({
3412
- status: z4.enum(["ENABLED", "PAUSED", "REMOVED"]).optional(),
3413
- /** Whole-content replacement for RSA-like formats; re-validated against adContentSchema. */
3414
- content: z4.record(z4.string(), z4.unknown()).optional()
3415
- }).refine((p) => Object.values(p).some((v) => v !== void 0), "update needs at least one field").refine((p) => p.content?.format !== "shoppingProduct", {
3416
- message: SHOPPING_PRODUCT_AD_UPDATE_MESSAGE,
3417
- path: ["content"]
3418
- });
3419
- var textAssetSchema = z4.strictObject({ type: z4.literal("text"), text: z4.string().min(1) });
3420
- var imageAssetSchema = z4.strictObject({
3421
- type: z4.literal("image"),
3422
- imageId: z4.string().min(1),
3423
- name: z4.string().optional()
3424
- });
3425
- var youtubeVideoAssetSchema = z4.strictObject({
3426
- type: z4.literal("youtubeVideo"),
3427
- youtubeVideoId: z4.string().min(1),
3428
- name: z4.string().optional()
3429
- });
3430
- var sitelinkAssetSchema = z4.strictObject({
3431
- type: z4.literal("sitelink"),
3432
- linkText: z4.string().min(1).max(GOOGLE_ADS_LIMITS.asset.sitelinkLinkTextMax),
3433
- description1: z4.string().max(GOOGLE_ADS_LIMITS.asset.sitelinkDescriptionMax).optional(),
3434
- description2: z4.string().max(GOOGLE_ADS_LIMITS.asset.sitelinkDescriptionMax).optional(),
3435
- finalUrls: z4.array(httpsUrlSchema).min(1)
3436
- });
3437
- var calloutAssetSchema = z4.strictObject({
3438
- type: z4.literal("callout"),
3439
- calloutText: z4.string().min(1).max(GOOGLE_ADS_LIMITS.asset.calloutTextMax)
3440
- });
3441
- var structuredSnippetHeaderSchema = z4.string().min(1).transform((header, ctx) => {
3442
- const canonical = canonicalStructuredSnippetHeader(header);
3443
- if (!canonical) {
3444
- ctx.addIssue({
3445
- code: "custom",
3446
- message: `Google Ads does not accept "${header}" as a structured snippet header. Use one of: ${STRUCTURED_SNIPPET_HEADERS_EN.join(", ")} \u2014 or that header in the campaign's language.`
3447
- });
3448
- return z4.NEVER;
3449
- }
3450
- return canonical;
3451
- });
3452
- var structuredSnippetAssetSchema = z4.strictObject({
3453
- type: z4.literal("structuredSnippet"),
3454
- header: structuredSnippetHeaderSchema,
3455
- values: z4.array(z4.string().min(1).max(GOOGLE_ADS_LIMITS.asset.structuredSnippetValueMax)).min(GOOGLE_ADS_LIMITS.asset.structuredSnippetValuesMin).max(GOOGLE_ADS_LIMITS.asset.structuredSnippetValuesMax)
3456
- });
3457
- var callToActionAssetSchema = z4.strictObject({ type: z4.literal("callToAction"), callToAction: z4.string().min(1) });
3458
- var assetCreateSchema = z4.discriminatedUnion("type", [
3459
- textAssetSchema,
3460
- imageAssetSchema,
3461
- youtubeVideoAssetSchema,
3462
- sitelinkAssetSchema,
3463
- calloutAssetSchema,
3464
- structuredSnippetAssetSchema,
3465
- callToActionAssetSchema
3466
- ]);
3467
- var assetUpdateSchema = z4.strictObject({
3468
- name: z4.string().min(1).optional(),
3469
- linkText: z4.string().min(1).max(GOOGLE_ADS_LIMITS.asset.sitelinkLinkTextMax).optional(),
3470
- description1: z4.string().max(GOOGLE_ADS_LIMITS.asset.sitelinkDescriptionMax).optional(),
3471
- description2: z4.string().max(GOOGLE_ADS_LIMITS.asset.sitelinkDescriptionMax).optional(),
3472
- finalUrls: z4.array(httpsUrlSchema).min(1).optional(),
3473
- calloutText: z4.string().min(1).max(GOOGLE_ADS_LIMITS.asset.calloutTextMax).optional(),
3474
- header: structuredSnippetHeaderSchema.optional(),
3475
- values: z4.array(z4.string().min(1).max(GOOGLE_ADS_LIMITS.asset.structuredSnippetValueMax)).min(GOOGLE_ADS_LIMITS.asset.structuredSnippetValuesMin).max(GOOGLE_ADS_LIMITS.asset.structuredSnippetValuesMax).optional(),
3476
- callToAction: z4.string().min(1).optional(),
3477
- text: z4.string().min(1).optional()
3478
- }).refine((p) => Object.values(p).some((v) => v !== void 0), "update needs at least one field");
3479
- var assetLinkAttachSchema = z4.strictObject({
3480
- level: z4.enum(["campaign", "adGroup", "customer"]),
3481
- parent: refSchema2.optional(),
3482
- asset: refSchema2,
3483
- // A plain string, not `z.enum(ASSET_FIELD_TYPES)`, so the image refusal below can answer with
3484
- // the reason instead of an enum listing. An agent reaching for AD_IMAGE is following Google's
3485
- // own documentation; "Invalid option: expected one of …" sends it to guess another field type,
3486
- // which is the failure this whole refusal exists to end.
3487
- fieldType: z4.string().min(1)
3488
- }).superRefine((value, ctx) => {
3489
- if (value.level !== "customer" && !value.parent) {
3490
- ctx.addIssue({
3491
- code: z4.ZodIssueCode.custom,
3492
- path: ["parent"],
3493
- message: `parent is required for a ${value.level}-level asset link (--parent-ref)`
3494
- });
3495
- }
3496
- if (value.fieldType === "BUSINESS_LOGO" && value.level === "adGroup") {
3497
- ctx.addIssue({ code: z4.ZodIssueCode.custom, path: ["fieldType"], message: BUSINESS_LOGO_LEVEL_MESSAGE });
3498
- } else if (isImageAssetLinkFieldType(value.fieldType)) {
3499
- } else if (!ASSET_FIELD_TYPES.includes(value.fieldType)) {
3500
- ctx.addIssue({
3501
- code: z4.ZodIssueCode.custom,
3502
- path: ["fieldType"],
3503
- message: `expected one of ${ASSET_FIELD_TYPES.join(" | ")}`
3504
- });
3505
- }
3506
- });
3507
- var assetGroupCreateSchema = z4.strictObject({
3508
- campaign: refSchema2,
3509
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.assetGroup.nameMax),
3510
- finalUrls: z4.array(httpsUrlSchema).min(1),
3511
- headlines: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.assetGroup.headlineTextMax) })).min(GOOGLE_ADS_LIMITS.assetGroup.headlinesMin).max(GOOGLE_ADS_LIMITS.assetGroup.headlinesMax),
3512
- longHeadlines: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.assetGroup.longHeadlineTextMax) })).min(GOOGLE_ADS_LIMITS.assetGroup.longHeadlinesMin).max(GOOGLE_ADS_LIMITS.assetGroup.longHeadlinesMax),
3513
- descriptions: z4.array(z4.strictObject({ text: z4.string().min(1).max(GOOGLE_ADS_LIMITS.assetGroup.descriptionTextMax) })).min(GOOGLE_ADS_LIMITS.assetGroup.descriptionsMin).max(GOOGLE_ADS_LIMITS.assetGroup.descriptionsMax),
3514
- businessName: z4.string().min(1).max(GOOGLE_ADS_LIMITS.assetGroup.businessNameMax),
3515
- imageAssets: z4.array(refSchema2).optional(),
3516
- squareImageAssets: z4.array(refSchema2).optional(),
3517
- portraitImageAssets: z4.array(refSchema2).optional(),
3518
- logoAssets: z4.array(refSchema2).optional(),
3519
- status: z4.enum(["ENABLED", "PAUSED"]).default("PAUSED")
3520
- });
3521
- var assetGroupAssetAttachSchema = z4.strictObject({
3522
- assetGroup: refSchema2,
3523
- asset: refSchema2,
3524
- fieldType: z4.enum(ASSET_GROUP_ASSET_FIELD_TYPES)
3525
- });
3526
- var assetGroupUpdateSchema = z4.strictObject({
3527
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.assetGroup.nameMax).optional(),
3528
- finalUrls: z4.array(httpsUrlSchema).min(1).optional(),
3529
- status: z4.enum(["ENABLED", "PAUSED", "REMOVED"]).optional()
3530
- }).refine((p) => Object.values(p).some((v) => v !== void 0), "update needs at least one field");
3531
- var audienceRuleConditionSchema = z4.union([
3532
- z4.strictObject({
3533
- name: z4.string().min(1).default("url__"),
3534
- operator: z4.enum(USER_LIST_STRING_OPERATORS),
3535
- value: z4.string().min(1)
3536
- }),
3537
- z4.strictObject({
3538
- name: z4.string().min(1),
3539
- operator: z4.enum(USER_LIST_NUMBER_OPERATORS),
3540
- value: z4.number()
3541
- })
3542
- ]);
3543
- var audienceRuleOperandSchema = z4.strictObject({
3544
- conditions: z4.array(audienceRuleConditionSchema).min(1),
3545
- lookbackWindowDays: z4.number().int().min(1).max(GOOGLE_ADS_LIMITS.audience.membershipLifeSpanDaysMax).optional()
3546
- });
3547
- var audienceRuleSchema = z4.strictObject({
3548
- include: z4.array(audienceRuleOperandSchema).min(1),
3549
- combine: z4.enum(["ALL", "ANY"]).default("ANY"),
3550
- exclude: z4.array(audienceRuleOperandSchema).optional(),
3551
- prefill: z4.boolean().optional()
3552
- });
3553
- function existingRefSchema2(message) {
3554
- return z4.union([z4.string().regex(RESOURCE_NAME_REGEX), z4.string().regex(NUMERIC_ID_REGEX)], { error: message });
3555
- }
3556
- var LOGICAL_OPERAND_MESSAGE = "a combined audience can only be made of audiences that already exist in the account \u2014 Google does not find one staged in this same draft. Publish those first, then stage the combination.";
3557
- var BASIC_ACTION_MESSAGE = "a converters audience can only be built from conversion actions that already exist in the account \u2014 Google refuses one staged in this same draft. Publish the conversion action first, then stage the audience.";
3558
- var audienceLogicSchema = z4.array(
3559
- z4.strictObject({
3560
- operator: z4.enum(USER_LIST_LOGICAL_OPERATORS),
3561
- audiences: z4.array(existingRefSchema2(LOGICAL_OPERAND_MESSAGE)).min(1)
3562
- })
3563
- ).min(1);
3564
- var LOOKALIKE_SEED_MESSAGE = "a lookalike's seed audiences must already exist in the account \u2014 Google takes them by id, which an audience staged in this draft does not have until it publishes. Publish the seed first, then stage the lookalike.";
3565
- var audienceLookalikeSchema = z4.strictObject({
3566
- seedAudiences: z4.array(existingRefSchema2(LOOKALIKE_SEED_MESSAGE)).min(1),
3567
- expansion: z4.enum(LOOKALIKE_EXPANSION_LEVELS).default("BALANCED"),
3568
- countryCodes: z4.array(z4.string().regex(/^[A-Z]{2}$/, "a two-letter country code, e.g. ES")).optional()
3569
- });
3570
- var AUDIENCE_TYPE_SOURCE = {
3571
- CRM_BASED: void 0,
3572
- RULE_BASED: "rule",
3573
- LOGICAL: "logic",
3574
- BASIC: "conversionActions",
3575
- LOOKALIKE: "lookalike"
3576
- };
3577
- var AUDIENCE_SOURCE_NEEDED = {
3578
- rule: 'a website-visitor audience (RULE_BASED) needs a "rule" \u2014 who joins, e.g. {"include":[{"conditions":[{"operator":"CONTAINS","value":"/pricing"}]}]}',
3579
- logic: 'a combined audience (LOGICAL) needs "logic" \u2014 the audiences it is made of, e.g. [{"operator":"ANY","audiences":["<audience id>","<audience id>"]}]',
3580
- conversionActions: 'a converters audience (BASIC) needs "conversionActions" \u2014 the conversion actions whose converters join it (Google refuses one with none)',
3581
- lookalike: 'a lookalike audience needs "lookalike" \u2014 {"seedAudiences":["<audience id>"],"expansion":"BALANCED","countryCodes":["ES"]}'
3582
- };
3583
- var CRM_NO_EXPIRY_DAYS = 1e4;
3584
- function membershipLifeSpanRefusal(type, days) {
3585
- if (type === "RULE_BASED") {
3586
- return "Google ignores membershipLifeSpanDays on a website-visitor audience \u2014 how long someone stays is each include group's lookbackWindowDays. Set it there instead.";
3587
- }
3588
- if (type === "LOGICAL") {
3589
- return "Google ignores membershipLifeSpanDays on a combined audience \u2014 membership follows the audiences it is made of.";
3590
- }
3591
- return days === CRM_NO_EXPIRY_DAYS && type !== "CRM_BASED" ? `${CRM_NO_EXPIRY_DAYS} days (never expires) exists only on a customer list` : void 0;
3592
- }
3593
- var audienceCreateSchema = z4.strictObject({
3594
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.audience.nameMax),
3595
- type: z4.enum(USER_LIST_TYPES).default("BASIC"),
3596
- description: z4.string().optional(),
3597
- /** Customer-match members (crm-based) — file-first for large lists. */
3598
- members: z4.array(z4.record(z4.string(), z4.string())).optional(),
3599
- sourceFileRef: z4.string().optional(),
3600
- /**
3601
- * How long a member stays in a converters or customer list, in days (`membership_life_span`;
3602
- * 10000 = never expires, customer lists only). Google ignores it on website-visitor and combined
3603
- * lists, so it is refused there.
3604
- */
3605
- membershipLifeSpanDays: z4.number().int().min(1).refine(
3606
- (days) => days <= GOOGLE_ADS_LIMITS.audience.membershipLifeSpanDaysMax || days === CRM_NO_EXPIRY_DAYS,
3607
- `membershipLifeSpanDays is 1\u2013${GOOGLE_ADS_LIMITS.audience.membershipLifeSpanDaysMax}, or ${CRM_NO_EXPIRY_DAYS} for a customer list that never expires`
3608
- ).optional(),
3609
- /** RULE_BASED: who joins the list. */
3610
- rule: audienceRuleSchema.optional(),
3611
- /** LOGICAL: the audiences this one combines. */
3612
- logic: audienceLogicSchema.optional(),
3613
- /** BASIC: the conversion actions whose converters join the list. */
3614
- conversionActions: z4.array(existingRefSchema2(BASIC_ACTION_MESSAGE)).min(1).optional(),
3615
- /** LOOKALIKE: the seed audiences and how far past them to reach. */
3616
- lookalike: audienceLookalikeSchema.optional()
3617
- }).superRefine((p, ctx) => {
3618
- if (p.membershipLifeSpanDays !== void 0) {
3619
- const refusal = membershipLifeSpanRefusal(p.type, p.membershipLifeSpanDays);
3620
- if (refusal) {
3621
- ctx.addIssue({ code: "custom", path: ["membershipLifeSpanDays"], message: refusal });
3622
- }
3623
- }
3624
- const own = AUDIENCE_TYPE_SOURCE[p.type];
3625
- for (const field of Object.keys(AUDIENCE_SOURCE_NEEDED)) {
3626
- const present = p[field] !== void 0;
3627
- if (field === own && !present) {
3628
- ctx.addIssue({ code: "custom", path: [field], message: AUDIENCE_SOURCE_NEEDED[field] ?? field });
3629
- }
3630
- if (field !== own && present) {
3631
- ctx.addIssue({
3632
- code: "custom",
3633
- path: [field],
3634
- message: `"${field}" belongs to another audience type, not ${p.type}`
3635
- });
3636
- }
3637
- }
3638
- });
3639
- var audienceCriterionAttachSchema = z4.strictObject({
3640
- level: z4.enum(["campaign", "adGroup"]),
3641
- parent: refSchema2,
3642
- /** An audience list (`userLists/{id}`, or a `g_temp_*` list staged in this chat). */
3643
- userList: refSchema2.optional(),
3644
- /** An interest or in-market segment (`userInterests/{id}`) — read ids with `--preset audiences`. */
3645
- userInterest: z4.union([z4.string().regex(RESOURCE_NAME_REGEX), z4.string().regex(NUMERIC_ID_REGEX)]).optional(),
3646
- /** A custom segment (`customAudiences/{id}`) built in Google Ads. */
3647
- customAudience: z4.union([z4.string().regex(RESOURCE_NAME_REGEX), z4.string().regex(NUMERIC_ID_REGEX)]).optional(),
3648
- negative: z4.boolean().default(false)
3649
- }).refine(
3650
- (p) => [p.userList, p.userInterest, p.customAudience].filter((v) => v !== void 0).length === 1,
3651
- "name exactly one audience: userList, userInterest or customAudience"
3652
- );
3653
- var targetRestrictionSchema = z4.strictObject({
3654
- targetingDimension: z4.enum(TARGETING_DIMENSIONS),
3655
- bidOnly: z4.boolean()
3656
- });
3657
- var targetingSettingSetSchema = z4.strictObject({
3658
- level: z4.enum(["campaign", "adGroup"]),
3659
- parent: refSchema2,
3660
- audience: z4.enum(["OBSERVATION", "TARGETING"]),
3661
- preserved: z4.array(targetRestrictionSchema).optional()
3662
- });
3663
- var conversionActionCreateSchema = z4.strictObject({
3664
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.conversionAction.nameMax),
3665
- type: z4.enum(CONVERSION_ACTION_TYPES, {
3666
- error: retiredChoiceError({ GOOGLE_ANALYTICS_4_CUSTOM: GA4_CONVERSION_CREATE_MESSAGE })
3667
- }).optional(),
3668
- category: z4.enum(CONVERSION_ACTION_CATEGORIES).optional(),
3669
- countingType: z4.enum(CONVERSION_COUNTING_TYPES).optional(),
3670
- defaultValueMicros: microsSchema.optional(),
3671
- defaultCurrencyCode: z4.string().length(3).optional(),
3672
- clickThroughLookbackWindowDays: z4.number().int().positive().optional(),
3673
- viewThroughLookbackWindowDays: z4.number().int().positive().optional(),
3674
- status: z4.enum(["ENABLED", "PAUSED"]).optional(),
3675
- /**
3676
- * Primary = Google bids toward this conversion; secondary = it is only reported ("Primary action
3677
- * used for bidding optimization" / "Secondary action not used for bidding optimization" in the UI).
3678
- * Resolves to SECONDARY on create, deliberately: left unset ON THE WIRE, Google picks — and in a
3679
- * live account some actions were born primary and some secondary, so a new action could silently
3680
- * join the bidding target of every Maximize-Conversions campaign and redirect real spend. Nothing
3681
- * exists yet to flip on a create, so a fixed resolved value is safe here in a way it would never be
3682
- * on an update: joining bidding becomes an explicit `primaryForGoal: true`, never an accident.
3683
- */
3684
- primaryForGoal: z4.boolean().optional()
3685
- });
3686
- var HIDDEN_CONVERSION_STATUS_ERROR = 'Google rejects status HIDDEN on every conversion action write ("the field\'s value is on a deny-list"), so it is not part of this contract. To stop automated bidding optimizing toward a conversion while it keeps measuring, demote it instead: `baker ads google conversions update --target <id> --no-primary`. To stop it counting altogether, use `status: "REMOVED"`. Pick one of those and carry on with the rest of the job.';
3687
- var conversionActionUpdateSchema = z4.strictObject({
3688
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.conversionAction.nameMax).optional(),
3689
- category: z4.enum(CONVERSION_ACTION_CATEGORIES).optional(),
3690
- countingType: z4.enum(CONVERSION_COUNTING_TYPES).optional(),
3691
- defaultValueMicros: microsSchema.optional(),
3692
- defaultCurrencyCode: z4.string().length(3).optional(),
3693
- clickThroughLookbackWindowDays: z4.number().int().positive().optional(),
3694
- viewThroughLookbackWindowDays: z4.number().int().positive().optional(),
3695
- /**
3696
- * `HIDDEN` is deliberately not writable. Google returns it — an action hidden long ago reads
3697
- * back as HIDDEN, and every read path keeps it — but it is on the API's deny-list for a write:
3698
- * `conversion_action.status = HIDDEN` fails with "The field's value is on a deny-list for this
3699
- * field" even on an ordinary WEBPAGE action with nothing else wrong. Offering it made it the
3700
- * obvious pick for an agent told to retire an action gently, and the whole cleanup published
3701
- * nothing.
3702
- */
3703
- status: z4.enum(["ENABLED", "REMOVED"], {
3704
- error: (issue) => issue.input === "HIDDEN" ? HIDDEN_CONVERSION_STATUS_ERROR : void 0
3705
- }).optional(),
3706
- /** Promote to primary (bid toward it) or demote to secondary (report only). No default — an
3707
- * update must never change an existing action's bidding role unless it was asked to. */
3708
- primaryForGoal: z4.boolean().optional()
3709
- }).refine((p) => Object.values(p).some((v) => v !== void 0), "update needs at least one field").refine(
3710
- (p) => p.status !== "REMOVED" || Object.entries(p).every(([k, v]) => k === "status" || v === void 0),
3711
- 'removing a conversion action cannot be combined with other edits \u2014 `status: "REMOVED"` deletes it, so a name or category sent alongside would be silently discarded. Stage the removal on its own.'
3712
- );
3713
- var conversionGoalSetSchema = z4.strictObject({
3714
- category: z4.enum(CONVERSION_ACTION_CATEGORIES),
3715
- origin: z4.enum(CONVERSION_ORIGINS),
3716
- /** True = conversions of this category/origin count toward automated bidding; false = reported only. */
3717
- biddable: z4.boolean()
3718
- });
3719
- var PORTFOLIO_TARGET_CPC_MESSAGE = "portfolio strategies cannot be Target CPC \u2014 it is set on the Demand Gen campaign itself";
3720
- function portfolioTypeRefusal(type) {
3721
- if (type === void 0 || type === "MANUAL_CPC" || type === "TARGET_CPC" || PORTFOLIO_STRATEGY_TYPES.includes(type)) {
3722
- return void 0;
3723
- }
3724
- return `a portfolio strategy cannot be ${type} \u2014 Google has no portfolio form of it. Portfolios are ${PORTFOLIO_STRATEGY_TYPES.join(", ")}; set ${type} on the campaign itself.`;
3725
- }
3726
- var biddingStrategyCreateSchema = z4.strictObject({
3727
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.biddingStrategy.nameMax),
3728
- config: biddingConfigSchema
3729
- }).superRefine((p, ctx) => {
3730
- if (p.config.type === "MANUAL_CPC") {
3731
- ctx.addIssue({ code: "custom", path: ["config", "type"], message: "portfolio strategies cannot be Manual CPC" });
3732
- }
3733
- if (p.config.type === "TARGET_CPC") {
3734
- ctx.addIssue({ code: "custom", path: ["config", "type"], message: PORTFOLIO_TARGET_CPC_MESSAGE });
3735
- }
3736
- const typeRefusal = portfolioTypeRefusal(p.config.type);
3737
- if (typeRefusal) {
3738
- ctx.addIssue({ code: "custom", path: ["config", "type"], message: typeRefusal });
3739
- }
3740
- addTargetImpressionShareIssues(p.config, "config", ctx);
3741
- });
3742
- var biddingStrategyUpdateSchema = z4.strictObject({
3743
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.biddingStrategy.nameMax).optional(),
3744
- config: biddingConfigSchema.optional()
3745
- }).superRefine((p, ctx) => {
3746
- if (Object.values(p).every((v) => v === void 0)) {
3747
- ctx.addIssue({ code: "custom", message: "update needs at least one field" });
3748
- }
3749
- if (p.config?.type === "TARGET_CPC") {
3750
- ctx.addIssue({ code: "custom", path: ["config", "type"], message: PORTFOLIO_TARGET_CPC_MESSAGE });
3751
- }
3752
- const typeRefusal = portfolioTypeRefusal(p.config?.type);
3753
- if (typeRefusal) {
3754
- ctx.addIssue({ code: "custom", path: ["config", "type"], message: typeRefusal });
3755
- }
3756
- });
3757
- var labelCreateSchema = z4.strictObject({
3758
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.label.nameMax),
3759
- backgroundColor: z4.string().regex(/^#[0-9A-Fa-f]{6}$/).optional(),
3760
- description: z4.string().optional()
3761
- });
3762
- var labelUpdateSchema = z4.strictObject({
3763
- name: z4.string().min(1).max(GOOGLE_ADS_LIMITS.label.nameMax).optional(),
3764
- backgroundColor: z4.string().regex(/^#[0-9A-Fa-f]{6}$/).optional(),
3765
- description: z4.string().optional()
3766
- }).refine((p) => Object.values(p).some((v) => v !== void 0), "update needs at least one field");
3767
- var ASSET_LABEL_MESSAGE = "Google Ads has no labels on assets \u2014 its API offers labels on campaigns, ad groups, ads and keywords only. Label the campaign or ad group that uses the asset instead, or name the asset so it can be found; carry on with the rest of the job.";
3768
- var ACCOUNT_LABEL_MESSAGE = "Google puts a label on an account only from the manager account above it, and Baker works inside the advertiser account \u2014 so this cannot be staged. Label the campaigns instead, or tell the user to label the account from their manager account in Google Ads; carry on with the rest of the job.";
3769
- var LABEL_LEVELS = ["campaign", "adGroup", "ad", "keyword"];
3770
- var COMPOSITE_LABEL_PARENT = {
3771
- ad: { pattern: /^customers\/\d+\/adGroupAds\/\d+~\d+$/, shape: "customers/{cid}/adGroupAds/{adGroupId}~{adId}" },
3772
- keyword: {
3773
- pattern: /^customers\/\d+\/adGroupCriteria\/\d+~\d+$/,
3774
- shape: "customers/{cid}/adGroupCriteria/{adGroupId}~{criterionId}"
3775
- }
3776
- };
3777
- var labelAttachSchema = z4.strictObject({
3778
- level: z4.enum(LABEL_LEVELS, {
3779
- error: retiredChoiceError({ asset: ASSET_LABEL_MESSAGE, customer: ACCOUNT_LABEL_MESSAGE })
3780
- }),
3781
- parent: refSchema2,
3782
- label: refSchema2
3783
- }).superRefine((p, ctx) => {
3784
- const composite = COMPOSITE_LABEL_PARENT[p.level];
3785
- if (composite && !composite.pattern.test(p.parent)) {
3786
- ctx.addIssue({
3787
- code: "custom",
3788
- path: ["parent"],
3789
- message: `a label goes on an existing ${p.level === "ad" ? "ad" : "keyword"} named by its full resource name \u2014 ${composite.shape} (read it from the row's resource_name). One created in this chat can be labelled after it is published.`
3790
- });
3791
- }
3792
- });
3793
- function refineCriterion(level, options) {
3794
- return (spec, ctx, path) => {
3795
- for (const issue of criterionSpecIssues(spec)) {
3796
- ctx.addIssue({ code: "custom", path: [...path, ...issue.path], message: issue.message });
3797
- }
3798
- const message = criterionLevelIssue(spec, level, options) ?? criterionBidIssue(spec, options.negative);
3799
- if (message) {
3800
- ctx.addIssue({ code: "custom", path, message });
3801
- }
3802
- };
3803
- }
3804
- var campaignCriterionAddSchema = z4.strictObject({
3805
- campaign: refSchema2,
3806
- negative: z4.boolean().default(false),
3807
- criterion: criterionSpecSchema
3808
- }).superRefine((val, ctx) => {
3809
- refineCriterion("campaign", { negative: val.negative })(val.criterion, ctx, ["criterion"]);
3810
- });
3811
- var campaignCriterionUpdateSchema = z4.strictObject({
3812
- bidModifier: bidModifierSchema
3813
- });
3814
- var adGroupCriterionAddSchema = z4.strictObject({
3815
- adGroup: refSchema2,
3816
- negative: z4.boolean().default(false),
3817
- criterion: criterionSpecSchema,
3818
- status: z4.enum(["ENABLED", "PAUSED"]).optional(),
3819
- cpcBidMicros: microsSchema.optional()
3820
- }).superRefine((val, ctx) => {
3821
- refineCriterion("adGroup", { negative: val.negative })(val.criterion, ctx, ["criterion"]);
3822
- if (val.negative && (val.status !== void 0 || val.cpcBidMicros !== void 0)) {
3823
- ctx.addIssue({
3824
- code: "custom",
3825
- path: [val.status !== void 0 ? "status" : "cpcBidMicros"],
3826
- message: "an exclusion has no status or bid \u2014 Google refuses either on a negative criterion"
3827
- });
3828
- }
3829
- });
3830
- var adGroupCriterionUpdateSchema = z4.strictObject({
3831
- bidModifier: criterionBidModifierSchema.optional(),
3832
- cpcBidMicros: microsSchema.optional(),
3833
- status: z4.enum(["ENABLED", "PAUSED"]).optional()
3834
- }).refine((p) => Object.values(p).some((v) => v !== void 0), "update needs at least one field");
3835
- var adGroupBidModifierAddSchema = z4.strictObject({
3836
- adGroup: refSchema2,
3837
- device: z4.enum(DEVICE_TYPES),
3838
- bidModifier: bidModifierSchema
3839
- });
3840
- var adGroupBidModifierUpdateSchema = z4.strictObject({ bidModifier: bidModifierSchema });
3841
- var customerNegativeCriterionAddSchema = z4.strictObject({ criterion: criterionSpecSchema }).superRefine((val, ctx) => {
3842
- for (const issue of criterionSpecIssues(val.criterion)) {
3843
- ctx.addIssue({ code: "custom", path: ["criterion", ...issue.path], message: issue.message });
3844
- }
3845
- const message = criterionLevelIssue(val.criterion, "account", { negative: true }) ?? criterionBidIssue(val.criterion, true);
3846
- if (message) {
3847
- ctx.addIssue({ code: "custom", path: ["criterion"], message });
3848
- }
3849
- });
3850
- var GOOGLE_DRAFT_OP_KINDS = [
3851
- "google.customer.update",
3852
- "google.budget.create",
3853
- "google.budget.update",
3854
- "google.budget.remove",
3855
- "google.campaign.create",
3856
- "google.campaign.update",
3857
- "google.campaign.pause",
3858
- "google.campaign.resume",
3859
- "google.campaign.remove",
3860
- "google.campaign.enableBrandGuidelines",
3861
- "google.adGroup.create",
3862
- "google.adGroup.update",
3863
- "google.adGroup.pause",
3864
- "google.adGroup.resume",
3865
- "google.adGroup.remove",
3866
- "google.keyword.add",
3867
- "google.keyword.update",
3868
- "google.keyword.remove",
3869
- "google.negativeKeyword.add",
3870
- "google.negativeKeyword.update",
3871
- "google.negativeKeyword.remove",
3872
- "google.sharedSet.create",
3873
- "google.sharedSet.update",
3874
- "google.sharedSet.remove",
3875
- "google.sharedSetMember.add",
3876
- "google.sharedSetMember.remove",
3877
- "google.campaignSharedSet.attach",
3878
- "google.campaignSharedSet.detach",
3879
- "google.ad.create",
3880
- "google.ad.update",
3881
- "google.ad.pause",
3882
- "google.ad.resume",
3883
- "google.ad.remove",
3884
- "google.asset.create",
3885
- "google.asset.update",
3886
- "google.assetLink.attach",
3887
- "google.assetLink.detach",
3888
- "google.assetGroup.create",
3889
- "google.assetGroup.update",
3890
- "google.assetGroupAsset.attach",
3891
- "google.assetGroupAsset.detach",
3892
- "google.audience.create",
3893
- "google.audienceCriterion.attach",
3894
- "google.audienceCriterion.detach",
3895
- "google.targetingSetting.set",
3896
- "google.conversionAction.create",
3897
- "google.conversionAction.update",
3898
- "google.conversionAction.goal",
3899
- "google.conversion.upload",
3900
- "google.biddingStrategy.create",
3901
- "google.biddingStrategy.update",
3902
- "google.biddingStrategy.remove",
3903
- "google.label.create",
3904
- "google.label.update",
3905
- "google.label.remove",
3906
- "google.label.attach",
3907
- "google.label.detach",
3908
- "google.campaignCriterion.add",
3909
- "google.campaignCriterion.update",
3910
- "google.campaignCriterion.remove",
3911
- "google.adGroupCriterion.add",
3912
- "google.adGroupCriterion.update",
3913
- "google.adGroupCriterion.remove",
3914
- "google.adGroupBidModifier.add",
3915
- "google.adGroupBidModifier.update",
3916
- "google.adGroupBidModifier.remove",
3917
- "google.customerNegativeCriterion.add",
3918
- "google.customerNegativeCriterion.remove"
3919
- ];
3920
- var googleDraftOpKindSchema = z4.enum(GOOGLE_DRAFT_OP_KINDS);
3921
- function createOp(kind, payload) {
3922
- return z4.object({ kind: z4.literal(kind), customerId: customerIdSchema, payload });
3923
- }
3924
- function updateOp(kind, payload) {
3925
- return z4.object({ kind: z4.literal(kind), customerId: customerIdSchema, target: targetRefSchema, payload });
3926
- }
3927
- function targetOp(kind) {
3928
- return z4.object({ kind: z4.literal(kind), customerId: customerIdSchema, target: targetRefSchema });
3929
- }
3930
- var googleDraftOpInputSchema = z4.discriminatedUnion("kind", [
3931
- z4.object({
3932
- kind: z4.literal("google.customer.update"),
3933
- customerId: customerIdSchema,
3934
- target: z4.string(),
3935
- payload: customerUpdateSchema
3936
- }).refine((op) => op.target.replace(/^customers\//, "") === op.customerId, {
3937
- path: ["target"],
3938
- message: CUSTOMER_TARGET_MESSAGE
3939
- }),
3940
- createOp("google.budget.create", budgetCreateSchema),
3941
- updateOp("google.budget.update", budgetUpdateSchema),
3942
- targetOp("google.budget.remove"),
3943
- createOp("google.campaign.create", campaignCreateSchema),
3944
- updateOp("google.campaign.update", campaignUpdateSchema),
3945
- targetOp("google.campaign.pause"),
3946
- targetOp("google.campaign.resume"),
3947
- targetOp("google.campaign.remove"),
3948
- updateOp("google.campaign.enableBrandGuidelines", campaignEnableBrandGuidelinesSchema),
3949
- createOp("google.adGroup.create", adGroupCreateSchema),
3950
- updateOp("google.adGroup.update", adGroupUpdateSchema),
3951
- targetOp("google.adGroup.pause"),
3952
- targetOp("google.adGroup.resume"),
3953
- targetOp("google.adGroup.remove"),
3954
- createOp("google.keyword.add", keywordAddSchema),
3955
- updateOp("google.keyword.update", keywordUpdateSchema),
3956
- targetOp("google.keyword.remove"),
3957
- createOp("google.negativeKeyword.add", negativeKeywordAddSchema),
3958
- updateOp("google.negativeKeyword.update", negativeKeywordUpdateSchema),
3959
- targetOp("google.negativeKeyword.remove"),
3960
- createOp("google.sharedSet.create", sharedSetCreateSchema),
3961
- updateOp("google.sharedSet.update", sharedSetUpdateSchema),
3962
- targetOp("google.sharedSet.remove"),
3963
- createOp("google.sharedSetMember.add", sharedSetMemberAddSchema),
3964
- targetOp("google.sharedSetMember.remove"),
3965
- createOp("google.campaignSharedSet.attach", campaignSharedSetAttachSchema),
3966
- targetOp("google.campaignSharedSet.detach"),
3967
- createOp("google.ad.create", adCreateSchema),
3968
- updateOp("google.ad.update", adUpdateSchema),
3969
- targetOp("google.ad.pause"),
3970
- targetOp("google.ad.resume"),
3971
- targetOp("google.ad.remove"),
3972
- createOp("google.asset.create", assetCreateSchema),
3973
- updateOp("google.asset.update", assetUpdateSchema),
3974
- createOp("google.assetLink.attach", assetLinkAttachSchema),
3975
- targetOp("google.assetLink.detach"),
3976
- createOp("google.assetGroup.create", assetGroupCreateSchema),
3977
- updateOp("google.assetGroup.update", assetGroupUpdateSchema),
3978
- createOp("google.assetGroupAsset.attach", assetGroupAssetAttachSchema),
3979
- targetOp("google.assetGroupAsset.detach"),
3980
- createOp("google.audience.create", audienceCreateSchema),
3981
- createOp("google.audienceCriterion.attach", audienceCriterionAttachSchema),
3982
- targetOp("google.audienceCriterion.detach"),
3983
- createOp("google.targetingSetting.set", targetingSettingSetSchema),
3984
- createOp("google.conversionAction.create", conversionActionCreateSchema),
3985
- updateOp("google.conversionAction.update", conversionActionUpdateSchema),
3986
- createOp("google.conversionAction.goal", conversionGoalSetSchema),
3987
- createOp("google.conversion.upload", conversionUploadSchema),
3988
- createOp("google.biddingStrategy.create", biddingStrategyCreateSchema),
3989
- updateOp("google.biddingStrategy.update", biddingStrategyUpdateSchema),
3990
- targetOp("google.biddingStrategy.remove"),
3991
- createOp("google.label.create", labelCreateSchema),
3992
- updateOp("google.label.update", labelUpdateSchema),
3993
- targetOp("google.label.remove"),
3994
- createOp("google.label.attach", labelAttachSchema),
3995
- targetOp("google.label.detach"),
3996
- createOp("google.campaignCriterion.add", campaignCriterionAddSchema),
3997
- updateOp("google.campaignCriterion.update", campaignCriterionUpdateSchema),
3998
- targetOp("google.campaignCriterion.remove"),
3999
- createOp("google.adGroupCriterion.add", adGroupCriterionAddSchema),
4000
- updateOp("google.adGroupCriterion.update", adGroupCriterionUpdateSchema),
4001
- targetOp("google.adGroupCriterion.remove"),
4002
- createOp("google.adGroupBidModifier.add", adGroupBidModifierAddSchema),
4003
- updateOp("google.adGroupBidModifier.update", adGroupBidModifierUpdateSchema),
4004
- targetOp("google.adGroupBidModifier.remove"),
4005
- createOp("google.customerNegativeCriterion.add", customerNegativeCriterionAddSchema),
4006
- targetOp("google.customerNegativeCriterion.remove")
4007
- ]);
4008
-
4009
- // ../api/src/ads-google/wire.ts
4010
- import { z as z5 } from "zod";
4011
- var googleWriteModeSchema = z5.enum(["live", "simulated"]);
4012
- var publishVerificationSchema = z5.object({
4013
- status: z5.enum(["confirmed", "unconfirmed", "drifted"]),
4014
- note: z5.string().optional(),
4015
- checkedAt: z5.number()
4016
- });
4017
- var googleDraftOpResultSchema = z5.object({
4018
- status: z5.enum(["applied", "simulated", "failed", "skipped"]),
4019
- resourceName: z5.string().optional(),
4020
- error: z5.string().optional(),
4021
- skippedBecause: z5.string().optional(),
4022
- executedAt: z5.number().optional(),
4023
- verification: publishVerificationSchema.optional()
4024
- });
4025
- var googleDraftStageRequestSchema = z5.object({
4026
- chatId: z5.string(),
4027
- op: googleDraftOpInputSchema
4028
- });
4029
- var googleDraftStageResponseSchema = z5.discriminatedUnion("staged", [
4030
- z5.object({
4031
- staged: z5.literal(true),
4032
- ref: z5.string(),
4033
- kind: googleDraftOpKindSchema,
4034
- mode: googleWriteModeSchema,
4035
- dependsOn: z5.array(z5.string()),
4036
- summary: z5.string(),
4037
- warnings: z5.array(z5.string()),
4038
- /** True when the op amended an already-staged op in place instead of appending a new one. */
4039
- amended: z5.boolean().optional()
4040
- }),
4041
- z5.object({
4042
- staged: z5.literal(false),
4043
- noop: z5.literal(true),
4044
- kind: googleDraftOpKindSchema,
4045
- mode: googleWriteModeSchema,
4046
- summary: z5.string(),
4047
- reason: z5.string()
4048
- })
4049
- ]);
4050
- var googleDraftAmendRequestSchema = z5.object({
4051
- chatId: z5.string(),
4052
- ref: z5.string(),
4053
- patch: z5.record(z5.string(), z5.unknown())
4054
- });
4055
- var googleDraftShowRequestSchema = z5.object({
4056
- chatId: z5.string(),
4057
- ref: z5.string()
4058
- });
4059
- var GOOGLE_DRAFT_BATCH_MAX = 500;
4060
- var OP_TOO_LARGE_MESSAGE_START = "This Google Ads change is too large to stage";
4061
- var OP_TOO_LARGE_FIX = "Nothing from this call was staged. Do not retry it as it is. Split the change that is too large into several smaller ones (for an audience upload, several smaller lists of members), stage those, and carry on with the rest of the job.";
4062
- var googleDraftStageBatchRequestSchema = z5.object({
4063
- chatId: z5.string(),
4064
- ops: z5.array(googleDraftOpInputSchema).min(1).max(GOOGLE_DRAFT_BATCH_MAX)
4065
- });
4066
- var googleDraftStageBatchResponseSchema = z5.object({
4067
- staged: z5.literal(true),
4068
- mode: googleWriteModeSchema,
4069
- count: z5.number(),
4070
- ops: z5.array(
4071
- z5.object({
4072
- ref: z5.string(),
4073
- kind: googleDraftOpKindSchema,
4074
- dependsOn: z5.array(z5.string()),
4075
- summary: z5.string(),
4076
- warnings: z5.array(z5.string())
4077
- })
4078
- ),
4079
- skipped: z5.array(z5.object({ kind: googleDraftOpKindSchema, summary: z5.string(), reason: z5.string() })).optional()
4080
- });
4081
- var googleDraftAmendBatchRequestSchema = z5.object({
4082
- chatId: z5.string(),
4083
- amends: z5.array(z5.object({ ref: z5.string().min(1), patch: z5.record(z5.string(), z5.unknown()) })).min(1).max(GOOGLE_DRAFT_BATCH_MAX)
4084
- });
4085
- var googleDraftAmendBatchResponseSchema = z5.object({
4086
- amended: z5.literal(true),
4087
- mode: googleWriteModeSchema,
4088
- count: z5.number(),
4089
- ops: z5.array(
4090
- z5.object({
4091
- ref: z5.string(),
4092
- kind: googleDraftOpKindSchema,
4093
- dependsOn: z5.array(z5.string()),
4094
- summary: z5.string(),
4095
- warnings: z5.array(z5.string())
4096
- })
4097
- )
4098
- });
4099
- var googleDraftOpViewSchema = z5.object({
4100
- ref: z5.string(),
4101
- kind: googleDraftOpKindSchema,
4102
- customerId: z5.string(),
4103
- target: z5.string().optional(),
4104
- dependsOn: z5.array(z5.string()),
4105
- summary: z5.string(),
4106
- stagedAt: z5.number(),
4107
- result: googleDraftOpResultSchema.optional()
4108
- });
4109
- var googleDraftShowResponseSchema = z5.object({
4110
- op: googleDraftOpViewSchema.extend({
4111
- payload: z5.unknown().optional(),
4112
- warnings: z5.array(z5.string()).optional(),
4113
- annotations: z5.unknown().optional()
4114
- })
4115
- });
4116
- var googleDraftListRequestSchema = z5.object({
4117
- chatId: z5.string()
4118
- });
4119
- var googleDraftAdvisorySchema = z5.object({
4120
- scope: z5.enum(["campaign", "adGroup"]),
4121
- message: z5.string()
4122
- });
4123
- var googleDraftStatusCollectionSchema = z5.object({
4124
- label: z5.string(),
4125
- added: z5.number(),
4126
- removed: z5.number(),
4127
- /** Members that stay in the set with a changed value — a device's bid adjustment. Optional: a
4128
- * status tree built by an older backend carries no such count. */
4129
- updated: z5.number().optional(),
4130
- existing: z5.number()
4131
- });
4132
- var googleDraftChangeOperationSchema = z5.enum(["create", "update", "pause", "resume", "remove", "upload"]);
4133
- var googleDraftStatusNodeSchema = z5.lazy(
4134
- () => z5.object({
4135
- entity: z5.string(),
4136
- name: z5.string(),
4137
- customerId: z5.string(),
4138
- operation: googleDraftChangeOperationSchema.optional(),
4139
- existing: z5.boolean(),
4140
- collections: z5.array(googleDraftStatusCollectionSchema),
4141
- children: z5.array(googleDraftStatusNodeSchema),
4142
- warnings: z5.array(z5.string()).optional()
4143
- })
4144
- );
4145
- var googleDraftListResponseSchema = z5.object({
4146
- status: z5.enum(["active", "publishing", "applied", "discarded", "none"]),
4147
- mode: googleWriteModeSchema,
4148
- count: z5.number(),
4149
- ops: z5.array(googleDraftOpViewSchema),
4150
- /** Grouped campaign ▸ ad group ▸ ad tree for the readable CLI status view. */
4151
- tree: z5.array(googleDraftStatusNodeSchema).optional(),
4152
- /** Non-blocking completeness advisories for the whole draft. */
4153
- advisories: z5.array(googleDraftAdvisorySchema).optional()
4154
- });
4155
- var googleDraftRemoveRequestSchema = z5.object({
4156
- chatId: z5.string(),
4157
- ref: z5.string()
4158
- });
4159
- var googleDraftRemoveResponseSchema = z5.object({
4160
- /** The requested ref plus any dependents removed by cascade. */
4161
- removed: z5.array(z5.string())
4162
- });
4163
- var googleDraftClearRequestSchema = z5.object({
4164
- chatId: z5.string()
4165
- });
4166
- var googleDraftClearResponseSchema = z5.object({
4167
- cleared: z5.number()
4168
- });
4169
- var googleDraftValidateRequestSchema = z5.object({
4170
- chatId: z5.string(),
4171
- full: z5.boolean().optional()
4172
- });
4173
- var GOOGLE_DRAFT_VERDICTS = ["accepted", "refused", "blocked", "unchecked", "applied"];
4174
- var googleDraftVerdictSchema = z5.enum(GOOGLE_DRAFT_VERDICTS);
4175
- var googleDraftOpVerdictSchema = z5.object({
4176
- ref: z5.string(),
4177
- summary: z5.string(),
4178
- verdict: googleDraftVerdictSchema,
4179
- /** Why it was not accepted, in the words publish would record. */
4180
- reason: z5.string().optional(),
4181
- /** `full` only. */
4182
- kind: googleDraftOpKindSchema.optional(),
4183
- customerId: z5.string().optional(),
4184
- request: z5.unknown().optional(),
4185
- response: z5.unknown().optional()
4186
- });
4187
- var googleDraftValidateResponseSchema = z5.object({
4188
- status: z5.enum(["active", "publishing", "applied", "discarded", "none"]),
4189
- /** Requests sent to Google — one per publish window. */
4190
- requests: z5.number(),
4191
- counts: z5.record(googleDraftVerdictSchema, z5.number()),
4192
- /** Publish would send nothing: Baker holds the whole first publish when any op is refused before sending. */
4193
- publishHeld: z5.boolean(),
4194
- ops: z5.array(googleDraftOpVerdictSchema)
4195
- });
4196
- var googleFieldErrorSchema = z5.object({
4197
- path: z5.string(),
4198
- message: z5.string()
4199
- });
4200
- var googleDraftErrorResponseSchema = z5.object({
4201
- code: z5.string(),
4202
- error: z5.string(),
4203
- fields: z5.array(googleFieldErrorSchema).optional()
4204
- });
4205
-
4206
- export {
4207
- GOOGLE_ADS_QUERY_MAX_PAGE_SIZE,
4208
- POSITIVE_GEO_TARGET_TYPES,
4209
- NEGATIVE_GEO_TARGET_TYPES,
4210
- CALL_AD_RETIRED_MESSAGE,
4211
- CONVERSION_ACTION_CATEGORIES,
4212
- CONVERSION_ORIGINS,
4213
- ASSET_GROUP_ASSET_FIELD_TYPES,
4214
- toMicros,
4215
- NUMERIC_ID_REGEX,
4216
- CONVERSION_UPLOAD_MAX_ROWS,
4217
- parse,
4218
- getPublicSuffix,
4219
- GEO_TARGET_COUNTRIES,
4220
- LANGUAGE_CONSTANTS,
4221
- googleDraftOpInputSchema,
4222
- publishVerificationSchema,
4223
- GOOGLE_DRAFT_BATCH_MAX,
4224
- OP_TOO_LARGE_MESSAGE_START,
4225
- OP_TOO_LARGE_FIX
4226
- };
4227
- //# sourceMappingURL=chunk-ML7DLFFY.js.map