From ccd81d743e4a45c5609a461342c11c9a07a8ff6a Mon Sep 17 00:00:00 2001 From: AlexeerCT Date: Fri, 13 Mar 2026 11:02:49 -0500 Subject: [PATCH] Add invoice processing functionality and enhance models and routes - Introduced new routes for processing invoices in the router. - Added `InvoiceStatus` enum to manage invoice states. - Enhanced `InvoiceHeader` and `InvoiceFinancials` models with new fields for status tracking and total packages. - Updated schemas to include new fields for invoice processing. - Implemented API methods for processing invoices and checking process status in the frontend. - Removed outdated validation files related to invoice processing. --- .../modules/a24/balance_movements/models.py | 345 + .../api/v1/modules/a24/discharges/models.py | 370 + backend/api/v1/modules/a76/classes/dto.py | 10 + backend/api/v1/modules/a76/classes/models.py | 6 +- .../a76/general_catalogs/company/service.py | 19 + .../fractions/previous_fractions/models.py | 24 + .../fractions/previous_fractions/seed.py | 27112 ++++++++++++++++ .../units_of_measure/models.py | 3 +- .../a76/invoices/exports/validators/create.py | 95 - .../a76/invoices/exports/validators/update.py | 284 - .../invoices/imports/process/main_process.py | 285 + .../imports/process/pre_validators.py | 107 + .../a76/invoices/imports/process/routes.py | 75 + .../process/sub_process/assing_values.py | 99 + .../process/sub_process/review_classes.py | 163 + .../sub_process/review_exchange_rate.py | 67 + .../process/sub_process/review_rule_octave.py | 944 + .../process/sub_process/review_series.py | 93 + .../imports/process/sub_process/review_uma.py | 129 + .../process/sub_process/review_weights.py | 102 + .../a76/invoices/imports/process/task.py | 122 + backend/api/v1/modules/a76/invoices/models.py | 22 +- .../api/v1/modules/a76/invoices/schemas.py | 1 + backend/api/v1/modules/a76/router.py | 2 + .../a76/rule_octave/balances/__init__.py | 0 .../a76/rule_octave/balances/models.py | 56 + .../a76/rule_octave/fractions/models.py | 32 +- .../a76/rule_octave/permissions/models.py | 32 + backend/core/celery_app.py | 3 +- .../src/lib/api/dashboard/a76/invoices.ts | 24 + .../routes/dashboard/invoices/+page.svelte | 70 +- 31 files changed, 30281 insertions(+), 415 deletions(-) create mode 100644 backend/api/v1/modules/a24/balance_movements/models.py create mode 100644 backend/api/v1/modules/a24/discharges/models.py create mode 100644 backend/api/v1/modules/a76/general_catalogs/fractions/previous_fractions/models.py create mode 100644 backend/api/v1/modules/a76/general_catalogs/fractions/previous_fractions/seed.py delete mode 100644 backend/api/v1/modules/a76/invoices/exports/validators/create.py delete mode 100644 backend/api/v1/modules/a76/invoices/exports/validators/update.py create mode 100644 backend/api/v1/modules/a76/invoices/imports/process/main_process.py create mode 100644 backend/api/v1/modules/a76/invoices/imports/process/pre_validators.py create mode 100644 backend/api/v1/modules/a76/invoices/imports/process/routes.py create mode 100644 backend/api/v1/modules/a76/invoices/imports/process/sub_process/assing_values.py create mode 100644 backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_classes.py create mode 100644 backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_exchange_rate.py create mode 100644 backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_rule_octave.py create mode 100644 backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_series.py create mode 100644 backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_uma.py create mode 100644 backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_weights.py create mode 100644 backend/api/v1/modules/a76/invoices/imports/process/task.py create mode 100644 backend/api/v1/modules/a76/rule_octave/balances/__init__.py create mode 100644 backend/api/v1/modules/a76/rule_octave/balances/models.py diff --git a/backend/api/v1/modules/a24/balance_movements/models.py b/backend/api/v1/modules/a24/balance_movements/models.py new file mode 100644 index 00000000..a0d5d71c --- /dev/null +++ b/backend/api/v1/modules/a24/balance_movements/models.py @@ -0,0 +1,345 @@ +""" +Annex 24 - Balance Management Core +SQLAlchemy v2 + +Plugs into the existing schema: + invoice_header (a76.invoice_header) ← already exists + item_lines (a76.item_lines) ← already exists + +These 4 tables are ALL you need for balances: + + a24.balance_movement ← the ledger (append-only, never UPDATE) + a24.discharge_header ← one discharge per export/SM/CTM event + a24.discharge_detail ← one row per (export line × import lot consumed) + a24.discharge_scrap ← mermas, desperdicios, destrucciones + +Design rules: + 1. NEVER update balance_movement rows — only INSERT + 2. Balance = SUM of movements. No cached balance columns. + 3. Every discharge_detail row MUST reference a balance_movement row + 4. PEPS order is enforced via order_peps (monotonic, set on INSERT) +""" + +from __future__ import annotations + +import datetime +from decimal import Decimal +from enum import Enum +from typing import TYPE_CHECKING, List, Optional +from ..discharges.models import DischargeDetail + +from sqlalchemy import ( + BigInteger, + CheckConstraint, + Date, + ForeignKey, + Index, + Integer, + Numeric, + String, + UniqueConstraint, + text, +) +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from api.v1.common.base_models import TenantScopedMixin, TimestampMixin +from core.database import Base + +if TYPE_CHECKING: + from api.v1.modules.a76.invoices.models import InvoiceHeader + from api.v1.modules.a76.items.models import LineItem + from api.v1.modules.a76.parts.models import Part + + +# --------------------------------------------------------------------------- +# Enums +# --------------------------------------------------------------------------- + + +class MovementType(str, Enum): + # ── Positive (add to balance) ────────────────────────────────────────── + ENTRY = "entry" # Normal import entry + RETURN = "return" # Material returned to balance + POSITIVE_ADJUSTMENT = "pos_adj" # Physical inventory adjustment (+) + TRANSFER_IN = "transfer_in" # CTM/SM received (the receiving side) + REGIME_CHANGE_IN = "regime_chg_in" # Eg. temporary → definitive (entry side) + + # ── Negative (consume from balance) ─────────────────────────────────── + CONSUMPTION = "consumption" # Consumed in export (most common) + WASTE = "waste" # Merma de proceso + SCRAP = "scrap" # Desperdicio / scrap + DESTRUCTION = "destruction" # Destrucción oficial ante aduana + NEGATIVE_ADJUSTMENT = "neg_adj" # Physical inventory adjustment (-) + TRANSFER_OUT = "transfer_out" # CTM/SM sent (the sending side) + EXPIRATION = "expiration" # Balance cancelled due to deadline + REGIME_CHANGE_OUT = "regime_chg_out" # Eg. temporary → definitive (exit side) + + +# Which movement types reduce the balance (sign = -1) +NEGATIVE_MOVEMENTS = { + MovementType.CONSUMPTION, + MovementType.WASTE, + MovementType.SCRAP, + MovementType.DESTRUCTION, + MovementType.NEGATIVE_ADJUSTMENT, + MovementType.TRANSFER_OUT, + MovementType.EXPIRATION, + MovementType.REGIME_CHANGE_OUT, +} + +# Which types count toward "used" (CANTUSADA in Anexo 24 report) +USED_MOVEMENTS = { + MovementType.CONSUMPTION, + MovementType.WASTE, + MovementType.SCRAP, + MovementType.DESTRUCTION, +} + + + + +# --------------------------------------------------------------------------- +# 1. BalanceMovement (the ledger — APPEND ONLY) +# +# One row per atomic change to a specific import lot. +# Current balance of any lot = SUM of (signed quantity) over its rows. +# +# import_item_line_id → a76.item_lines.id (the import line = the "lot") +# import_invoice_id → a76.invoice_header.id (the import invoice) +# part_number_id → a76.parts.id (denormalized for PEPS index) +# source_item_line_id → a76.item_lines.id (export/SM/CTM line, if any) +# source_invoice_id → a76.invoice_header.id (export/SM/CTM invoice, if any) +# +# NOTE: No discharge_detail_id column. Navigate the other direction via +# DischargeDetail.movement_id to avoid a circular FK and keep this +# table truly append-only (no UPDATE ever needed). +# --------------------------------------------------------------------------- + +class BalanceMovement(Base, TenantScopedMixin, TimestampMixin): + """ + Core ledger table. NEVER update existing rows — only INSERT. + + Balance of a lot = SUM(quantity) WHERE sign=+1 (entries) + - SUM(quantity) WHERE sign=-1 (exits) + + Append-only rule is enforced at the application layer. + """ + + __tablename__ = "balance_movement" + __table_args__ = ( + UniqueConstraint( + "import_item_line_id", "order_peps", + name="uq_balance_movement_lot_peps", + ), + CheckConstraint("quantity > 0", name="ck_balance_movement_qty_positive"), + # PEPS lookup: "give me available lots for this part+regime, oldest first" + # part_number_id is denormalized here so this index is self-contained. + Index( + "ix_balmov_peps_lookup", + "tenant_id", "part_number_id", "movement_type", "order_peps", + postgresql_include=["import_item_line_id", "quantity", "value_me", "value_mn"], + ), + # Balance calculation per lot + Index("ix_balmov_lot", "import_item_line_id"), + # "What did this export consume?" + Index("ix_balmov_source", "source_invoice_id", "source_item_line_id"), + # Anexo 24 period reports + Index("ix_balmov_operation_date", "tenant_id", "operation_date", "movement_type"), + {"schema": "a24"}, + ) + + id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True) + + # ── The import lot this movement belongs to ──────────────────────────── + import_invoice_id: Mapped[int] = mapped_column( + ForeignKey("a76.invoice_header.id"), + comment="Import invoice (cabecera de importación)", + ) + import_item_line_id: Mapped[int] = mapped_column( + ForeignKey("a76.item_lines.id"), + comment="Import line item = the PEPS lot", + ) + + # ── Denormalized part reference — enables efficient PEPS index ───────── + # Must equal import_line.part_number_id. Set on INSERT, never changed. + part_number_id: Mapped[Optional[int]] = mapped_column( + ForeignKey("a76.parts.id"), + comment="Denormalized from item_lines.part_number_id. Enables PEPS index without joins.", + ) + + # ── What kind of movement ───────────────────────────────────────────── + movement_type: Mapped[MovementType] = mapped_column( + String(20), + comment="See MovementType enum. Determines sign and whether qty counts as used.", + ) + + # ── Quantity and value (always stored positive) ─────────────────────── + quantity: Mapped[Decimal] = mapped_column( + Numeric(19, 8), + comment="Always positive. Sign is inferred from movement_type via NEGATIVE_MOVEMENTS.", + ) + value_me: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8), comment="USD") + value_mn: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8), comment="MXN") + net_weight: Mapped[Optional[Decimal]] = mapped_column(Numeric(19, 8)) + + # ── Document that caused this movement ──────────────────────────────── + # NULL for ENTRY movements (the import invoice itself is the cause) + source_invoice_id: Mapped[Optional[int]] = mapped_column( + ForeignKey("a76.invoice_header.id"), + comment="Export / SM / CTM invoice. NULL for entries.", + ) + source_item_line_id: Mapped[Optional[int]] = mapped_column( + ForeignKey("a76.item_lines.id"), + comment="Specific line in the export / SM / CTM invoice.", + ) + + # ── PEPS ordering ───────────────────────────────────────────────────── + # Simplest approach: set order_peps = id (globally monotonic). + # Finer approach: use a per-part sequence or epoch-based value. + order_peps: Mapped[int] = mapped_column( + BigInteger, + comment="PEPS order within this lot. Lower = older = consumed first.", + ) + + # ── Business date of the operation ─────────────────────────────────── + operation_date: Mapped[datetime.date] = mapped_column( + Date, comment="Date of the actual business event, not DB insert." + ) + + notes: Mapped[Optional[str]] = mapped_column(String(300)) + + # ── Relationships ───────────────────────────────────────────────────── + import_invoice: Mapped["InvoiceHeader"] = relationship( + foreign_keys=[import_invoice_id], + ) + import_line: Mapped["LineItem"] = relationship( + foreign_keys=[import_item_line_id], + ) + part: Mapped[Optional["Part"]] = relationship( + foreign_keys=[part_number_id], + ) + source_invoice: Mapped[Optional["InvoiceHeader"]] = relationship( + foreign_keys=[source_invoice_id], + ) + source_line: Mapped[Optional["LineItem"]] = relationship( + foreign_keys=[source_item_line_id], + ) + # Back-reference: navigate to the detail that consumed this movement. + # Use viewonly=True — ownership lives on DischargeDetail.movement_id. + discharge_detail: Mapped[Optional["DischargeDetail"]] = relationship( + back_populates="movement", + foreign_keys="[DischargeDetail.movement_id]", + primaryjoin="BalanceMovement.id == DischargeDetail.movement_id", + viewonly=True, + ) + + + + + +# --------------------------------------------------------------------------- +# Repository helpers (copy to your service/repository layer) +# --------------------------------------------------------------------------- +# +# +# ── Current balance of a lot ───────────────────────────────────────────── +# +# from sqlalchemy import case, func, select +# +# def current_balance(session, import_item_line_id: int): +# sign = case( +# (BalanceMovement.movement_type.in_(NEGATIVE_MOVEMENTS), -1), +# else_=1, +# ) +# affects_used = BalanceMovement.movement_type.in_(USED_MOVEMENTS) +# return session.execute( +# select( +# func.sum(sign * BalanceMovement.quantity).label("current_balance"), +# func.sum( +# case((affects_used, BalanceMovement.quantity), else_=0) +# ).label("quantity_used"), +# func.sum( +# case((affects_used, BalanceMovement.value_me), else_=0) +# ).label("value_used_me"), +# ).where(BalanceMovement.import_item_line_id == import_item_line_id) +# ).one() +# +# +# ── PEPS resolver — call BEFORE inserting a CONSUMPTION movement ───────── +# +# def peps_lots_for(session, tenant_id, part_number_id, operation_type, qty_needed): +# """ +# Returns import lots in FIFO order with their available balance. +# Walk the list and consume until qty_needed is satisfied. +# """ +# sign = case( +# (BalanceMovement.movement_type.in_(NEGATIVE_MOVEMENTS), -1), +# else_=1, +# ) +# lot_balances = ( +# select( +# BalanceMovement.import_item_line_id, +# func.sum(sign * BalanceMovement.quantity).label("available"), +# func.min(BalanceMovement.order_peps).label("oldest_peps"), +# ) +# .where( +# BalanceMovement.tenant_id == tenant_id, +# BalanceMovement.part_number_id == part_number_id, +# ) +# .group_by(BalanceMovement.import_item_line_id) +# .having(func.sum(sign * BalanceMovement.quantity) > 0) +# .order_by("oldest_peps") +# .subquery() +# ) +# return session.execute(select(lot_balances)).all() +# +# +# ── Transaction flow for a new discharge ───────────────────────────────── +# +# def apply_discharge(session, export_invoice_id, lines): +# """ +# lines = [{"export_line_id": X, "part_number_id": Y, "quantity": Z}, ...] +# +# Two-step INSERT: movement first, then detail referencing it. +# No UPDATE on balance_movement — design rule 1 is preserved. +# """ +# header = DischargeHeader(source_invoice_id=export_invoice_id, ...) +# session.add(header) +# session.flush() # get header.id +# +# for line in lines: +# lots = peps_lots_for(session, ..., line["part_number_id"], qty_needed=line["quantity"]) +# remaining = line["quantity"] +# +# for lot in lots: +# consume = min(lot.available, remaining) +# +# # Step 1: insert movement +# mov = BalanceMovement( +# import_item_line_id = lot.import_item_line_id, +# part_number_id = line["part_number_id"], +# movement_type = MovementType.CONSUMPTION, +# quantity = consume, +# source_invoice_id = export_invoice_id, +# source_item_line_id = line["export_line_id"], +# order_peps = , +# operation_date = datetime.date.today(), +# ) +# session.add(mov) +# session.flush() # get mov.id +# +# # Step 2: insert detail referencing the movement +# det = DischargeDetail( +# discharge_header_id = header.id, +# export_item_line_id = line["export_line_id"], +# import_item_line_id = lot.import_item_line_id, +# movement_id = mov.id, # NOT NULL — set immediately +# quantity_discharged = consume, +# ) +# session.add(det) +# +# remaining -= consume +# if remaining <= 0: +# break +# +# session.commit() diff --git a/backend/api/v1/modules/a24/discharges/models.py b/backend/api/v1/modules/a24/discharges/models.py new file mode 100644 index 00000000..25152746 --- /dev/null +++ b/backend/api/v1/modules/a24/discharges/models.py @@ -0,0 +1,370 @@ +""" +Annex 24 - Balance Management Core +SQLAlchemy v2 + +Plugs into the existing schema: + invoice_header (a76.invoice_header) ← already exists + item_lines (a76.item_lines) ← already exists + +These 4 tables are ALL you need for balances: + + a24.balance_movement ← the ledger (append-only, never UPDATE) + a24.discharge_header ← one discharge per export/SM/CTM event + a24.discharge_detail ← one row per (export line × import lot consumed) + a24.discharge_scrap ← mermas, desperdicios, destrucciones + +Design rules: + 1. NEVER update balance_movement rows — only INSERT + 2. Balance = SUM of movements. No cached balance columns. + 3. Every discharge_detail row MUST reference a balance_movement row + 4. PEPS order is enforced via order_peps (monotonic, set on INSERT) +""" + +from __future__ import annotations + +import datetime +from decimal import Decimal +from enum import Enum +from typing import TYPE_CHECKING, List, Optional +from ..discharges.models import DischargeDetail + +from sqlalchemy import ( + BigInteger, + CheckConstraint, + Date, + ForeignKey, + Index, + Integer, + Numeric, + String, + text, +) +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from api.v1.common.base_models import TenantScopedMixin, TimestampMixin +from core.database import Base + +if TYPE_CHECKING: + from api.v1.modules.a76.invoices.models import InvoiceHeader + from api.v1.modules.a76.items.models import LineItem + from ..balance_movements.models import BalanceMovement + + +class DischargeType(str, Enum): + TEMPORARY = "temporary" # SDescargaT — export against temp import + DEFINITIVE = "definitive" # SDescargaD — export against def import + REPAIR = "repair" # SDescargaR — repair / return + DIRECTED = "directed" # SDescargaM — Directed discharge + CTM = "ctm" # SDescargaCTM — between plants (same group) + SUBASSEMBLY = "subassembly" # SDescargaSM — to external maquiladora + WASTE_SCRAP = "waste_scrap" # SDescargaMerDes — merma / desperdicio + + +class DischargeStatus(str, Enum): + PENDING = "pending" + APPLIED = "applied" + PARTIAL = "partial" + CANCELLED = "cancelled" + +# --------------------------------------------------------------------------- +# 2. DischargeHeader +# +# One row per discharge event (export, SM batch, CTM transfer…). +# Groups all DischargeDetail rows for the same business event. +# +# source_invoice_id → a76.invoice_header.id (the export/SM/CTM invoice) +# def_import_invoice_id → a76.invoice_header.id (DEF discharges only) +# --------------------------------------------------------------------------- + +class DischargeHeader(Base, TenantScopedMixin, TimestampMixin): + """ + One discharge per export event. + Groups DischargeDetail rows (one per import lot consumed). + """ + + __tablename__ = "discharge_header" + __table_args__ = ( + Index("ix_dischdr_source", "source_invoice_id", "status"), + Index("ix_dischdr_date", "tenant_id", "discharge_date", "discharge_type"), + {"schema": "a24"}, + ) + + id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True) + + # ── Export / SM / CTM document that triggers this discharge ─────────── + source_invoice_id: Mapped[int] = mapped_column( + ForeignKey("a76.invoice_header.id"), + comment="Export, SM-out or CTM-send invoice that owns this discharge.", + ) + + # ── For DEFINITIVE discharges only ──────────────────────────────────── + def_import_invoice_id: Mapped[Optional[int]] = mapped_column( + ForeignKey("a76.invoice_header.id"), + comment="Populated only for discharge_type=DEFINITIVE.", + ) + + discharge_type: Mapped[DischargeType] = mapped_column(String(15)) + status: Mapped[DischargeStatus] = mapped_column( + String(15), server_default=text("'applied'") + ) + discharge_date: Mapped[datetime.date] = mapped_column(Date) + + # ── Control fields from legacy SDescarga* tables ────────────────────── + reference_invoice: Mapped[Optional[str]] = mapped_column( + String(19), comment="FACREFERENCIA — for rectifications" + ) + discharge_subtype: Mapped[Optional[str]] = mapped_column( + String(10), comment="TIPODESC: NORMAL, PARCIAL, REPARACION, UTILERIA" + ) + partial_sequence: Mapped[Optional[int]] = mapped_column( + Integer, comment="CONSECPARCIAL — for partial discharges" + ) + sales_order: Mapped[Optional[str]] = mapped_column(String(20)) # ORDENVENTA + ctm_section: Mapped[Optional[str]] = mapped_column(String(3)) # APARTADOCTM + is_tooling: Mapped[bool] = mapped_column( + server_default=text("false"), comment="PORUTILERIA" + ) + discharge_sm: Mapped[Optional[str]] = mapped_column(String(4)) # DESCARGASM + is_repair_update: Mapped[bool] = mapped_column( + server_default=text("false"), comment="ACTUALREPARACION" + ) + material_type_expo: Mapped[Optional[str]] = mapped_column( + String(10), comment="TIPOMATEXPO" + ) + + # ── Cancellation trail ──────────────────────────────────────────────── + cancelled_by: Mapped[Optional[str]] = mapped_column(String(20)) + cancellation_reason: Mapped[Optional[str]] = mapped_column(String(300)) + + # ── Relationships ───────────────────────────────────────────────────── + source_invoice: Mapped["InvoiceHeader"] = relationship( + foreign_keys=[source_invoice_id], + ) + def_import_invoice: Mapped[Optional["InvoiceHeader"]] = relationship( + foreign_keys=[def_import_invoice_id], + ) + details: Mapped[List["DischargeDetail"]] = relationship( + back_populates="header", cascade="all, delete-orphan" + ) + scraps: Mapped[List["DischargeScrap"]] = relationship( + back_populates="header", cascade="all, delete-orphan" + ) + + +# --------------------------------------------------------------------------- +# 3. DischargeDetail +# +# The critical traceability link: +# "Export line X consumed Y units from import lot Z" +# +# One row per (export_line × import_lot) pair. +# A single export line can span multiple rows when PEPS pulls from +# more than one import lot. +# +# discharge_header_id → a24.discharge_header.id +# export_item_line_id → a76.item_lines.id (the export line) +# import_item_line_id → a76.item_lines.id (the import lot consumed) +# movement_id → a24.balance_movement.id (the ledger row) +# --------------------------------------------------------------------------- + +class DischargeDetail(Base, TenantScopedMixin, TimestampMixin): + """ + One row per (export line × import lot consumed). + + This is the traceability record the SAT asks for: + "Show me which import pedimento covered this export line." + """ + + __tablename__ = "discharge_detail" + __table_args__ = ( + CheckConstraint("movement_id IS NOT NULL", name="ck_dischdet_movement_required"), + Index("ix_dischdet_header", "discharge_header_id"), + Index("ix_dischdet_import_lot", "import_item_line_id"), + Index("ix_dischdet_export_line", "export_item_line_id"), + Index("ix_dischdet_part", "tenant_id", "part_number"), + {"schema": "a24"}, + ) + + id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True) + + discharge_header_id: Mapped[int] = mapped_column( + ForeignKey("a24.discharge_header.id"), + ) + + # ── Export side ─────────────────────────────────────────────────────── + export_item_line_id: Mapped[Optional[int]] = mapped_column( + ForeignKey("a76.item_lines.id"), + comment="NULL for waste-only discharges.", + ) + # Denormalized for report performance + part_number: Mapped[Optional[str]] = mapped_column( + String(70), comment="NUMPARTE of the export line (denormalized)" + ) + export_part_number: Mapped[Optional[str]] = mapped_column( + String(70), comment="NUMPARTEEXPO — as it appears in the pedimento" + ) + export_line_ref: Mapped[Optional[int]] = mapped_column( + Integer, comment="LINEAEXPOREF — for rectification references" + ) + + # ── Import lot side (PEPS lot consumed) ─────────────────────────────── + import_item_line_id: Mapped[int] = mapped_column( + ForeignKey("a76.item_lines.id"), + ) + + # ── Ledger row created for this consumption (NOT NULL — design rule 3) ─ + movement_id: Mapped[int] = mapped_column( + BigInteger, + ForeignKey("a24.balance_movement.id"), + comment="The BalanceMovement that records this consumption. Required.", + ) + + # ── Consumed quantities and values ──────────────────────────────────── + quantity_discharged: Mapped[Decimal] = mapped_column(Numeric(19, 8)) # CANTDESC + unit_of_measure: Mapped[Optional[str]] = mapped_column(String(5)) + value_mn: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) + value_me: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) + net_weight: Mapped[Optional[Decimal]] = mapped_column(Numeric(19, 8)) + gross_weight: Mapped[Optional[Decimal]] = mapped_column(Numeric(19, 8)) + + # ── Tariff classification of the consumed input ─────────────────────── + tariff_fraction: Mapped[Optional[str]] = mapped_column(String(10)) # FRACCIONIMPO + fraction_type: Mapped[Optional[str]] = mapped_column(String(7)) # TIPOFRACCION + ad_valorem: Mapped[Optional[str]] = mapped_column(String(10)) # ADVALOREMIMPO + country_of_origin: Mapped[Optional[str]] = mapped_column(String(3)) # PAISMERCANCIA + sector: Mapped[Optional[str]] = mapped_column(String(8)) # SECTOR + + # ── Repair-specific ─────────────────────────────────────────────────── + original_part: Mapped[Optional[str]] = mapped_column( + String(70), comment="PARTEORIGINAL" + ) + equivalent_quantity: Mapped[Optional[Decimal]] = mapped_column( + Numeric(19, 8), comment="CANTEQUIVALENTE" + ) + equivalent_unit: Mapped[Optional[str]] = mapped_column(String(5)) + returned_quantity_sm: Mapped[Optional[Decimal]] = mapped_column( + Numeric(19, 8), comment="CANTRETORNADASAM" + ) + + # ── Waste / scrap ───────────────────────────────────────────────────── + waste_type: Mapped[Optional[str]] = mapped_column( + String(1), comment="M=merma, D=desperdicio, S=scrap" + ) + take_balance_base_pt: Mapped[Optional[str]] = mapped_column( + String(2), comment="TOMARSALDOBASEALPT" + ) + + # ── Tax fields (from SDescargaT) ────────────────────────────────────── + igi_amount: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # MONTOIGI + tax_payment: Mapped[Optional[str]] = mapped_column(String(1)) # PAGOIMPUESTO + has_certificate: Mapped[Optional[str]] = mapped_column(String(1)) # TIENECERT + iva_mn: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # VALORIVAMN + iva_me: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # VALORIVAME + + # ── SM origin traceability ──────────────────────────────────────────── + origin_import_invoice: Mapped[Optional[str]] = mapped_column( + String(15), comment="FACTURAIMPO original (denorm for SM)" + ) + procedence: Mapped[Optional[str]] = mapped_column(String(3)) # PROCEDENCIA + + # ── Relationships ───────────────────────────────────────────────────── + header: Mapped["DischargeHeader"] = relationship(back_populates="details") + export_line: Mapped[Optional["LineItem"]] = relationship( + foreign_keys=[export_item_line_id], + ) + import_line: Mapped["LineItem"] = relationship( + foreign_keys=[import_item_line_id], + ) + movement: Mapped["BalanceMovement"] = relationship( + foreign_keys=[movement_id], + back_populates="discharge_detail", + ) + + +# --------------------------------------------------------------------------- +# 4. DischargeScrap +# +# Mermas, desperdicios and destrucciones. +# Can be standalone (no export invoice) or linked to a DischargeHeader. +# Always generates a BalanceMovement of type WASTE / SCRAP / DESTRUCTION. +# +# Replaces: SDescargaS + SDescargaMerDes +# --------------------------------------------------------------------------- + +class DischargeScrap(Base, TenantScopedMixin, TimestampMixin): + """ + Waste / scrap / destruction records. + Replaces SDescargaS and the waste portion of SDescargaMerDes. + """ + + __tablename__ = "discharge_scrap" + __table_args__ = ( + Index("ix_dischscrap_header", "discharge_header_id"), + Index("ix_dischscrap_import_lot", "import_item_line_id"), + Index("ix_dischscrap_date", "tenant_id", "scrap_date"), + {"schema": "a24"}, + ) + + id: Mapped[int] = mapped_column(BigInteger, primary_key=True, autoincrement=True) + + # ── Optional parent discharge ───────────────────────────────────────── + discharge_header_id: Mapped[Optional[int]] = mapped_column( + ForeignKey("a24.discharge_header.id"), + comment="NULL when scrap is registered independently (not tied to an export).", + ) + + # ── The import lot being scrapped ────────────────────────────────────── + import_item_line_id: Mapped[int] = mapped_column( + ForeignKey("a76.item_lines.id"), + ) + + # ── Ledger row recording this scrap ─────────────────────────────────── + movement_id: Mapped[Optional[int]] = mapped_column( + BigInteger, ForeignKey("a24.balance_movement.id"), + ) + + # ── Type ────────────────────────────────────────────────────────────── + scrap_type: Mapped[str] = mapped_column( + String(1), comment="M=merma, D=desperdicio, S=scrap, X=destrucción" + ) + + # ── Finished-good export line that generated this scrap ─────────────── + finished_good_line_id: Mapped[Optional[int]] = mapped_column( + ForeignKey("a76.item_lines.id"), + comment="Export line of the product whose manufacture created this scrap.", + ) + finished_good_part: Mapped[Optional[str]] = mapped_column(String(70)) + + # ── Scrap export pedimento (if scrap is exported separately) ────────── + scrap_export_invoice_id: Mapped[Optional[int]] = mapped_column( + ForeignKey("a76.invoice_header.id"), + comment="If desperdicio has its own export pedimento.", + ) + + # ── The scrapped material ───────────────────────────────────────────── + part_number: Mapped[str] = mapped_column(String(70)) + item_class: Mapped[Optional[str]] = mapped_column(String(8)) + quantity: Mapped[Decimal] = mapped_column(Numeric(19, 8)) + unit_of_measure: Mapped[str] = mapped_column(String(5)) + value_mn: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) + value_me: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) + net_weight: Mapped[Optional[Decimal]] = mapped_column(Numeric(19, 8)) + procedence: Mapped[Optional[str]] = mapped_column(String(3)) + scrap_date: Mapped[datetime.date] = mapped_column(Date) + + # ── Relationships ───────────────────────────────────────────────────── + header: Mapped[Optional["DischargeHeader"]] = relationship( + back_populates="scraps", + ) + import_line: Mapped["LineItem"] = relationship( + foreign_keys=[import_item_line_id], + ) + finished_good_line: Mapped[Optional["LineItem"]] = relationship( + foreign_keys=[finished_good_line_id], + ) + scrap_export_invoice: Mapped[Optional["InvoiceHeader"]] = relationship( + foreign_keys=[scrap_export_invoice_id], + ) + movement: Mapped[Optional["BalanceMovement"]] = relationship( + foreign_keys=[movement_id], + ) \ No newline at end of file diff --git a/backend/api/v1/modules/a76/classes/dto.py b/backend/api/v1/modules/a76/classes/dto.py index b8047e2f..75049871 100644 --- a/backend/api/v1/modules/a76/classes/dto.py +++ b/backend/api/v1/modules/a76/classes/dto.py @@ -43,6 +43,9 @@ class ClassCreateDTO(BaseModel): iva_exempt_fraction: Optional[str] = Field( None, max_length=4, description="IVA exempt fraction" ) + is_active: Optional[bool] = Field( + True, description="Indicates if the class is active (default: true)" + ) class Config: from_attributes = True @@ -76,6 +79,9 @@ class ClassCreateDTOFA(ClassCreateDTO): class_enabled: Optional[bool] = Field( True, description="Indica si la clase está habilitada" ) + is_active: Optional[bool] = Field( + True, description="Indicates if the class is active (default: true)" + ) class Config: from_attributes = True @@ -116,6 +122,9 @@ class ClassUpdateDTO(BaseModel): iva_exempt_fraction: Optional[str] = Field( None, max_length=4, description="IVA exempt fraction" ) + is_active: Optional[bool] = Field( + True, description="Indicates if the class is active (default: true)" + ) model_config = ConfigDict(from_attributes=True, extra='forbid') # Explicitly forbid extra fields @@ -136,6 +145,7 @@ class ClassResponseDTO(BaseModel): sub_key: Optional[str] = None physical_review: Optional[int] = None iva_exempt_fraction: Optional[str] = None + is_active: Optional[bool] = None created_at: datetime updated_at: datetime diff --git a/backend/api/v1/modules/a76/classes/models.py b/backend/api/v1/modules/a76/classes/models.py index a5288980..0ceadbf5 100644 --- a/backend/api/v1/modules/a76/classes/models.py +++ b/backend/api/v1/modules/a76/classes/models.py @@ -84,13 +84,17 @@ class Class(Base, TenantScopedMixin, TimestampMixin): String(4) ) # FRACCIONEXENTAIVA + is_active: Mapped[bool] = mapped_column( + default=True, server_default="true", nullable=False + ) # Campo para habilitar/deshabilitar clases sin eliminarlas + # Relationships material_type: Mapped[Optional["MaterialType"]] = relationship( foreign_keys=[material_key] ) unit_of_measure_info: Mapped[Optional["UnitOfMeasure"]] = relationship( foreign_keys=[unit_of_measure] - ) + ) # Inverse relationship with GParts that have this class parts: Mapped[list["Part"]] = relationship( diff --git a/backend/api/v1/modules/a76/general_catalogs/company/service.py b/backend/api/v1/modules/a76/general_catalogs/company/service.py index e042cea9..9f940c62 100644 --- a/backend/api/v1/modules/a76/general_catalogs/company/service.py +++ b/backend/api/v1/modules/a76/general_catalogs/company/service.py @@ -15,6 +15,7 @@ from .models import Company from ...audit_log.services.service import AuditService from ..units_of_measure.seed import seed as units_of_measure_seed from ..fractions.historical_tariff_fractions.seed import seed as historical_tariff_fractions_seed +from ..fractions.warning_fractions.seed import seed as warning_fractions_seed from core.context import get_user_context from sqlalchemy import text @@ -755,6 +756,24 @@ class CompanyService: """)) db.execute(text("SET session_replication_role = DEFAULT;")) + # 3. Warning Fractions + values_warning = ", ".join( + [ + f"({format_value(fraction)}, {format_value(description)}, {format_value(warning_type)}, {tenant_id}, {company_id})" + for fraction, description, warning_type in warning_fractions_seed + ] + ) + + if values_warning: + db.execute(text("ALTER TABLE public.warning_fractions DISABLE TRIGGER ALL;")) + db.execute(text(f""" + INSERT INTO public.warning_fractions + (fraction, description, warning_type, tenant_id, company_id) + VALUES {values_warning} + ON CONFLICT (fraction, company_id) DO NOTHING; + """)) + db.execute(text("ALTER TABLE public.warning_fractions ENABLE TRIGGER ALL;")) + def get_companies_by_tenant(self, tenant_id: int) -> List[Company]: """Get all companies for a tenant""" return ( diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/previous_fractions/models.py b/backend/api/v1/modules/a76/general_catalogs/fractions/previous_fractions/models.py new file mode 100644 index 00000000..20bc89cf --- /dev/null +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/previous_fractions/models.py @@ -0,0 +1,24 @@ +from typing import Optional + +from sqlalchemy import Integer, String +from sqlalchemy.orm import Mapped, mapped_column + +from api.v1.common.base_models import TenantScopedMixin, TimestampMixin +from core.database import Base + + +class PreviousFraction(Base, TenantScopedMixin, TimestampMixin): + """ + Tabla de correlación entre fracciones anteriores y actuales. + Paridad: SFraccionesAnterioresN (Clarion SCAII). + Se usa en REVISA_UM_REGLA_OCTAVA para aceptar fracciones cambiadas + cuando el permiso de RO tiene fecha de inicio anterior al corte (~2010-05-31). + """ + + __tablename__ = "previous_fractions" + __table_args__ = {"schema": "a76"} + + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) + + current_fraction: Mapped[Optional[str]] = mapped_column(String(50)) # FraccionActual + previous_fraction: Mapped[Optional[str]] = mapped_column(String(50)) # FraccionAnterior diff --git a/backend/api/v1/modules/a76/general_catalogs/fractions/previous_fractions/seed.py b/backend/api/v1/modules/a76/general_catalogs/fractions/previous_fractions/seed.py new file mode 100644 index 00000000..9c2aaa4b --- /dev/null +++ b/backend/api/v1/modules/a76/general_catalogs/fractions/previous_fractions/seed.py @@ -0,0 +1,27112 @@ +seed = [ + +("0101210100", 01012101 +01012902 +01012903 +01012901 +01012999 +01013001 +01019099 +01022101 +01022901 +01022902 +01022999 +01023101 +01023999 +01029099 +01031001 +01039101 +01039199 +01039102 +01039201 +01039299 +01039202 +01039203 +01041001 +01041002 +01041099 +01042001 +01042002 +01042099 +01051101 +01051101 +01051101 +01051102 +01051101 +01051102 +01051101 +01051102 +01051199 +01051201 +01051301 +01051401 +01051501 +01059401 +01059499 +01059999 +01061101 +01061199 +01061201 +01061301 +01061401 +01061902 +01061903 +01061999 +01061901 +01062001 +01062002 +01062003 +01062099 +01063101 +01063201 +01063301 +01063999 +01063901 +01063902 +01064101 +01064999 +01069002 +01069003 +01069004 +01069099 +02011001 +02012099 +02013001 +02021001 +02022099 +02023001 +02031101 +02031201 +02031201 +02031999 +02032101 +02032201 +02032201 +02032999 +02041001 +02042101 +02042299 +02042301 +02043001 +02044101 +02044299 +02044301 +02045001 +02050001 +02061001 +02062101 +02062201 +02062999 +02063001 +02063099 +02064101 +02064901 +02064999 +02068099 +02069099 +02071101 +02071201 +02071301 +02071302 +02071303 +02071399 +02071399 +02071399 +02071399 +02071402 +02071401 +02071404 +02071499 +02071499 +02071499 +02071499 +02071403 +02072401 +02072501 +02072601 +02072699 +02072602 +02072702 +02072701 +02072799 +02072703 +02074101 +02074201 +02074301 +02074401 +02074501 +02074599 +02075101 +02075201 +02075301 +02075401 +02075501 +02075599 +02076001 +02076002 +02076099 +02081001 +02083001 +02084001 +02085001 +02086001 +02089099 +02089001 +02089002 +02091001 +02099001 +02099099 +02101101 +02101201 +02101999 +02102001 +02109101 +02109201 +02109301 +02109902 +02109999 +02109901 +02109903 +03011101 +03011999 +03019101 +03019201 +03019301 +03019999 +03019401 +03019501 +03019999 +03021101 +03021301 +03021401 +03021999 +03022101 +03022201 +03022301 +03022401 +03022999 +03023101 +03023201 +03023301 +03023401 +03023501 +03023601 +03023999 +03024101 +03024201 +03024301 +03024401 +03024501 +03024601 +03024701 +03028999 +03025101 +03025201 +03025301 +03025401 +03025501 +03025601 +03025999 +03027101 +03027201 +03027301 +03028999 +03027401 +03027999 +03028101 +03028201 +03028301 +03028401 +03028501 +03028901 +03028999 +03029001 +03028101 +03023101 +03023201 +03023301 +03023401 +03023501 +03023601 +03023999 +03025401 +03028901 +03021101 +03021301 +03021401 +03021999 +03022101 +03022201 +03022301 +03022401 +03022999 +03024101 +03024201 +03024301 +03024401 +03024501 +03024601 +03024701 +03025101 +03025201 +03025301 +03025501 +03025601 +03025999 +03027101 +03027201 +03027301 +03027401 +03027999 +03028101 +03028201 +03028301 +03028401 +03028501 +03028999 +03031101 +03031201 +03031301 +03031401 +03031999 +03032301 +03032401 +03032501 +03038999 +03032601 +03032999 +03033101 +03033201 +03033301 +03033401 +03033999 +03034101 +03034201 +03034301 +03034401 +03034501 +03034601 +03034999 +03035101 +03035301 +03035401 +03035501 +03035601 +03035701 +03038999 +03036301 +03036401 +03036501 +03036601 +03036701 +03036801 +03036999 +03038101 +03038201 +03038301 +03038401 +03038901 +03038999 +03039001 +03038101 +03034101 +03034201 +03034301 +03034401 +03034501 +03034601 +03034999 +03032601 +03036601 +03038901 +03031101 +03031201 +03031301 +03031401 +03031999 +03032301 +03032401 +03032501 +03032999 +03033101 +03033201 +03033301 +03033401 +03033999 +03035101 +03035301 +03035401 +03035501 +03035601 +03035701 +03036301 +03036401 +03036501 +03036701 +03036801 +03036999 +03038101 +03038201 +03038301 +03038401 +03038999 +03043101 +03043201 +03043301 +03043999 +03044999 +03044101 +03044201 +03044301 +03044402 +03044499 +03044501 +03044601 +03044999 +03044999 +03044902 +03044903 +03044904 +03044999 +03045101 +03045999 +03045202 +03045299 +03045302 +03045399 +03045401 +03045501 +03045999 +03045999 +03045901 +03045902 +03045903 +03045999 +03046101 +03046201 +03046301 +03046999 +03048999 +03047101 +03047201 +03047301 +03047402 +03047499 +03047501 +03047999 +03048101 +03048201 +03048301 +03048401 +03048501 +03048601 +03048701 +03048999 +03048902 +03048903 +03048999 +03049101 +03049201 +03049301 +03049999 +03049401 +03049502 +03049599 +03049999 +03049999 +03049901 +03049902 +03049903 +03049904 +03049999 +03051001 +03052001 +03053101 +03053999 +03053202 +03053299 +03053901 +03053902 +03053903 +03053904 +03053905 +03053999 +03054101 +03054201 +03054301 +03054401 +03054999 +03054901 +03054902 +03054903 +03054904 +03054905 +03054906 +03054999 +03055101 +03055199 +03055999 +03055999 +03055999 +03055901 +03055902 +03055903 +03055904 +03055905 +03055906 +03055907 +03055999 +03056101 +03056201 +03056301 +03056401 +03056999 +03056901 +03056902 +03056903 +03056904 +03056905 +03056999 +03057101 +03057203 +03057204 +03057205 +03057206 +03057207 +03057208 +03057299 +03057902 +03057903 +03057904 +03057905 +03057906 +03057907 +03057999 +03061101 +03061201 +03061401 +03061501 +03061601 +03061701 +03061999 +03062101 +03062201 +03062401 +03062501 +03062601 +03062699 +03062701 +03062799 +03062901 +03062101 +03062201 +03062401 +03062501 +03062601 +03062701 +03062699 +03062799 +03062901 +03071101 +03071999 +03071999 +03072101 +03072999 +03072999 +03073101 +03073999 +03073999 +03074101 +03074199 +03079101 +03074901 +03074999 +03079999 +03074901 +03074999 +03079999 +03075101 +03075999 +03075999 +03076001 +03077101 +03077999 +03077999 +03078101 +03079101 +03078999 +03079999 +03078999 +03079999 +03079101 +03079999 +03079999 +03081101 +03081999 +03081999 +03082101 +03082999 +03082999 +03083001 +03089099 +04011001 +04011099 +04012001 +04012099 +04014001 +04014099 +04015001 +04015099 +04021001 +04021099 +04022101 +04022199 +04022999 +04029101 +04029199 +04029901 +04029999 +04031001 +04039099 +04041001 +04041099 +04049099 +04051001 +04051099 +04052001 +04059001 +04059099 +04061001 +04062001 +04063001 +04063099 +04064001 +04069001 +04069002 +04069004 +04069005 +04069003 +04069006 +04069099 +04071101 +04071101 +04071101 +04071999 +04072101 +04072199 +04072901 +04072999 +04079001 +04079099 +04081101 +04081999 +04089101 +04089199 +04089902 +04089901 +04089999 +04090001 +04100001 +04100099 +05010001 +05021001 +05029099 +05040001 +05051001 +05059099 +05061001 +05069099 +05071001 +05079099 +05079001 +05080001 +05080099 +05100001 +05100002 +05100003 +05100099 +05111001 +05119102 +05119101 +05119199 +05119901 +05119903 +05119904 +05119905 +05119908 +05119902 +05119907 +05119999 +05119906 +06011001 +06011002 +06011004 +06011099 +06011003 +06011005 +06011006 +06011007 +06011008 +06012001 +06012002 +06012003 +06012004 +06012005 +06012006 +06012007 +06012008 +06012009 +06012099 +06021001 +06021002 +06021003 +06021004 +06021005 +06021006 +06021099 +06022001 +06022002 +06022099 +06022003 +06023001 +06024001 +06024099 +06029006 +06029007 +06029001 +06029004 +06029013 +06029002 +06029003 +06029005 +06029008 +06029009 +06029010 +06029011 +06029012 +06029099 +06031101 +06031201 +06031301 +06031401 +06031499 +06031501 +06031901 +06031902 +06031903 +06031904 +06031905 +06031906 +06031907 +06031908 +06031902 +06031903 +06031904 +06031905 +06031906 +06031907 +06031999 +06039099 +06042001 +06042002 +06042003 +06042099 +06049001 +06049002 +06049003 +06049004 +06049099 +07011001 +07019099 +07020001 +07020002 +07020099 +07020099 +07020099 +07020099 +07031001 +07031099 +07032001 +07032099 +07039001 +07041001 +07041002 +07041099 +07042001 +07049001 +07049099 +07051101 +07051999 +07052101 +07052999 +07061001 +07069099 +07070001 +07081001 +07082001 +07089099 +07092001 +07092099 +07093001 +07094001 +07094099 +07095101 +07095999 +07095901 +07096001 +07096099 +07096099 +07096099 +07096099 +07096099 +07096099 +07096099 +07096099 +07097001 +07099101 +07099201 +07099301 +07099301 +07099901 +07099999 +07101001 +07102101 +07102201 +07102999 +07103001 +07104001 +07108001 +07108003 +07108004 +07108099 +07108002 +07109001 +07109099 +07112001 +07114001 +07115101 +07115999 +07119003 +07119099 +07119001 +07119002 +07122001 +07123101 +07123201 +07123301 +07123999 +07129001 +07129002 +07129003 +07129099 +07131001 +07131099 +07132001 +07133101 +07133201 +07133301 +07133302 +07133303 +07133399 +07133401 +07133501 +07133999 +07134001 +07135001 +07136001 +07139099 +07141001 +07141099 +07142001 +07142099 +07143001 +07143099 +07144001 +07144099 +07145001 +07145099 +07149002 +07149099 +07149001 +08011101 +08011201 +08011999 +08012101 +08012201 +08013101 +08013201 +08021101 +08021201 +08022101 +08022201 +08023101 +08023201 +08024101 +08024201 +08025101 +08025201 +08026101 +08026201 +08027001 +08028001 +08029001 +08029099 +08031001 +08039099 +08041001 +08041099 +08042001 +08042099 +08043001 +08044001 +08045001 +08045002 +08045003 +08051001 +08052001 +08052001 +08052001 +08054001 +08055001 +08055002 +08055099 +08059099 +08061001 +08062001 +08071101 +08071101 +08071901 +08071999 +08072001 +08081001 +08083001 +08084001 +08091001 +08092101 +08092999 +08093001 +08093002 +08094001 +08101001 +08102001 +08102001 +08102001 +08103001 +08104001 +08104001 +08105001 +08106001 +08107001 +08109099 +08111001 +08112001 +08112001 +08112001 +08119099 +08119099 +08121001 +08129001 +08129002 +08129099 +08131001 +08131099 +08132001 +08132099 +08133001 +08134001 +08134002 +08134003 +08134099 +08135001 +08140001 +09011101 +09011199 +09011201 +09012101 +09012201 +09019001 +09019099 +09021001 +09022001 +09023001 +09024001 +09030001 +09041101 +09041201 +09042101 +09042199 +09042201 +09042299 +09051001 +09052001 +09061101 +09061999 +09062001 +09071001 +09072001 +09081101 +09081201 +09082101 +09082201 +09083101 +09083201 +09092101 +09092201 +09093101 +09093201 +09096101 +09096102 +09096199 +09096201 +09096202 +09096299 +09101101 +09101201 +09102001 +09103001 +09109101 +09109901 +09109999 +09109902 +10011101 +10011999 +10019101 +10019199 +10019901 +10019999 +10021001 +10029099 +10031001 +10039001 +10039099 +10041001 +10049099 +10051001 +10059004 +10059001 +10059003 +10059099 +10059002 +10061001 +10062001 +10063001 +10063099 +10064001 +10071001 +10079001 +10079002 +10081001 +10082101 +10082999 +10083001 +10084001 +10085001 +10086001 +10089099 +11010001 +11022001 +11029001 +11029099 +11029002 +11031101 +11031301 +11031901 +11031999 +11031902 +11032001 +11032099 +11041201 +11041901 +11041999 +11042201 +11042301 +11042901 +11042999 +11043001 +11051001 +11052001 +11061001 +11062001 +11062099 +11063001 +11063099 +11071001 +11072001 +11081101 +11081201 +11081301 +11081401 +11081901 +11081999 +11082001 +11090001 +12011001 +12019001 +12019002 +12023001 +12024101 +12024201 +12030001 +12040001 +12051001 +12059099 +12060001 +12060099 +12071001 +12072101 +12072999 +12073001 +12074001 +12075001 +12076003 +12076001 +12076002 +12077001 +12079101 +12079901 +12079902 +12079999 +12081001 +12089001 +12089002 +12089099 +12091001 +12092101 +12092201 +12092301 +12092401 +12092501 +12092904 +12092902 +12092903 +12092901 +12092905 +12092999 +12093001 +12099101 +12099102 +12099103 +12099104 +12099105 +12099106 +12099107 +12099108 +12099109 +12099111 +12099112 +12099113 +12099110 +12099114 +12099199 +12099901 +12099902 +12099903 +12099904 +12099905 +12099906 +12099999 +12101001 +12102001 +12112001 +20089999 +12113001 +14049099 +12114001 +14049099 +12119099 +14049099 +20089999 +12119001 +12119003 +12119007 +12119004 +12119005 +12119006 +12119099 +14049099 +12122101 +12122102 +12122199 +12122901 +12122999 +12129101 +12129201 +12129299 +12129301 +12129401 +12129499 +12129904 +12129999 +12130001 +12141001 +12149001 +12149099 +13012001 +13019099 +13019001 +13019002 +13021199 +13021101 +13021103 +13021201 +13021299 +13021301 +13021999 +13021901 +13021903 +13021904 +13021905 +13021906 +13021907 +13021908 +13021909 +13021913 +13021914 +13021910 +13021911 +13021999 +13021912 +13022001 +13022099 +13023101 +13023201 +13023202 +13023299 +13023901 +13023902 +13023999 +13023903 +14011001 +14012001 +14019099 +14042001 +14049002 +14049003 +14049004 +14049001 +14049099 +15011001 +15012001 +15019099 +15021001 +15029099 +15030001 +15030099 +15041001 +15041099 +15042001 +15042099 +15043001 +15050002 +15050001 +15050003 +15050099 +15060001 +15060002 +15060099 +15071001 +15079099 +15081001 +15089099 +15091001 +15091099 +15099002 +15099001 +15099099 +15100099 +15111001 +15119099 +15121101 +15121999 +15122101 +15122999 +15131101 +15131999 +15132101 +15132999 +15141101 +15141999 +15149101 +15149999 +15151101 +15151999 +15152101 +15152999 +15153001 +15155001 +15159001 +15159002 +15159003 +15159004 +15159005 +15159099 +15161001 +15162001 +15171001 +15179001 +15179002 +15179099 +15180001 +15180002 +15180099 +15200001 +15211001 +15211099 +15219002 +15219003 +15219001 +15219099 +15220001 +16010001 +16010002 +16010099 +16021001 +16021099 +16022001 +16022099 +16023101 +16023201 +16023999 +16024101 +16024201 +16024901 +16024999 +16025001 +16025099 +16029099 +16030001 +16030099 +16041101 +16041201 +16041301 +16041303 +16041399 +16041404 +16041401 +16041402 +16041499 +16041403 +16041501 +16041601 +16041603 +16041699 +16041701 +16041999 +16041901 +16041902 +16041903 +16041999 +16042001 +16042002 +16042004 +16042005 +16042006 +16042007 +16042008 +16042009 +16042099 +16043101 +16043201 +16051001 +16051099 +16052101 +16052999 +16053001 +16054001 +16055101 +16055201 +16055301 +16055401 +16055999 +16055501 +16055601 +16055701 +16055801 +16055999 +16056101 +16056201 +16056301 +16056999 +17011201 +17011204 +17011301 +17011401 +17011404 +17019102 +17019103 +17019901 +17019902 +17019999 +17021101 +17021901 +17021999 +17022001 +17023001 +17024001 +17024099 +17025001 +17026001 +17026002 +17026001 +17026001 +17026002 +17026099 +17026001 +17026002 +17026099 +17029001 +17029099 +17031001 +17031002 +17039099 +17041001 +17049099 +18010001 +18020001 +18031001 +18032001 +18040001 +18050001 +18061001 +18061099 +18062001 +18063101 +18063201 +18069002 +18069099 +18069001 +19011001 +19011099 +19012002 +19012001 +19012099 +19019002 +19019003 +19019004 +19019005 +19019001 +19019099 +19021101 +19021999 +19022001 +19023099 +19024001 +19030001 +19041001 +19042001 +19043001 +19049099 +19051001 +19052001 +19053101 +19053201 +19054001 +19059001 +19059099 +19059099 +19059099 +20011001 +20019001 +20019002 +20019003 +20019099 +20021001 +20029099 +20031001 +20039099 +20041001 +20049001 +20049002 +20049099 +20051001 +20052001 +20054001 +20055101 +20055999 +20056001 +20057001 +20058001 +20059101 +20059901 +20059902 +20059999 +20060001 +20060002 +20060003 +20060099 +20071001 +20079101 +20079901 +20079902 +20079903 +20079904 +20079999 +20081101 +20081199 +20081901 +20081999 +20081999 +20081999 +20082001 +20083003 +20083007 +20083001 +20083002 +20083004 +20083005 +20083006 +20083008 +20083099 +20084001 +20085001 +20086001 +20087001 +20088001 +20089101 +20089301 +20089701 +20089901 +20089999 +20091101 +20091201 +20091299 +20091901 +20091999 +20092101 +20092999 +20093101 +20093199 +20093901 +20093999 +20094101 +20094199 +20094901 +20094999 +20095001 +20096101 +20096999 +20097101 +20097999 +20098101 +20098999 +20099001 +20099099 +21011102 +21011101 +21011199 +21011201 +21012001 +21013001 +21021002 +21021001 +21021099 +21022001 +21022099 +21023001 +21031001 +21032001 +21032099 +21033001 +21033099 +21039099 +21041001 +21042001 +21050001 +21061001 +21061099 +21061003 +21069001 +21069003 +21069004 +21069005 +21069007 +21069008 +21069009 +21069010 +21069011 +21069012 +21061004 +21069006 +21069099 +21069002 +22011001 +22011099 +22019001 +22019002 +22019099 +22021001 +22029005 +22029001 +22029002 +22029002 +22029003 +22029004 +22029099 +22030001 +22041001 +22041099 +22042101 +22042103 +22042102 +22042103 +22042199 +22042103 +22042999 +22042999 +22043099 +22051001 +22051099 +22059099 +22059001 +22060001 +22060099 +22071001 +22072001 +22082001 +22082002 +22082003 +22082099 +22083001 +22083002 +22083003 +22083004 +22083099 +22084001 +22084099 +22085001 +22086001 +22087001 +22087002 +22087099 +22089001 +22089003 +22089005 +22089004 +22089003 +22089099 +22089002 +22090001 +23011001 +23011099 +23012001 +23021001 +23023001 +23024001 +23024099 +23025001 +23031001 +23032001 +23033001 +23033099 +23040001 +23050001 +23061001 +23062001 +23063001 +23064101 +23064999 +23065001 +23066001 +23069001 +23069099 +23070001 +23080001 +23080099 +23091001 +23099004 +23099010 +23099011 +23099001 +23099002 +23099003 +23099005 +23099006 +23099007 +23099008 +23099009 +23099099 +24011001 +24011099 +24012001 +24012099 +24012002 +24013001 +24021001 +24022001 +24029099 +24031101 +24031999 +24039101 +24039199 +24039901 +24039999 +25010001 +25010099 +25010001 +25020001 +25030001 +25030099 +25041001 +25049099 +25051001 +25059099 +25061001 +25062001 +25062099 +25070001 +25081001 +25083001 +25084001 +25084099 +25085001 +25086001 +25087001 +25090001 +25101001 +25101099 +25102001 +25102099 +25111001 +25112001 +25120001 +25131001 +25131099 +25132001 +25140001 +25151101 +25151201 +25151299 +25152001 +25161101 +25161201 +25162001 +25169099 +25171001 +25172001 +25173001 +25174101 +25174999 +25181001 +25182001 +25183001 +25191001 +25199001 +25199002 +25199003 +25199099 +25201001 +25202001 +25210001 +25221001 +25222001 +25223001 +25231001 +25232101 +25232999 +25233001 +25239099 +25241001 +25241002 +25249001 +25249002 +25251001 +25252001 +25253001 +25261001 +25262001 +25280001 +25280099 +25291001 +25292101 +25292201 +25293001 +25301001 +25302001 +25309006 +25309099 +25309002 +25309003 +25309004 +25309005 +25309007 +25309008 +25309009 +26011101 +26011201 +26012001 +26020001 +26020099 +26030001 +26040001 +26050001 +26060001 +26060099 +26070001 +26080001 +26090001 +26100001 +26100099 +26110001 +26121001 +26122001 +26131001 +26139099 +26140001 +26140002 +26140099 +26151001 +26151099 +26159099 +26161001 +26169099 +26171001 +26179099 +26180001 +26190001 +26190099 +26201101 +26201999 +26202101 +26202999 +26203001 +26204001 +26204099 +26206001 +26209101 +26209199 +26209903 +26209999 +26209901 +26209902 +26211001 +26219099 +27011101 +27011201 +27011999 +27012001 +27021001 +27022001 +27030001 +27030099 +27040001 +27040002 +27050001 +27060001 +27071001 +27072001 +27073001 +27074001 +27075001 +27079101 +27079902 +27079901 +27079903 +27079999 +27081001 +27082001 +27090002 +27090003 +27090004 +27090099 +27101206 +27101201 +27101202 +27101203 +27101208 +27101209 +27101210 +27101205 +27101207 +27101291 +27101299 +27101902 +27101901 +27101903 +27101909 +27101910 +27101905 +27101906 +27101907 +27101908 +27101991 +27101999 +27102001 +27109101 +27109999 +27111101 +27111201 +27111301 +27111401 +27111901 +27111902 +27111999 +27111903 +27112101 +27112999 +27121001 +27122001 +27129001 +27129002 +27129003 +27129004 +27129099 +27131101 +27131201 +27132001 +27139099 +27141001 +27149001 +27149099 +27150001 +27150099 +27160001 +28011001 +28012001 +28013001 +28020001 +28030002 +28030099 +28030001 +28041001 +28042101 +28042901 +28042999 +28043001 +28044001 +28045001 +28046101 +28046999 +28047001 +28047002 +28047003 +28047099 +28048001 +28049001 +28051101 +28051201 +28051999 +28051901 +28053001 +28054001 +28061001 +28062001 +28070001 +28080001 +28091001 +28092001 +28092099 +28100001 +28100099 +28111101 +28111199 +28111999 +28111999 +28111901 +28112101 +28112102 +28112201 +28112202 +28112901 +28112999 +28112902 +28121099 +28121003 +28121003 +28121003 +28121002 +28121002 +28121002 +28121001 +28121002 +28121003 +28121099 +28129099 +28131001 +28139099 +28141001 +28142001 +28151101 +28151201 +28152001 +28152002 +28153001 +28161001 +28164001 +28164002 +28170001 +28170002 +28181001 +28181002 +28181099 +28182001 +28182099 +28183001 +28183002 +28191001 +28199099 +28201001 +28201099 +28209099 +28211001 +28211002 +28211003 +28212001 +28220001 +28230001 +28241001 +28249099 +28249001 +28251001 +28251099 +28252001 +28253001 +28254001 +28254099 +28255001 +28255002 +28255099 +28256001 +28257001 +28258001 +28259099 +28259001 +28261201 +28261901 +28261902 +28261999 +28263001 +28269001 +28269099 +28271001 +28272001 +28273101 +28273201 +28273501 +28273906 +28273999 +28273901 +28273902 +28273903 +28273904 +28273905 +28274101 +28274199 +28274999 +28275101 +28275999 +28276001 +28281001 +28289099 +28291101 +28291102 +28291901 +28291999 +28299001 +28299099 +28301001 +28309099 +28309001 +28309002 +28311001 +28319099 +28319001 +28321001 +28321099 +28322099 +28322001 +28323001 +28331101 +28331999 +28332101 +28332201 +28332401 +28332501 +28332502 +28332701 +28332905 +28332901 +28332904 +28332999 +28332902 +28333001 +28334001 +28334002 +28334099 +28341001 +28341099 +28342101 +28342901 +28342999 +28351001 +28352201 +28352401 +28352501 +28352599 +28352699 +28352999 +28352901 +28352902 +28352903 +28353101 +28353901 +28353902 +28353999 +28362001 +28363001 +28364001 +28364002 +28365001 +28366001 +28369101 +28369201 +28369903 +28369999 +28369901 +28369902 +28369904 +28371101 +28371199 +28371999 +28371901 +28372001 +28372099 +28391101 +28391999 +28399001 +28399099 +28399002 +28399003 +28401101 +28401999 +28402099 +28403001 +28413001 +28415001 +28415002 +28415099 +28416101 +28416999 +28417001 +28418001 +28419001 +28419099 +28421001 +28421099 +28429001 +28429099 +28431001 +28432101 +28432999 +28433001 +28439099 +28439001 +28441001 +28442001 +28443001 +28444001 +28444002 +28444099 +28445001 +28451001 +28459099 +28461001 +28469099 +28469001 +28469002 +28470001 +28491001 +28492099 +28492001 +28499099 +28500001 +28500002 +28500099 +28521001 +28521002 +28521003 +28521099 +28529099 +28529001 +28530001 +28480001 +28480002 +28480003 +28480099 +28530001 +29011001 +29011004 +29011099 +29011002 +29011003 +29012101 +29012201 +29012301 +29012401 +29012999 +29021101 +29021902 +29021999 +29021901 +29021903 +29022001 +29023001 +29024101 +29024201 +29024301 +29024401 +29025001 +29026001 +29027001 +29029099 +29029001 +29029002 +29029003 +29029004 +29029005 +29029006 +29029007 +29031101 +29031201 +29031301 +29031399 +29031401 +29031501 +29031999 +29031901 +29031902 +29031903 +29031904 +29032101 +29032201 +29032301 +29032999 +29032901 +29033101 +29033901 +29033902 +29033999 +29037101 +29037201 +29037301 +29037401 +29037501 +29037601 +29037701 +29037702 +29037703 +29037704 +29037799 +29037801 +29037999 +29037901 +29037904 +29037905 +29038203 +29038999 +29038902 +29038999 +29038901 +29039101 +29039201 +29039999 +29039999 +29039901 +29039906 +29039999 +29039902 +29039903 +29039904 +29041001 +29041002 +29041003 +29041004 +29041005 +29041099 +29042008 +29042099 +29042001 +29042002 +29042003 +29042004 +29042005 +29042006 +29042007 +29049099 +29049099 +29049099 +29049099 +29049099 +29049099 +29049007 +29049001 +29049002 +29049003 +29049004 +29049005 +29049006 +29049099 +29051101 +29051201 +29051299 +29051301 +29051401 +29051402 +29051499 +29051403 +29051602 +29051699 +29051601 +29051701 +29051906 +29051901 +29051903 +29051904 +29051908 +29051999 +29051902 +29051905 +29051907 +29052201 +29052202 +29052203 +29052299 +29052204 +29052205 +29052902 +29052999 +29052901 +29052903 +29053101 +29053201 +29053901 +29053902 +29053903 +29053999 +29053904 +29054101 +29054201 +29054301 +29054401 +29054501 +29054599 +29054901 +29054999 +29054902 +29055101 +29055999 +29055901 +29055902 +29055903 +29055904 +29055905 +29061101 +29061201 +29061299 +29061399 +29061301 +29061302 +29061903 +29061999 +29061901 +29061902 +29062101 +29062905 +29062999 +29062901 +29062902 +29062903 +29062904 +29062906 +29071101 +29071199 +29071201 +29071299 +29071302 +29071399 +29071301 +29071501 +29071502 +29071599 +29071901 +29071902 +29071906 +29071999 +29071903 +29071904 +29071905 +29071907 +29071908 +29071909 +29072101 +29072201 +29072202 +29072301 +29072302 +29072999 +29072901 +29072902 +29072903 +29072904 +29072905 +29081101 +29081999 +29081901 +29081902 +29081903 +29081904 +29081905 +29081906 +29081907 +29089101 +29089201 +29089901 +29089906 +29089908 +29089999 +29089902 +29089903 +29089904 +29089905 +29089907 +29089909 +29089910 +29089911 +29089912 +29091101 +29091901 +29091903 +29091999 +29091902 +29092001 +29093002 +29093099 +29093001 +29093003 +29093004 +29093005 +29093006 +29093007 +29093008 +29093009 +29094101 +29094301 +29094401 +29094403 +29094499 +29094402 +29094901 +29094902 +29094903 +29094904 +29094905 +29094906 +29094907 +29094908 +29094909 +29094999 +29095001 +29095004 +29095005 +29095099 +29095002 +29095003 +29096001 +29096002 +29096003 +29096004 +29096005 +29096099 +29101001 +29102001 +29103001 +29104001 +29109099 +29109002 +29110001 +29110002 +29110003 +29110099 +29121101 +29121201 +29121905 +29121902 +29121907 +29121908 +29121999 +29121901 +29121903 +29121904 +29121906 +29121909 +29121910 +29121911 +29121912 +29122101 +29122902 +29122901 +29122903 +29122904 +29122999 +29122905 +29124101 +29124201 +29124906 +29124999 +29124901 +29124902 +29124903 +29125001 +29126001 +29130001 +29130002 +29130099 +29141101 +29141201 +29141301 +29141902 +29141901 +29141999 +29141903 +29141904 +29141905 +29141906 +29142201 +29142301 +29142302 +29142901 +29142902 +29142903 +29142904 +29142999 +29143101 +29143906 +29143999 +29143901 +29143902 +29143903 +29143904 +29143905 +29143907 +29144001 +29144002 +29144099 +29145001 +29145002 +29145099 +29145003 +29146101 +29146999 +29146999 +29146901 +29146902 +29147099 +29147001 +29147002 +29147003 +29147099 +29151101 +29151201 +29151299 +29151202 +29151301 +29152101 +29152401 +29152902 +29152999 +29152901 +29153101 +29153201 +29153301 +29153601 +29153902 +29153903 +29153904 +29153905 +29153909 +29153913 +29153915 +29153917 +29153918 +29153901 +29153906 +29153999 +29153907 +29153908 +29153910 +29153911 +29153912 +29153914 +29153916 +29154001 +29154099 +29154002 +29154003 +29154004 +29155003 +29155001 +29155004 +29155099 +29155002 +29155005 +29156001 +29156003 +29156002 +29156099 +29157001 +29157002 +29157003 +29157004 +29157005 +29157006 +29157007 +29157099 +29157008 +29157009 +29159001 +29159003 +29159004 +29159005 +29159006 +29159007 +29159008 +29159009 +29159010 +29159011 +29159012 +29159015 +29159016 +29159018 +29159019 +29159020 +29159022 +29159023 +29159024 +29159025 +29159026 +29159027 +29159029 +29159030 +29159031 +29159032 +29159033 +29159014 +29159021 +29159099 +29159002 +29159013 +29159017 +29161101 +29161201 +29161202 +29161203 +29161299 +29161301 +29161401 +29161402 +29161403 +29161404 +29161499 +29161501 +29161503 +29161599 +29161502 +29161504 +29161601 +29161901 +29161903 +29161904 +29159028 +29161999 +29161902 +29161905 +29162003 +29162099 +29162001 +29162002 +29162004 +29163101 +29163102 +29163103 +29163105 +29163199 +29163104 +29163201 +29163202 +29163401 +29163908 +29163907 +29163999 +29163901 +29163902 +29163903 +29163904 +29163905 +29163906 +29171101 +29171199 +29171201 +29171301 +29171302 +29171399 +29171401 +29171904 +29171908 +29171901 +29171907 +29171999 +29171902 +29171903 +29171905 +29171906 +29172003 +29172099 +29172001 +29172002 +29173201 +29173301 +29173401 +29173499 +29173501 +29173601 +29173701 +29173901 +29173902 +29173903 +29173904 +29173905 +29173906 +29173999 +29181101 +29181201 +29181301 +29181302 +29181303 +29181304 +29181399 +29181401 +29181501 +29181502 +29181505 +29181599 +29181503 +29181504 +29181601 +29181699 +29181602 +29181999 +29181801 +29181906 +29181999 +29181901 +29181902 +29181903 +29181904 +29181905 +29181907 +29181908 +29181909 +29181910 +29182102 +29182101 +29182199 +29182201 +29182299 +29182301 +29182303 +29182399 +29182302 +29182901 +29182904 +29182908 +29182915 +29182999 +29182902 +29182903 +29182905 +29182906 +29182907 +29182909 +29182910 +29182911 +29182912 +29182913 +29182914 +29182916 +29183003 +29183006 +29183099 +29183001 +29183002 +29183004 +29183005 +29183007 +29183008 +29183009 +29189101 +29189901 +29189902 +29189904 +29189918 +29189919 +29189999 +29189903 +29189905 +29189906 +29189907 +29189908 +29189909 +29189910 +29189911 +29189912 +29189913 +29189914 +29189915 +29189916 +29189917 +29189920 +29191001 +29199010 +29199004 +29199011 +29199012 +29199099 +29199001 +29199002 +29199003 +29199005 +29199006 +29199007 +29199008 +29199009 +29201101 +29201999 +29201901 +29201902 +29209005 +29209013 +29209005 +29209005 +29209004 +29209011 +29209012 +29209099 +29209009 +29209002 +29209006 +29209007 +29209010 +29209099 +29209001 +29209008 +29211101 +29211102 +29211103 +29211199 +29211104 +29211999 +29211901 +29211999 +29211902 +29211904 +29211905 +29211911 +29211912 +29211908 +29211913 +29211999 +29211903 +29211906 +29211907 +29211909 +29211910 +29211914 +29211915 +29211916 +29211917 +29212101 +29212199 +29212201 +29212910 +29212901 +29212907 +29212999 +29212902 +29212903 +29212904 +29212905 +29212906 +29212908 +29212909 +29212911 +29213002 +29213099 +29213001 +29214101 +29214214 +29214217 +29214203 +29214204 +29214299 +29214201 +29214202 +29214205 +29214206 +29214207 +29214208 +29214209 +29214210 +29214211 +29214212 +29214213 +29214215 +29214216 +29214218 +29214301 +29214399 +29214302 +29214303 +29214304 +29214305 +29214306 +29214307 +29214308 +29214309 +29214310 +29214311 +29214312 +29214401 +29214499 +29214508 +29214599 +29214501 +29214502 +29214503 +29214504 +29214505 +29214506 +29214507 +29214601 +29214914 +29214999 +29214901 +29214902 +29214903 +29214904 +29214905 +29214906 +29214907 +29214908 +29214909 +29214910 +29214911 +29214912 +29214913 +29214915 +29215101 +29215102 +29215103 +29215104 +29215105 +29215106 +29215107 +29215108 +29215109 +29215199 +29215999 +29215901 +29215902 +29215903 +29215904 +29215905 +29215906 +29215907 +29215908 +29215909 +29215910 +29221101 +29221199 +29221201 +29221299 +29221401 +29221402 +29221499 +29221301 +29221999 +29221937 +29221999 +29221910 +29221914 +29221920 +29221940 +29221901 +29221903 +29221908 +29221921 +29221928 +29221937 +29221938 +29221399 +29221999 +29221902 +29221904 +29221905 +29221906 +29221907 +29221909 +29221911 +29221912 +29221913 +29221915 +29221916 +29221917 +29221918 +29221919 +29221922 +29221923 +29221924 +29221925 +29221926 +29221927 +29221929 +29221930 +29221931 +29221932 +29221933 +29221934 +29221935 +29221936 +29221939 +29221941 +29222101 +29222199 +29222102 +29222912 +29222999 +29222901 +29222902 +29222903 +29222904 +29222905 +29222906 +29222907 +29222908 +29222909 +29222910 +29222911 +29222913 +29222914 +29222915 +29222916 +29222917 +29222918 +29222919 +29222920 +29222921 +29222922 +29222923 +29222924 +29223101 +29223909 +29223903 +29223906 +29223999 +29223901 +29223902 +29223904 +29223905 +29223907 +29223908 +29223910 +29223911 +29224101 +29224199 +29224201 +29224299 +29224301 +29224401 +29224901 +29224902 +29224903 +29224904 +29224905 +29224906 +29224907 +29224908 +29224909 +29224910 +29224911 +29224912 +29224913 +29224914 +29224915 +29224916 +29224917 +29224918 +29224919 +29224920 +29224921 +29224922 +29224923 +29224999 +29225001 +29225005 +29225016 +29225018 +29225019 +29225022 +29225099 +29225002 +29225003 +29225004 +29225006 +29225007 +29225008 +29225009 +29225010 +29225011 +29225012 +29225013 +29225014 +29225015 +29225017 +29225020 +29225021 +29231001 +29231002 +29231099 +29232001 +29232099 +29239099 +29239099 +29239002 +29239003 +29239001 +29239012 +29239099 +29239004 +29239005 +29239006 +29239007 +29239008 +29239009 +29239010 +29239011 +29241101 +29241299 +29241201 +29241901 +29241902 +29241904 +29241905 +29241906 +29241907 +29241908 +29241909 +29241910 +29241911 +29241912 +29241913 +29241903 +29241914 +29241999 +29242106 +29242107 +29242199 +29242101 +29242102 +29242103 +29242104 +29242105 +29242301 +29242401 +29242909 +29242901 +29242913 +29242914 +29242931 +29242937 +29242947 +29242999 +29242902 +29242903 +29242904 +29242905 +29242906 +29242907 +29242908 +29242910 +29242911 +29242912 +29242915 +29242916 +29242917 +29242918 +29242919 +29242920 +29242921 +29242922 +29242923 +29242924 +29242925 +29242926 +29242927 +29242928 +29242929 +29242930 +29242933 +29242934 +29242935 +29242936 +29242938 +29242939 +29242940 +29242941 +29242942 +29242943 +29242944 +29242945 +29242946 +29242948 +29251101 +29251201 +29251903 +29251999 +29251901 +29251902 +29252101 +29252999 +29252901 +29252902 +29252903 +29252904 +29261001 +29262001 +29263001 +29269099 +29269004 +29269005 +29269009 +29269099 +29269001 +29269002 +29269003 +29269006 +29269007 +29269008 +29270003 +29270004 +29270099 +29270001 +29270002 +29270005 +29280001 +29280002 +29280003 +29280005 +29280006 +29280007 +29280099 +29280004 +29291001 +29291002 +29291004 +29291005 +29291006 +29291003 +29291099 +29299099 +29299001 +29299002 +29302005 +29302006 +29302007 +29302099 +29302001 +29302002 +29302003 +29302004 +29302008 +29302009 +29303001 +29303099 +29304001 +29309039 +29309015 +29305002 +29309011 +29309031 +29309004 +29309008 +29309012 +29309014 +29309026 +29309042 +29309045 +29309053 +29309054 +29309067 +29309068 +29309070 +29309099 +29309001 +29309002 +29309003 +29309005 +29309006 +29309007 +29309009 +29309010 +29309013 +29309016 +29309017 +29309018 +29309019 +29309020 +29309021 +29309022 +29309023 +29309024 +29309025 +29309028 +29309029 +29309030 +29309032 +29309033 +29309034 +29309035 +29309036 +29309037 +29309038 +29309039 +29309040 +29309041 +29309043 +29309044 +29309046 +29309047 +29309048 +29309049 +29309050 +29309051 +29309052 +29309055 +29309056 +29309057 +29309058 +29309059 +29309060 +29309061 +29309062 +29309063 +29309064 +29309065 +29309066 +29309069 +29309071 +29311001 +29312001 +29319002 +29319017 +29319017 +29319002 +29319017 +29319002 +29319002 +29319002 +29319001 +29319002 +29319012 +29319015 +29319016 +29319017 +29319018 +29319019 +29319020 +29319099 +29319003 +29319009 +29319099 +29319002 +29319004 +29319006 +29319007 +29319008 +29319010 +29319011 +29319012 +29319013 +29319014 +29321101 +29321201 +29321301 +29321901 +29321902 +29321901 +29321903 +29321904 +29321999 +29321905 +29322001 +29322004 +29322010 +29322099 +29322002 +29322003 +29322005 +29322006 +29322007 +29322008 +29322009 +29329101 +29329201 +29329301 +29329401 +29329501 +29329903 +29329905 +29329909 +29329911 +29329999 +29329901 +29329902 +29329904 +29329906 +29329907 +29329908 +29331101 +29331102 +29331199 +29331904 +29331908 +29331901 +29331999 +29331902 +29331903 +29331905 +29331906 +29331907 +29331909 +29332101 +29332901 +29332902 +29332909 +29332903 +29332906 +29332907 +29332910 +29332911 +29332908 +29332913 +29332915 +29332999 +29332904 +29332905 +29332912 +29332914 +29332916 +29333101 +29333102 +29333201 +29333299 +29333301 +29333302 +29333902 +29333906 +29333917 +29333922 +29333924 +29333926 +29333903 +29333904 +29333905 +29333912 +29333913 +29333925 +29333931 +29333999 +29333901 +29333907 +29333908 +29333909 +29333910 +29333911 +29333914 +29333915 +29333916 +29333918 +29333919 +29333920 +29333921 +29333923 +29333927 +29333928 +29333929 +29333930 +29334101 +29334901 +29334904 +29334910 +29334905 +29334907 +29334999 +29334902 +29334903 +29334906 +29334908 +29334909 +29334911 +29334912 +29334913 +29335201 +29335301 +29335401 +29335501 +29335502 +29335599 +29335907 +29335901 +29335914 +29335902 +29335910 +29335913 +29335903 +29335905 +29335906 +29335908 +29335918 +29335919 +29335999 +29335904 +29335909 +29335911 +29335912 +29335915 +29335916 +29335917 +29335920 +29336101 +29336912 +29336915 +29336903 +29336907 +29336909 +29336916 +29336901 +29336902 +29336906 +29336908 +29336910 +29336911 +29336999 +29336905 +29336913 +29336914 +29337101 +29337201 +29337903 +29337904 +29337999 +29337901 +29337902 +29339101 +29339102 +29339904 +29339910 +29339926 +29339908 +29339909 +29339942 +29339914 +29339918 +29339921 +29339925 +29339928 +29339930 +29339931 +29339927 +29339936 +29339919 +29339937 +29339938 +29339940 +29339946 +29339948 +29339999 +29339901 +29339902 +29339903 +29339905 +29339906 +29339907 +29339911 +29339912 +29339915 +29339916 +29339917 +29339920 +29339922 +29339923 +29339924 +29339929 +29339932 +29339933 +29339934 +29339935 +29339939 +29339941 +29339943 +29339944 +29339945 +29339947 +29341005 +29341099 +29341001 +29341002 +29341003 +29341004 +29341006 +29341007 +29341008 +29342005 +29342002 +29342003 +29342099 +29342001 +29342004 +29342006 +29343001 +29343099 +29349101 +29349901 +29349910 +29349914 +29349924 +29349941 +29349905 +29349945 +29349946 +29349999 +29349902 +29349903 +29349904 +29349906 +29349907 +29349908 +29349909 +29349911 +29349912 +29349913 +29349915 +29349916 +29349917 +29349918 +29349919 +29349920 +29349921 +29349922 +29349923 +29349925 +29349926 +29349927 +29349928 +29349929 +29349930 +29349931 +29349932 +29349933 +29349934 +29349935 +29349936 +29349937 +29349938 +29349939 +29349940 +29349942 +29349943 +29349944 +29349947 +29349948 +29349949 +29350099 +29350099 +29350099 +29350099 +29350099 +29350003 +29350007 +29350020 +29350031 +29350001 +29350002 +29350004 +29350005 +29350006 +29350008 +29350009 +29350010 +29350011 +29350012 +29350013 +29350014 +29350015 +29350016 +29350017 +29350018 +29350019 +29350021 +29350022 +29350023 +29350024 +29350025 +29350026 +29350027 +29350028 +29350029 +29350030 +29350032 +29350033 +29350034 +29350035 +29350036 +29350038 +29350099 +29362103 +29362199 +29362102 +29362201 +29362299 +29362202 +29362203 +29362301 +29362399 +29362302 +29362401 +29362402 +29362499 +29362501 +29362599 +29362601 +29362699 +29362602 +29362701 +29362799 +29362802 +29362899 +29362903 +29362904 +29362901 +29362905 +29362906 +29362999 +29362902 +29362907 +29362908 +29369099 +29369001 +29369002 +29369004 +29369005 +29371101 +29371201 +29371299 +29371905 +29371999 +29371901 +29371902 +29371903 +29371904 +29372103 +29372101 +29372102 +29372104 +29372201 +29372202 +29372204 +29372205 +29372299 +29372203 +29372206 +29372207 +29372208 +29372209 +29372210 +29372304 +29372305 +29372307 +29372308 +29372310 +29372311 +29372317 +29372318 +29372321 +29372322 +29372301 +29372302 +29372303 +29372313 +29372316 +29372319 +29372399 +29372306 +29372309 +29372312 +29372314 +29372315 +29372320 +29372323 +29372909 +29372917 +29372919 +29372924 +29372929 +29372932 +29372933 +29372936 +29372903 +29372905 +29372911 +29372916 +29372923 +29372926 +29372942 +29372999 +29372901 +29372902 +29372904 +29372906 +29372907 +29372908 +29372910 +29372912 +29372913 +29372914 +29372915 +29372918 +29372920 +29372921 +29372922 +29372925 +29372927 +29372928 +29372930 +29372931 +29372934 +29372935 +29372937 +29372938 +29372939 +29372940 +29372941 +29375001 +29375099 +29379002 +29379099 +29379001 +29379003 +29379004 +29381001 +29389007 +29389099 +29389099 +29389001 +29389002 +29389003 +29389004 +29389005 +29389006 +29391199 +29391102 +29391103 +29391104 +29391105 +29391106 +29391107 +29391108 +29391109 +29391110 +29391111 +29391112 +29391113 +29391114 +29391115 +29391116 +29391117 +29391903 +29391999 +29391901 +29391902 +29391904 +29391905 +29391906 +29392001 +29392099 +29393001 +29393003 +29393002 +29394101 +29394201 +29394301 +29394401 +29394499 +29394999 +29395101 +29395999 +29395901 +29395902 +29396101 +29396201 +29396301 +29396999 +29396901 +29399101 +29399199 +29399901 +29399902 +29399903 +29399904 +29399905 +29399906 +29399907 +29399908 +29399909 +29399910 +29399911 +29399912 +29399913 +29399914 +29399915 +29399917 +29399918 +29399919 +29399999 +29399999 +29400002 +29400099 +29400001 +29400003 +29400004 +29411003 +29411007 +29411008 +29411012 +29411002 +29411006 +29411099 +29411001 +29411004 +29411005 +29411009 +29411010 +29411011 +29411013 +29412001 +29413001 +29413099 +29413002 +29413003 +29414001 +29414002 +29414003 +29415001 +29415099 +29419017 +29419004 +29419006 +29419007 +29419009 +29419010 +29419011 +29419012 +29419013 +29419014 +29419015 +29419016 +29419099 +29419001 +29419002 +29419003 +29419005 +29419008 +29420099 +30012003 +30012004 +30012005 +30012001 +30012002 +30012099 +30019001 +30019003 +30019004 +30019005 +30019006 +30019008 +30019002 +30019099 +30019007 +30021019 +30021001 +30021004 +30021007 +30021008 +30021009 +30021002 +30021003 +30021005 +30021006 +30021012 +30021013 +30021014 +30021015 +30021016 +30021017 +30021099 +30021010 +30021018 +30021011 +30021099 +30021019 +30021099 +30021021 +30021022 +30021020 +30021099 +30021099 +30022002 +30022006 +30022007 +30022008 +30022009 +30022001 +30022003 +30022005 +30022099 +30022004 +30023002 +30023099 +30023001 +30029001 +30029099 +30029002 +30029003 +30029004 +30031001 +30032001 +30032099 +30033101 +30033199 +30033901 +30033902 +30033999 +30034099 +30034099 +30034099 +30034003 +30034004 +30034099 +30039099 +30039001 +30039002 +30039003 +30039004 +30039008 +30039009 +30039010 +30039011 +30039012 +30039013 +30039014 +30039015 +30039016 +30039017 +30039018 +30039019 +30039020 +30039021 +30039006 +30039007 +30039099 +30041001 +30041099 +30042001 +30042002 +30042003 +30042099 +30043101 +30043199 +30043201 +30043299 +30043901 +30043902 +30043903 +30043904 +30043905 +30043906 +30043999 +30044099 +30044099 +30044099 +30044003 +30044005 +30044004 +30044099 +30045001 +30045002 +30045004 +30045099 +30049099 +30049001 +30049002 +30049004 +30049005 +30049006 +30049007 +30049008 +30049009 +30049011 +30049012 +30049013 +30049014 +30049015 +30049016 +30049017 +30049018 +30049019 +30049020 +30049021 +30049022 +30049023 +30049024 +30049025 +30049026 +30049027 +30049028 +30049029 +30049030 +30049031 +30049032 +30049034 +30049035 +30049036 +30049037 +30049038 +30049039 +30049040 +30049041 +30049043 +30049044 +30049045 +30049046 +30049047 +30049048 +30049049 +30049050 +30045003 +30049003 +30049010 +30049099 +30051001 +30051002 +30051099 +30059001 +30059003 +30059002 +30059099 +30061001 +30061002 +30061099 +30062001 +30062099 +30063001 +30063002 +30063099 +30064002 +30064003 +30064001 +30064099 +30065001 +30066001 +30067001 +30069101 +30069201 +31010001 +31021001 +31022101 +31022999 +31023001 +31023099 +31024001 +31025001 +31026001 +31028001 +31029001 +31029099 +31031001 +31031001 +31039001 +31039099 +31042001 +31043001 +31043099 +31049001 +31049099 +31051001 +31052001 +31053001 +31054001 +31055101 +31055999 +31056001 +31059001 +31059099 +32011001 +32012001 +32019001 +32019099 +32021001 +32029099 +32030002 +32030001 +32030099 +32041101 +32041102 +32041104 +32041103 +32041199 +32041201 +32041202 +32041203 +32041204 +32041205 +32041206 +32041299 +32041302 +32041303 +32041304 +32041301 +32041399 +32041402 +32041403 +32041404 +32041401 +32041499 +32041501 +32041599 +32041601 +32041602 +32041603 +32041604 +32041699 +32041701 +32041702 +32041703 +32041704 +32041705 +32041706 +32041707 +32041708 +32041710 +32041709 +32041799 +32041904 +32041906 +32041901 +32041903 +32041905 +32041907 +32041909 +32041902 +32041908 +32041999 +32042001 +32042002 +32042099 +32049001 +32049002 +32049099 +32050002 +32050001 +32050099 +32061101 +32061999 +32062001 +32062002 +32062003 +32064101 +32064199 +32064201 +32064299 +32064901 +32064902 +32064903 +32064904 +32064905 +32064907 +32064908 +32064906 +32064999 +32065001 +32065002 +32065099 +32071001 +32071099 +32072001 +32072099 +32073001 +32074001 +32074002 +32074099 +32081001 +32081099 +32082001 +32082002 +32082099 +32089001 +32089099 +32091001 +32091099 +32099099 +32100001 +32100002 +32100003 +32100099 +32110001 +32110099 +32121001 +32129001 +32129002 +32129099 +32131001 +32139099 +32141001 +32141002 +32149099 +32151101 +32151102 +32151199 +32151902 +32151903 +32151901 +32151999 +32159002 +32159003 +32159001 +32159099 +33011201 +33011301 +33011399 +33011901 +33011902 +33011904 +33011905 +33011906 +33011999 +33011903 +33012401 +33012599 +33012902 +33012903 +33012906 +33012999 +33012901 +33012904 +33012905 +33012907 +33013001 +33019001 +33019004 +33019005 +33019006 +33019002 +33019003 +33019099 +33021001 +33021002 +33021099 +33029099 +33030001 +33030099 +33041001 +33042001 +33043001 +33049101 +33049901 +33049999 +33051001 +33052001 +33053001 +33059099 +33061001 +33062001 +33062099 +33069099 +33071001 +33072001 +33073001 +33074101 +33074999 +33079099 +34011101 +34011999 +34012001 +34013001 +34021102 +34021101 +34021103 +34021199 +34021203 +34021202 +34021299 +34021201 +34021301 +34021302 +34021303 +34021399 +34021999 +34022001 +34022002 +34022003 +34022004 +34022005 +34022099 +34029001 +34029002 +34029099 +34031101 +34031901 +34031999 +34039101 +34039999 +34042001 +34049001 +34049002 +34049099 +34051001 +34052001 +34052099 +34053001 +34054001 +34059001 +34059099 +34060001 +34070003 +34070004 +34070001 +34070002 +34070099 +35011001 +35019001 +35019003 +35019002 +35019099 +35021101 +35021999 +35022001 +35029099 +35030001 +35030002 +35030004 +35030003 +35030099 +35040001 +35040006 +35040002 +35040003 +35040004 +35040005 +35040099 +35051001 +35052001 +35061002 +35061001 +35061099 +35069101 +35069102 +35069103 +35069104 +35069199 +35069901 +35069999 +35071001 +35079002 +35079006 +35079008 +35079009 +35079005 +35079007 +35079012 +35079001 +35079003 +35079004 +35079010 +35079011 +35079099 +36010001 +36010099 +36020002 +36020003 +36020099 +36020001 +36030001 +36030002 +36030099 +36041001 +36049001 +36050001 +36061001 +36069001 +36069002 +36069099 +37011002 +37011001 +37011099 +37012001 +37013001 +37019101 +37019901 +37019904 +37019902 +37019905 +37019999 +37019903 +37021001 +37021099 +37023101 +37023199 +37023201 +37023299 +37023999 +37023901 +37024101 +37024199 +37024201 +37024202 +37024299 +37024301 +37024401 +37024499 +37025201 +37025301 +37025401 +37025501 +37025601 +37029601 +37029701 +37029801 +37031001 +37031099 +37032001 +37032099 +37039001 +37039002 +37039003 +37039099 +37040001 +37051001 +37059001 +37059002 +37051099 +37059099 +37061001 +37061002 +37069001 +37069099 +37071001 +37079001 +37079099 +38011001 +38011099 +38012001 +38013001 +38013099 +38019001 +38019099 +38019002 +38019003 +38019004 +38021001 +38029001 +38029002 +38029004 +38029099 +38029003 +38029005 +38030001 +38040001 +38040099 +38051001 +38051099 +38059001 +38059099 +38061001 +38061099 +38062001 +38063002 +38063099 +38063001 +38069001 +38069099 +38070001 +38089499 +38089301 +38089901 +38085099 +38089199 +38089299 +38089399 +38089999 +38089199 +38089199 +38089199 +38089105 +38089102 +38089103 +38089199 +38089201 +38089202 +38089299 +38089302 +38089303 +38089399 +38089401 +38089402 +38089499 +38089999 +38089902 +38091001 +38099101 +38099199 +38099201 +38099202 +38099203 +38099299 +38099301 +38101001 +38109001 +38109099 +38111101 +38111199 +38111999 +38112101 +38112102 +38112103 +38112104 +38112105 +38112106 +38112107 +38112199 +38112904 +38112905 +38112906 +38112999 +38112901 +38112902 +38112903 +38119001 +38119099 +38121001 +38122001 +38123004 +38123002 +38123003 +38123004 +38123005 +38123001 +38123099 +38130001 +38140001 +38151101 +38151199 +38151102 +38151202 +38151299 +38151201 +38151901 +38151999 +38159002 +38159001 +38159003 +38159099 +38160002 +38160006 +38160007 +38160001 +38160004 +38160099 +38160003 +38160005 +38170001 +38170002 +38170003 +38170099 +38170004 +38180001 +38190003 +38190001 +38190002 +38190099 +38200001 +38210001 +38220003 +38220005 +38220001 +38220004 +38220099 +38220002 +38231101 +38231201 +38231202 +38231301 +38231903 +38231901 +38231999 +38231902 +38237001 +38237099 +38241001 +38243001 +38243099 +38244001 +38244099 +38245001 +38245002 +38245003 +38245099 +38246001 +38247101 +38247201 +38247301 +38247401 +38247501 +38247601 +38247701 +38247801 +38247999 +38248101 +38248201 +38248301 +38249099 +38249099 +38249099 +38249099 +38249099 +38249099 +38249001 +38249002 +38249003 +38249006 +38249008 +38249009 +38249010 +38249011 +38249013 +38249014 +38249016 +38249018 +38249019 +38249020 +38249022 +38249023 +38249025 +38249026 +38249028 +38249029 +38249030 +38249031 +38249032 +38249033 +38249035 +38249037 +38249038 +38249040 +38249041 +38249043 +38249044 +38249045 +38249046 +38249047 +38249048 +38249049 +38249050 +38249051 +38249052 +38249053 +38249054 +38249055 +38249056 +38249058 +38249059 +38249060 +38249061 +38249062 +38249063 +38249064 +38249065 +38249066 +38249067 +38249068 +38249069 +38249070 +38249072 +38249073 +38249074 +38249075 +38249076 +38249012 +38249017 +38249057 +38249071 +38249099 +38249004 +38249005 +38249007 +38249015 +38249021 +38249024 +38249027 +38249034 +38249036 +38249039 +38249042 +38249077 +38251001 +38252001 +38253001 +38254101 +38254999 +38255001 +38256101 +38256102 +38256199 +38256999 +38256901 +38259099 +38260001 +39011001 +39011002 +39012001 +39013001 +39019099 +39019001 +39019002 +39019003 +39019099 +39021001 +39021099 +39022001 +39022099 +39023001 +39023099 +39029001 +39029099 +39031101 +39031902 +39031999 +39032001 +39033001 +39039001 +39039002 +39039003 +39039005 +39039004 +39039099 +39041001 +39041002 +39041003 +39041004 +39041099 +39042101 +39042102 +39042199 +39042201 +39043001 +39043099 +39044001 +39044099 +39045001 +39046101 +39046999 +39049099 +39051201 +39051901 +39051902 +39051903 +39051999 +39052101 +39052901 +39052902 +39052999 +39053001 +39059101 +39059901 +39059902 +39059999 +39061001 +39061099 +39069001 +39069002 +39069003 +39069004 +39069005 +39069006 +39069007 +39069008 +39069009 +39069010 +39069099 +39071001 +39071003 +39071002 +39071004 +39071099 +39072001 +39072002 +39072003 +39072004 +39072005 +39072006 +39072007 +39072099 +39073002 +39073001 +39073099 +39074001 +39074002 +39074003 +39074099 +39075002 +39075001 +39075099 +39076099 +39076001 +39076099 +39077001 +39079101 +39079199 +39079901 +39079902 +39079903 +39079904 +39079905 +39079906 +39079907 +39079908 +39079909 +39079910 +39079911 +39079999 +39081001 +39081003 +39081004 +39081005 +39081006 +39081007 +39081008 +39089001 +39089002 +39089003 +39089099 +39091001 +39092002 +39092001 +39092099 +39093099 +39093001 +39093099 +39094001 +39094003 +39094002 +39094004 +39094099 +39095004 +39095005 +39095001 +39095002 +39095003 +39095099 +39100001 +39100002 +39100003 +39100004 +39100005 +39100099 +39111001 +39119001 +39119002 +39119003 +39119004 +39119005 +39119006 +39031901 +39119099 +39121101 +39121201 +39122001 +39122099 +39123101 +39123901 +39123902 +39123903 +39123904 +39123905 +39123999 +39129001 +39129002 +39129099 +39131002 +39131004 +39131005 +39131001 +39131003 +39131099 +39139002 +39139005 +39139006 +39139004 +39139007 +39139008 +39139001 +39139003 +39139099 +39140001 +39140099 +39151001 +39152001 +39153001 +39159001 +39159002 +39159099 +39161001 +39161099 +39162001 +39162002 +39162099 +39169001 +39169002 +39169003 +39169004 +39169099 +39171002 +39171003 +39171004 +39171001 +39171099 +39172101 +39172102 +39172199 +39172201 +39172202 +39172299 +39172302 +39172303 +39172301 +39172399 +39172903 +39172901 +39172902 +39172904 +39172905 +39172999 +39173101 +39173201 +39173202 +39173299 +39173301 +39173399 +39173999 +39174001 +39181001 +39181099 +39189099 +39191001 +39199099 +39201001 +39201002 +39201003 +39201004 +39201099 +39202001 +39202002 +39202003 +39202004 +39202099 +39203001 +39203002 +39203003 +39203099 +39204301 +39204302 +39204399 +39204901 +39204902 +39204999 +39205101 +39205901 +39205999 +39206101 +39206202 +39206201 +39206299 +39206302 +39206301 +39206399 +39206999 +39207101 +39207301 +39207399 +39207901 +39207999 +39209101 +39209201 +39209299 +39209301 +39209401 +39209901 +39209999 +39211101 +39211201 +39211301 +39211399 +39211401 +39211901 +39211999 +39219009 +39219003 +39219005 +39219007 +39219008 +39219001 +39219002 +39219004 +39219006 +39219099 +39221001 +39222001 +39229099 +39231001 +39231002 +39232101 +39232901 +39232902 +39232999 +39233001 +39233099 +39234001 +39234002 +39234099 +39235001 +39239099 +39241001 +39249001 +39249099 +39251001 +39252001 +39253001 +39259099 +39261001 +39262001 +39262002 +39262099 +39263001 +39263099 +39264001 +39269001 +39269004 +39269005 +39269006 +39269007 +39269008 +39269011 +39269013 +39269014 +39269015 +39269018 +39269019 +39269020 +39269024 +39269027 +39269029 +39269002 +39269003 +39269009 +39269010 +39269016 +39269021 +39269025 +39269026 +39269031 +39269033 +39269034 +39269035 +39269012 +39269017 +39269022 +39269023 +39269028 +39269030 +39269032 +39269099 +40011001 +40012101 +40012201 +40012901 +40013001 +40013002 +40013099 +40021102 +40021101 +40021199 +40021901 +40021902 +40021903 +40021999 +40022001 +40023101 +40023199 +40023901 +40023999 +40024101 +40024901 +40024999 +40025101 +40025901 +40025902 +40025903 +40025999 +40026001 +40026099 +40027001 +40028001 +40029101 +40029102 +40029199 +40029901 +40029999 +40030001 +40040001 +40040002 +40040099 +40051001 +40052001 +40052099 +40059101 +40059102 +40059199 +40059103 +40059999 +40061001 +40069001 +40069002 +40069003 +40069004 +40069099 +40070001 +40081101 +40081901 +40081999 +40082101 +40082199 +40082901 +40082999 +40082902 +40091101 +40091199 +40091201 +40091202 +40091299 +40092101 +40092103 +40092104 +40092102 +40092202 +40092299 +40092201 +40092202 +40092203 +40092204 +40093101 +40093103 +40093102 +40093104 +40093105 +40093202 +40093203 +40093299 +40093201 +40093204 +40094101 +40094102 +40094103 +40094199 +40094201 +40094202 +40094299 +40101101 +40101199 +40101201 +40101202 +40101299 +40101902 +40101999 +40101901 +40101903 +40101904 +40103101 +40103201 +40103301 +40103401 +40103501 +40103599 +40103601 +40103699 +40103901 +40103902 +40103904 +40103999 +40103903 +40111002 +40111003 +40111004 +40111005 +40111006 +40111007 +40111008 +40111009 +40111099 +40112004 +40112005 +40112002 +40112003 +40113001 +40114001 +40115001 +40116101 +40116102 +40119201 +40116199 +40119299 +40116201 +40116301 +40116302 +40116303 +40119301 +40119401 +40116299 +40119399 +40116399 +40119499 +40119901 +40119902 +40116999 +40119999 +40121101 +40121201 +40121301 +40121999 +40122001 +40122002 +40122099 +40129002 +40129003 +40129099 +40129001 +40131001 +40132001 +40139001 +40139002 +40139003 +40139099 +40141001 +40149001 +40149002 +40149099 +40151101 +40151999 +40159001 +40159002 +40159003 +40159099 +40159004 +40161001 +40169101 +40169201 +40169299 +40169301 +40169302 +40169303 +40169399 +40169402 +40169401 +40169499 +40169501 +40169502 +40169599 +40169901 +40169904 +40169902 +40169903 +40169906 +40169907 +40169908 +40169909 +40169910 +40169999 +40169905 +40170003 +40170002 +40170099 +40170001 +41012001 +41012002 +41015001 +41015099 +41015002 +41019001 +41019099 +41019002 +41021001 +41022101 +41022999 +41032001 +41032099 +41033001 +41039001 +41039099 +41039002 +41039003 +41041101 +41041103 +41041199 +41041102 +41041903 +41041999 +41041901 +41041902 +41044101 +41044199 +41044901 +41044999 +41051003 +41051099 +41051001 +41051002 +41053001 +41062103 +41062199 +41062101 +41062102 +41062201 +41063101 +41063201 +41064001 +41064099 +41069101 +41069201 +41071101 +41071199 +41071201 +41071299 +41071999 +41071901 +41079101 +41079201 +41079999 +41079901 +41120001 +41131001 +41132001 +41133001 +41139001 +41139099 +41141001 +41142001 +41151001 +41152001 +42010001 +42021101 +42021201 +42021202 +42021999 +42022101 +42022201 +42022202 +42022999 +42023101 +42023201 +42023202 +42023999 +42029101 +42029201 +42029202 +42029203 +42029999 +42031001 +42031099 +42032101 +42032901 +42032999 +42033001 +42033099 +42034001 +42034099 +42050002 +42050001 +42050099 +42060001 +42060099 +42060002 +43011001 +43013001 +43016001 +43018001 +43018002 +43018003 +43018004 +43018005 +43018006 +43018007 +43018099 +43019001 +43021101 +43021999 +43021901 +43021902 +43021903 +43022001 +43022099 +43023001 +43023099 +43031001 +43039099 +43040001 +44011001 +44011001 +44012101 +44012201 +44013101 +44013999 +44013999 +44021001 +44029099 +44031001 +44031001 +44032099 +44032099 +44032099 +44032099 +44032099 +44032099 +44034101 +44034999 +44034901 +44034902 +44039999 +44039101 +44039201 +44039201 +44039999 +44039999 +44039999 +44039999 +44039999 +44041001 +44041099 +44042001 +44042002 +44042003 +44042004 +44042099 +44050001 +44050002 +44061001 +44061001 +44069099 +44069099 +44071001 +44071003 +44071002 +44071099 +44071001 +44071003 +44071002 +44071099 +44071003 +44071004 +44071002 +44071099 +44072102 +44072199 +44072101 +44072201 +44072299 +44072501 +44072601 +44072701 +44072801 +44072901 +44072902 +44072903 +44072999 +44079999 +44079101 +44079201 +44079299 +44079301 +44079401 +44079501 +44079599 +44079502 +44079902 +44079999 +44079901 +44079902 +44079999 +44079903 +44081001 +44081002 +44083101 +44083999 +44083901 +44089099 +44089001 +44089099 +44091002 +44091001 +44091099 +44092101 +44092102 +44092199 +44092999 +44092901 +44092999 +44092902 +44101101 +44101102 +44101103 +44101199 +44101201 +44101299 +44101903 +44101999 +44101901 +44101902 +44109001 +44109099 +44111201 +44111202 +44111203 +44111204 +44111205 +44111299 +44111301 +44111302 +44111303 +44111399 +44111304 +44111305 +44111401 +44111403 +44111402 +44111404 +44111499 +44111405 +44119201 +44119299 +44119301 +44119302 +44119303 +44119399 +44119401 +44119402 +44119403 +44119499 +44121001 +44123101 +44123199 +44123299 +44123201 +44123299 +44123901 +44123999 +44129401 +44129499 +44129402 +44129901 +44129902 +44129999 +44130001 +44130002 +44130099 +44140001 +44151001 +44152001 +44152099 +44160001 +44160005 +44160099 +44160002 +44160003 +44160004 +44170001 +44170099 +44181001 +44182001 +44184001 +44185001 +44186001 +44187202 +44187101 +44187999 +44187101 +44187299 +44187999 +44187901 +44189099 +44189001 +44189099 +44190001 +44190001 +44190001 +44190001 +44201001 +44209099 +44211001 +44219001 +44219002 +44219004 +44219003 +44219099 +44219001 +44219002 +44219004 +44219003 +44219099 +45011001 +45019099 +45020001 +45031001 +45039099 +45041002 +45041099 +45041001 +45041003 +45049099 +46012101 +46012201 +46012999 +46012901 +46019201 +46019299 +46019301 +46019399 +46019401 +46019499 +46019901 +46019999 +46021101 +46021201 +46021999 +46029099 +47010001 +47020001 +47020099 +47031102 +47031101 +47031199 +47031901 +47031902 +47032101 +47032102 +47032901 +47032902 +47041101 +47041901 +47042101 +47042901 +47050001 +47061001 +47062001 +47063001 +47063002 +47063003 +47069101 +47069201 +47069301 +47071001 +47072001 +47073001 +47079001 +48010001 +48026199 +48026299 +48021001 +48022001 +48022002 +48022099 +48024001 +48025404 +48025401 +48025402 +48025403 +48025405 +48025406 +48025407 +48025499 +48025502 +48025503 +48025501 +48025599 +48025602 +48025601 +48025699 +48025701 +48025799 +48025801 +48025802 +48025803 +48025899 +48026101 +48026199 +48026102 +48026201 +48026299 +48026999 +48026901 +48030001 +48030099 +48030002 +48030003 +48041101 +48041901 +48041902 +48041999 +48042101 +48042999 +48043104 +48043199 +48043101 +48043102 +48043103 +48043901 +48043999 +48043902 +48043903 +48044101 +48044201 +48044999 +48044901 +48044902 +48045101 +48045199 +48045201 +48045901 +48045999 +48045902 +48051101 +48051201 +48051999 +48052401 +48052499 +48052501 +48052599 +48053001 +48054001 +48055001 +48059101 +48059201 +48059301 +48061001 +48062001 +48063001 +48064001 +48070001 +48070002 +48070099 +48081001 +48084001 +48084002 +48084003 +48084099 +48089001 +48089099 +48092001 +48099002 +48099001 +48099099 +48101301 +48101399 +48101302 +48101303 +48101304 +48101305 +48101306 +48101401 +48101499 +48101402 +48101403 +48101404 +48101405 +48101406 +48101999 +48102201 +48102299 +48102901 +48102999 +48103101 +48103102 +48103103 +48103199 +48103104 +48103201 +48103999 +48109201 +48109999 +48109901 +48111002 +48111001 +48111099 +48114101 +48114102 +48114901 +48114999 +48115101 +48115102 +48115104 +48115105 +48115199 +48115103 +48115106 +48115907 +48115901 +48115904 +48115906 +48115999 +48115902 +48115903 +48115905 +48116001 +48116099 +48116002 +48119010 +48119002 +48119005 +48119007 +48119099 +48119001 +48119003 +48119004 +48119006 +48119008 +48119009 +48120001 +48131001 +48132001 +48139099 +48142001 +48149002 +48149099 +48149001 +48162001 +48169001 +48169099 +48169002 +48171001 +48172001 +48173001 +48181001 +48182001 +48183001 +48185001 +48189099 +48191001 +48192001 +48192099 +48193001 +48194001 +48195001 +48196001 +48201001 +48201099 +48202001 +48203001 +48204001 +48205001 +48209099 +48211001 +48219099 +48221001 +48229099 +48232001 +48232099 +48234001 +48236101 +48236999 +48237003 +48237001 +48237099 +48237002 +48239001 +48239002 +48239005 +48239010 +48239011 +48239012 +48239017 +48239007 +48239015 +48239016 +48239099 +48239003 +48239004 +48239006 +48239008 +48239009 +48239013 +48239014 +49011001 +49011099 +49019101 +49019102 +49019199 +49019103 +49019901 +49019902 +49019903 +49019904 +49019905 +49019906 +49019999 +49021001 +49021099 +49029001 +49029099 +49030001 +49030099 +49040001 +49051001 +49059101 +49059199 +49059901 +49059999 +49060001 +49070001 +49070002 +49070099 +49081001 +49081099 +49089002 +49089003 +49089001 +49089004 +49089099 +49090001 +49100001 +49111001 +49111002 +49111003 +49111004 +49111099 +49119101 +49119103 +49119102 +49119104 +49119199 +49119901 +49119906 +49119902 +49119903 +49119905 +49119999 +49119904 +50010001 +50020001 +50030001 +50030099 +50040001 +50050001 +50060001 +50071001 +50072001 +50079001 +51011101 +51011199 +51011901 +51011999 +51012101 +51012199 +51012901 +51012999 +51013001 +51013099 +51021101 +51021901 +51021902 +51021999 +51022001 +51022099 +51031001 +51031002 +51031099 +51032001 +51032002 +51032099 +51033001 +51040001 +51051001 +51052101 +51052901 +51052999 +51053101 +51053901 +51053902 +51053999 +51054001 +51061001 +51062001 +51071001 +51072001 +51081001 +51082001 +51091001 +51099099 +51100001 +51111101 +51111199 +51111901 +51111999 +51112001 +51112099 +51113001 +51113099 +51119099 +51121101 +51121199 +51121901 +51121902 +51121999 +51122001 +51122099 +51123001 +51123002 +51123099 +51129099 +51130001 +51130099 +52010001 +52010002 +52010099 +52021001 +52029101 +52029901 +52029999 +52030001 +52041101 +52041999 +52042001 +52051101 +52051201 +52051301 +52051401 +52051501 +52052101 +52052201 +52052301 +52052401 +52052601 +52052701 +52052801 +52053101 +52053201 +52053301 +52053401 +52053501 +52054101 +52054201 +52054301 +52054401 +52054601 +52054701 +52054801 +52061101 +52061201 +52061301 +52061401 +52061501 +52062101 +52062201 +52062301 +52062401 +52062501 +52063101 +52063201 +52063301 +52063401 +52063501 +52064101 +52064201 +52064301 +52064401 +52064501 +52071001 +52079099 +52081101 +52081201 +52081301 +52081901 +52081902 +52081999 +52082101 +52082201 +52082301 +52082901 +52082999 +52083101 +52083201 +52083301 +52083901 +52083999 +52084101 +52084201 +52084301 +52084901 +52085101 +52085201 +52085901 +52085902 +52085999 +52091101 +52091201 +52091901 +52091999 +52092101 +52092201 +52092901 +52092999 +52093101 +52093201 +52093901 +52093999 +52094101 +52094202 +52094203 +52094291 +52094292 +52094301 +52094901 +52095101 +52095201 +52095901 +52095999 +52101101 +52101199 +52101901 +52101902 +52101999 +52102101 +52102902 +52102901 +52102999 +52103101 +52103201 +52103901 +52103999 +52104101 +52104901 +52104999 +52105101 +52105901 +52105902 +52105999 +52111101 +52111199 +52111201 +52111901 +52111999 +52112001 +52112002 +52112003 +52112099 +52113101 +52113201 +52113901 +52113999 +52114101 +52114202 +52114203 +52114291 +52114292 +52114301 +52114901 +52115101 +52115201 +52115901 +52115999 +52121101 +52121201 +52121301 +52121401 +52121501 +52122101 +52122201 +52122301 +52122401 +52122499 +52122501 +53011001 +53012101 +53012999 +53013001 +53021001 +53029099 +53031001 +53039099 +53050001 +53050002 +53050005 +53050003 +53050004 +53050006 +53050007 +53050099 +53061001 +53062001 +53071001 +53072001 +53081001 +53082001 +53089001 +53089002 +53089099 +53091101 +53091999 +53092101 +53092999 +53101001 +53109099 +53110001 +53110099 +54011001 +54012001 +54021101 +54021901 +54021999 +54022001 +54022099 +54023101 +54023201 +54023301 +54023401 +54023999 +54023901 +54024401 +54024499 +54024503 +54024501 +54024502 +54024504 +54024599 +54024601 +54024702 +54024799 +54024701 +54024801 +54024802 +54024899 +54024901 +54024902 +54024999 +54024903 +54024904 +54024905 +54025101 +54025199 +54025201 +54025202 +54025299 +54025999 +54025999 +54025901 +54025902 +54025903 +54025904 +54025905 +54026101 +54026199 +54026201 +54026299 +54026999 +54026901 +54026999 +54026902 +54026903 +54026904 +54026905 +54031001 +54033101 +54033102 +54033201 +54033202 +54033301 +54033999 +54033901 +54034101 +54034102 +54034201 +54034999 +54034901 +54041101 +54041199 +54041201 +54041299 +54041901 +54041902 +54041999 +54041903 +54049099 +54050001 +54050002 +54050003 +54050004 +54050099 +54060001 +54060002 +54060004 +54060003 +54060005 +54071001 +54071002 +54071099 +54072001 +54072099 +54073001 +54073002 +54073003 +54073099 +54074102 +54074103 +54074104 +54074202 +54074203 +54074204 +54074301 +54074302 +54074303 +54074399 +54074401 +54075102 +54075103 +54075104 +54075202 +54075203 +54075204 +54075301 +54075302 +54075303 +54075391 +54075392 +54075393 +54075402 +54075403 +54075404 +54076101 +54076103 +54076104 +54076105 +54076191 +54076192 +54076193 +54076901 +54076991 +54076992 +54076993 +54077101 +54077201 +54077301 +54077399 +54077302 +54077303 +54077401 +54078101 +54078201 +54078299 +54078202 +54078203 +54078301 +54078401 +54079101 +54079102 +54079103 +54079104 +54079105 +54079106 +54079107 +54079199 +54079201 +54079202 +54079203 +54079204 +54079205 +54079206 +54079299 +54079301 +54079302 +54079303 +54079304 +54079305 +54079306 +54079307 +54079399 +54079401 +54079402 +54079403 +54079404 +54079405 +54079406 +54079407 +54079499 +54081001 +54081002 +54081003 +54081004 +54081099 +54082101 +54082102 +54082103 +54082199 +54082204 +54082299 +54082201 +54082202 +54082203 +54082301 +54082302 +54082303 +54082304 +54082305 +54082399 +54082401 +54082499 +54083101 +54083102 +54083103 +54083104 +54083199 +54083201 +54083202 +54083203 +54083204 +54083205 +54083299 +54083301 +54083302 +54083303 +54083304 +54083399 +54083401 +54083402 +54083403 +54083499 +55011001 +55012002 +55012099 +55012001 +55012003 +55013001 +55014001 +55019099 +55020099 +55020001 +55020099 +55031101 +55031999 +55032003 +55032001 +55032002 +55032099 +55033001 +55034001 +55034099 +55039001 +55039099 +55041001 +55041099 +55049099 +55051001 +55052001 +55061001 +55062001 +55063001 +55069099 +55069099 +55070001 +55081001 +55082001 +55091101 +55091201 +55092101 +55092201 +55093101 +55093201 +55094101 +55094201 +55095101 +55095201 +55095301 +55095999 +55096101 +55096201 +55096999 +55099101 +55099201 +55099999 +55101101 +55101201 +55102001 +55103001 +55109001 +55111001 +55112001 +55113001 +55121102 +55121103 +55121104 +55121901 +55121991 +55121992 +55121993 +55122101 +55122999 +55129101 +55129999 +55131102 +55131103 +55131202 +55131299 +55131302 +55131399 +55131902 +55131999 +55132102 +55132103 +55132303 +55132304 +55132391 +55132399 +55132902 +55132999 +55133102 +55133199 +55133904 +55133905 +55133906 +55133991 +55133999 +55134102 +55134199 +55134904 +55134905 +55134991 +55134902 +55134999 +55141101 +55141201 +55141901 +55141999 +55142101 +55142201 +55142301 +55142901 +55143004 +55143099 +55143001 +55143002 +55143003 +55144101 +55144201 +55144301 +55144901 +55151102 +55151103 +55151199 +55151202 +55151203 +55151299 +55151301 +55151399 +55151901 +55151902 +55151999 +55152102 +55152103 +55152199 +55152201 +55152299 +55152901 +55152902 +55152999 +55159102 +55159103 +55159199 +55159901 +55159902 +55159903 +55159904 +55159999 +55161101 +55161201 +55161301 +55161401 +55162101 +55162201 +55162301 +55162401 +55163101 +55163199 +55163201 +55163299 +55163301 +55163399 +55163401 +55163499 +55164101 +55164201 +55164301 +55164401 +55169101 +55169201 +55169301 +55169401 +56012101 +56012199 +56012201 +56012299 +56012999 +56013001 +56013099 +56021001 +56021099 +56022101 +56022102 +56022199 +56022901 +56029099 +56031101 +56031201 +56031299 +56031301 +56031399 +56031401 +56039101 +56039201 +56039301 +56039401 +56041001 +56049001 +56049002 +56049004 +56049005 +56049006 +56049007 +56049008 +56049009 +56049010 +56049011 +56049012 +56049013 +56049014 +56049003 +56049099 +56050001 +56060001 +56060002 +56060099 +56072101 +56072999 +56074101 +56074999 +56075001 +56079002 +56079001 +56079099 +56081101 +56081199 +56081999 +56089099 +56090001 +56090099 +57011001 +57019001 +57021001 +57022001 +57023101 +57023201 +57023901 +57024101 +57024201 +57024901 +57025001 +57025002 +57025099 +57029101 +57029201 +57029901 +57031001 +57032001 +57032099 +57033001 +57033099 +57039001 +57041001 +57049099 +57049099 +57050001 +57050099 +58011001 +58012101 +58012201 +58012301 +58012601 +58012701 +58013101 +58013201 +58013301 +58013601 +58013701 +58019001 +58021101 +58021999 +58022001 +58023001 +58030001 +58030002 +58030003 +58030004 +58030099 +58041001 +58042101 +58042901 +58043001 +58050001 +58061001 +58061099 +58062001 +58062099 +58063101 +58063201 +58063901 +58063999 +58064001 +58064099 +58071001 +58079099 +58081001 +58089099 +58090001 +58101001 +58109101 +58109201 +58109901 +58110001 +59011001 +59019001 +59019002 +59019099 +59021001 +59022001 +59029099 +59031001 +59031099 +59032001 +59032099 +59039001 +59039003 +59039004 +59039005 +59039099 +59041001 +59049001 +59049002 +59050001 +59061001 +59069101 +59069199 +59069901 +59069902 +59069903 +59069999 +59070001 +59070005 +59070006 +59070002 +59070003 +59070004 +59070099 +59080003 +59080001 +59080002 +59080099 +59090001 +59100001 +59111001 +59111099 +59112001 +59113101 +59113201 +59114001 +59119001 +59119002 +59119003 +59119099 +60011002 +60011099 +60012102 +60012199 +60012202 +60012203 +60012299 +60012901 +60012902 +60012999 +60019102 +60019199 +60019202 +60019203 +60019299 +60019901 +60024001 +60024002 +60024003 +60024004 +60024099 +60029001 +60029002 +60029003 +60029004 +60029099 +60031001 +60032001 +60033001 +60034001 +60039001 +60039099 +60041001 +60041002 +60041003 +60041004 +60041005 +60041006 +60041099 +60049001 +60049099 +60052101 +60052201 +60052301 +60052401 +60053199 +60053299 +60053301 +60053499 +60053102 +60053199 +60053201 +60053299 +60053301 +60053402 +60053499 +60054101 +60054201 +60054301 +60054401 +60059001 +60059099 +60061001 +60062101 +60062199 +60062201 +60062299 +60062301 +60062399 +60062401 +60062499 +60063102 +60063199 +60063202 +60063299 +60063302 +60063399 +60063402 +60063499 +60064101 +60064201 +60064301 +60064401 +60069099 +61012002 +61012099 +61013001 +61013003 +61013091 +61013092 +61019001 +61019099 +61021001 +61022002 +61022099 +61023001 +61023002 +61023003 +61023099 +61029001 +61031001 +61031002 +61031003 +61031004 +61031099 +61032201 +61032301 +61032901 +61032999 +61033101 +61033201 +61033301 +61033399 +61033901 +61033902 +61033999 +61034101 +61034201 +61034202 +61034204 +61034291 +61034292 +61034301 +61034302 +61034303 +61034304 +61034305 +61034391 +61034392 +61034901 +61034902 +61034999 +61041301 +61041399 +61041901 +61041902 +61041903 +61041904 +61041905 +61041999 +61042201 +61042301 +61042901 +61042999 +61043101 +61043201 +61043301 +61043399 +61043901 +61043902 +61043999 +61044101 +61044202 +61044299 +61044301 +61044391 +61044392 +61044401 +61044403 +61044499 +61044901 +61044999 +61045101 +61045202 +61045299 +61045301 +61045391 +61045392 +61045901 +61045902 +61045999 +61046101 +61046201 +61046202 +61046206 +61046291 +61046292 +61046301 +61046302 +61046303 +61046304 +61046391 +61046392 +61046901 +61046902 +61046999 +61051003 +61051004 +61051099 +61052002 +61052099 +61059001 +61059099 +61061003 +61061004 +61061091 +61061092 +61062001 +61062091 +61062092 +61069001 +61069002 +61069099 +61071102 +61071199 +61071202 +61071299 +61071901 +61072102 +61072199 +61072202 +61072299 +61072901 +61072999 +61079101 +61079901 +61079902 +61079999 +61081101 +61081901 +61082102 +61082199 +61082202 +61082299 +61082901 +61083102 +61083199 +61083202 +61083299 +61083901 +61083999 +61089101 +61089199 +61089201 +61089299 +61089901 +61089999 +61091002 +61091099 +61099003 +61099091 +61099002 +61099092 +61099093 +61101102 +61101199 +61101202 +61101299 +61101901 +61101999 +61102002 +61102003 +61102004 +61102091 +61102092 +61102093 +61102094 +61102099 +61103004 +61103005 +61103003 +61103006 +61103007 +61103091 +61103092 +61103093 +61103099 +61109001 +61109003 +61109004 +61109005 +61109006 +61109091 +61109099 +61112004 +61112005 +61112007 +61112008 +61112009 +61112011 +61112013 +61112014 +61112015 +61112016 +61112017 +61112018 +61112019 +61112020 +61112091 +61112092 +61112099 +61113005 +61113008 +61113009 +61113010 +61113011 +61113012 +61113013 +61113014 +61113015 +61113016 +61113017 +61113018 +61113019 +61113020 +61113091 +61113092 +61113093 +61113099 +61119001 +61119002 +61119003 +61119004 +61119099 +61121101 +61121201 +61121901 +61121902 +61121999 +61122001 +61122099 +61123101 +61123901 +61124101 +61124901 +61130001 +61130099 +61142001 +61143001 +61143099 +61149001 +61149099 +61151001 +61152101 +61152201 +61152901 +61153001 +61159401 +61159501 +61159601 +61159901 +61161001 +61161099 +61169101 +61169201 +61169301 +61169901 +61171001 +61171099 +61178002 +61178001 +61178099 +61179001 +62011101 +62011201 +62011291 +62011292 +62011301 +62011302 +62011391 +62011392 +62011901 +62019101 +62019201 +62019291 +62019292 +62019301 +62019399 +62019901 +62021101 +62021201 +62021291 +62021292 +62021301 +62021302 +62021391 +62021392 +62021901 +62029101 +62029201 +62029291 +62029292 +62029301 +62029391 +62029392 +62029901 +62031101 +62031201 +62031901 +62031902 +62031999 +62032201 +62032301 +62032901 +62032999 +62033101 +62033202 +62033299 +62033301 +62033391 +62033392 +62033901 +62033902 +62033903 +62033999 +62034101 +62034201 +62034202 +62034210 +62034208 +62034294 +62034296 +62034291 +62034207 +62034209 +62034293 +62034295 +62034292 +62034301 +62034304 +62034308 +62034309 +62034393 +62034394 +62034391 +62034305 +62034310 +62034311 +62034395 +62034396 +62034392 +62034901 +62041101 +62041201 +62041301 +62041399 +62041901 +62041902 +62041903 +62041999 +62042101 +62042201 +62042301 +62042901 +62043101 +62043202 +62043299 +62043301 +62043302 +62043391 +62043392 +62043393 +62043901 +62043902 +62043903 +62043999 +62044101 +62044201 +62044291 +62044292 +62044301 +62044302 +62044303 +62044391 +62044392 +62044401 +62044402 +62044491 +62044492 +62044901 +62044999 +62045101 +62045202 +62045299 +62045301 +62045302 +62045391 +62045392 +62045901 +62045902 +62045903 +62045905 +62045904 +62045999 +62046101 +62046206 +62046207 +62046208 +62046210 +62046293 +62046294 +62046295 +62046296 +62046291 +62046292 +62046301 +62046304 +62046308 +62046310 +62046393 +62046395 +62046391 +62046309 +62046305 +62046307 +62046394 +62046392 +62046902 +62046903 +62046904 +62046905 +62046999 +62052001 +62052091 +62052092 +62053001 +62053091 +62053092 +62059001 +62059002 +62059099 +62061001 +62062001 +62062099 +62063002 +62063003 +62064001 +62064002 +62064091 +62064092 +62069001 +62069099 +62071102 +62071199 +62071901 +62072102 +62072199 +62072201 +62072901 +62072999 +62079101 +62079901 +62079902 +62079999 +62081101 +62081901 +62082102 +62082199 +62082202 +62082299 +62082901 +62082999 +62089101 +62089201 +62089203 +62089291 +62089901 +62089902 +62089999 +62092004 +62092005 +62092012 +62092008 +62092009 +62092010 +62092011 +62092013 +62092014 +62092015 +62092091 +62092092 +62092099 +62093004 +62093006 +62093007 +62093008 +62093009 +62093010 +62093091 +62093092 +62093099 +62099001 +62099002 +62099003 +62099004 +62099099 +62101001 +62102001 +62103001 +62104001 +62105001 +62111101 +62111201 +62112001 +62112099 +62113201 +62113299 +62113301 +62113399 +62113901 +62113902 +62113999 +62114201 +62114299 +62114301 +62114399 +62114901 +62121002 +62121004 +62121008 +62121003 +62121005 +62121006 +62122001 +62123001 +62129001 +62129002 +62129099 +62132001 +62139001 +62139003 +62139099 +62141001 +62142001 +62143001 +62144001 +62149001 +62151001 +62152001 +62159001 +62160001 +62171002 +62171099 +62179001 +63011001 +63012001 +63013001 +63014001 +63019001 +63021001 +63022102 +63022103 +63022104 +63022105 +63022106 +63022107 +63022108 +63022109 +63022199 +63022202 +63022203 +63022204 +63022205 +63022206 +63022207 +63022208 +63022209 +63022299 +63022901 +63023107 +63023108 +63023109 +63023110 +63023111 +63023112 +63023113 +63023114 +63023199 +63023207 +63023208 +63023209 +63023210 +63023211 +63023212 +63023213 +63023214 +63023299 +63023901 +63024001 +63025101 +63025301 +63025901 +63025999 +63026002 +63026003 +63026004 +63026005 +63026099 +63029101 +63029301 +63029901 +63029999 +63031201 +63031901 +63031999 +63039101 +63039201 +63039299 +63039901 +63041101 +63041999 +63049101 +63049101 +63049201 +63049301 +63049901 +63051001 +63052001 +63053201 +63053301 +63053999 +63059001 +63061201 +63061901 +63061999 +63062201 +63062901 +63062999 +63063001 +63063099 +63064001 +63064099 +63069001 +63069099 +63071001 +63072001 +63079001 +63079099 +63080001 +63090001 +63101001 +63101099 +63109001 +63109099 +64011002 +64011099 +64019202 +64019203 +64019204 +64019205 +64019206 +64019207 +64019208 +64019209 +64019210 +64019901 +64019902 +64019903 +64019904 +64019905 +64019906 +64019907 +64019908 +64021201 +64021901 +64021902 +64021903 +64021904 +64021907 +64021905 +64021908 +64021906 +64021909 +64022002 +64022003 +64029102 +64029103 +64029104 +64029105 +64029107 +64029924 +64029925 +64029926 +64029927 +64029928 +64029929 +64029907 +64029908 +64029909 +64029910 +64029911 +64029912 +64029913 +64029914 +64029930 +64029931 +64029916 +64029917 +64029918 +64029903 +64029904 +64029922 +64029923 +64029932 +64031201 +64031902 +64031901 +64031903 +64031904 +64031991 +64031999 +64032001 +64034002 +64034003 +64034004 +64035101 +64035102 +64035103 +64035104 +64035901 +64035905 +64035906 +64035907 +64035902 +64035903 +64035904 +64039104 +64039101 +64039108 +64039105 +64039106 +64039107 +64039109 +64039110 +64039111 +64039901 +64039906 +64039912 +64039907 +64039908 +64039909 +64039910 +64039911 +64039905 +64039903 +64039904 +64041109 +64041120 +64041121 +64041107 +64041108 +64041110 +64041111 +64041104 +64041105 +64041118 +64041119 +64041113 +64041114 +64041115 +64041122 +64041902 +64041908 +64041916 +64041901 +64041913 +64041914 +64041904 +64041905 +64041906 +64041907 +64041909 +64041915 +64041917 +64041910 +64041911 +64041912 +64041991 +64042002 +64042003 +64042099 +64051001 +64052001 +64052002 +64052003 +64052004 +64052005 +64052091 +64059001 +64059002 +64059099 +64061001 +64061002 +64061005 +64061004 +64061006 +64061099 +64061003 +64061007 +64061099 +64062001 +64062002 +64069001 +64069002 +64069099 +65010001 +65020001 +65040001 +65050001 +65050002 +65050003 +65050099 +65061001 +65069101 +65069199 +65069901 +65069999 +65070001 +66011001 +66019101 +66019999 +66020001 +66032001 +66032099 +66039099 +66039001 +67010001 +67010099 +67021001 +67029001 +67030001 +67041101 +67041999 +67042001 +67049001 +68010001 +68021001 +68021099 +68022101 +68022301 +68022399 +68022901 +68022999 +68029101 +68029201 +68029301 +68029901 +68030001 +68030099 +68041001 +68041099 +68042101 +68042199 +68042201 +68042202 +68042203 +68042299 +68042301 +68042399 +68043001 +68051001 +68051099 +68052001 +68053001 +68061001 +68062001 +68069099 +68071001 +68079099 +68080001 +68091101 +68091999 +68099001 +68101101 +68101999 +68109101 +68109199 +68109999 +68109901 +68114003 +68114004 +68114001 +68114002 +68114099 +68118101 +68118201 +68118902 +68118999 +68128001 +68128005 +68128006 +68128008 +68128099 +68128002 +68128003 +68128004 +68128007 +68129101 +68129201 +68129301 +68129399 +68129902 +68129903 +68129905 +68129999 +68129901 +68129904 +68132002 +68132099 +68132001 +68132003 +68132004 +68138101 +68138199 +68138901 +68138999 +68138902 +68141001 +68141099 +68149099 +68151001 +68151002 +68151003 +68151004 +68151099 +68152001 +68159101 +68159199 +68159901 +68159999 +69010001 +69021001 +69022001 +69029099 +69029001 +69029002 +69029003 +69031002 +69031099 +69031001 +69032002 +69032004 +69032005 +69032099 +69032001 +69032002 +69032003 +69039099 +69039001 +69041001 +69049099 +69051001 +69059001 +69059099 +69060001 +69079001 +69089002 +69071001 +69081001 +69079099 +69089099 +69079002 +69089003 +69071001 +69081001 +69079099 +69089099 +69079002 +69089003 +69071001 +69081001 +69079099 +69089099 +69071001 +69081001 +69079099 +69089099 +69071001 +69081001 +69079099 +69089099 +69091101 +69091102 +69091103 +69091104 +69091105 +69091199 +69091201 +69091999 +69099099 +69101001 +69109001 +69109099 +69111001 +69119099 +69120001 +69120099 +69131001 +69139099 +69141001 +69149099 +70010001 +70021001 +70022001 +70022002 +70022003 +70022004 +70022099 +70023101 +70023102 +70023199 +70023201 +70023999 +70031201 +70031299 +70031901 +70031999 +70032001 +70033001 +70042001 +70042002 +70042099 +70049001 +70049099 +70051001 +70051099 +70052101 +70052102 +70052199 +70052901 +70052902 +70052903 +70052904 +70052999 +70053001 +70060001 +70060003 +70060002 +70060099 +70071101 +70071102 +70071103 +70071199 +70071901 +70071999 +70072103 +70072101 +70072102 +70072199 +70072999 +70080001 +70091004 +70091001 +70091002 +70091003 +70091099 +70099101 +70099199 +70099201 +70101001 +70101099 +70102001 +70109001 +70109002 +70109003 +70109099 +70111001 +70111002 +70111003 +70111004 +70111099 +70112001 +70112002 +70112003 +70112004 +70112099 +70119001 +70119099 +70131001 +70132201 +70132801 +70132899 +70133301 +70133703 +70133703 +70133701 +70133702 +70133799 +70134101 +70134201 +70134902 +70134903 +70134903 +70134903 +70134903 +70134904 +70134903 +70134901 +70134999 +70139101 +70139999 +70139999 +70139999 +70139999 +70139999 +70140001 +70140002 +70140003 +70140004 +70140099 +70151001 +70159099 +70161001 +70169099 +70171004 +70171006 +70171007 +70171008 +70171009 +70171010 +70171001 +70171002 +70171003 +70171005 +70171011 +70171012 +70171013 +70171099 +70172001 +70172003 +70172002 +70172099 +70179003 +70179004 +70179001 +70179002 +70179005 +70179099 +70181001 +70182001 +70182099 +70189001 +70189099 +70191101 +70191201 +70191999 +70193101 +70193201 +70193901 +70193902 +70193903 +70193904 +70193999 +70194001 +70194099 +70195101 +70195199 +70195201 +70195299 +70195901 +70195999 +70199001 +70199002 +70199005 +70199006 +70199007 +70199008 +70199003 +70199004 +70199099 +70200004 +70200001 +70200002 +70200003 +70200005 +70200099 +71011001 +71011099 +71012101 +71012201 +71012299 +71021001 +71022101 +71022999 +71023101 +71023999 +71031001 +71039101 +71039999 +71041001 +71042001 +71049099 +71051001 +71059099 +71061001 +71069101 +71069201 +71070001 +71081101 +71081201 +71081301 +71082001 +71082099 +71090001 +71101101 +71101999 +71102101 +71102999 +71103101 +71103999 +71104101 +71104999 +71110001 +71123001 +71129101 +71129199 +71129201 +71129999 +71131101 +71131102 +71131199 +71131903 +71131901 +71131902 +71131999 +71132001 +71141101 +71141999 +71142001 +71151001 +71159001 +71159099 +71161001 +71162001 +71171101 +71171901 +71171999 +71179001 +71179099 +71181001 +71189099 +72011001 +72012001 +72015001 +72015099 +72021101 +72021999 +72021999 +72022101 +72022199 +72022999 +72023001 +72024101 +72024999 +72025001 +72026001 +72027001 +72028001 +72029101 +72029102 +72029103 +72029201 +72029299 +72029301 +72029901 +72029902 +72029903 +72029999 +72031001 +72039099 +72041001 +72042101 +72042999 +72043001 +72044101 +72044999 +72045001 +72051001 +72052101 +72052999 +72061001 +72069099 +72071101 +72071201 +72071299 +72071999 +72072001 +72072099 +72081001 +72081002 +72081004 +72081099 +72082501 +72082599 +72082601 +72082601 +72082701 +72082701 +72083601 +72083601 +72083601 +72083701 +72083701 +72083701 +72083801 +72083801 +72083901 +72083901 +72084001 +72084099 +72085101 +72085102 +72085103 +72085101 +72085102 +72085103 +72085101 +72085102 +72085103 +72085201 +72085301 +72085401 +72089099 +72091501 +72091502 +72091503 +72091599 +72091601 +72091601 +72091701 +72091701 +72091802 +72091899 +72092501 +72092601 +72092701 +72092801 +72099099 +72101101 +72101201 +72101202 +72101203 +72101299 +72102001 +72103001 +72103099 +72104101 +72104199 +72104903 +72104903 +72104999 +72105001 +72105002 +72105099 +72106101 +72106901 +72106999 +72107003 +72107004 +72107005 +72107091 +72107099 +72109001 +72109091 +72109099 +72111301 +72111401 +72111402 +72111404 +72111499 +72111901 +72111902 +72111903 +72111904 +72111999 +72112301 +72112302 +72112399 +72112901 +72112902 +72112903 +72112999 +72119099 +72121001 +72121002 +72121099 +72122001 +72122002 +72122099 +72123001 +72123002 +72123099 +72124001 +72124002 +72124003 +72124099 +72125001 +72126001 +72126002 +72126003 +72126099 +72131001 +72132001 +72139101 +72139102 +72139901 +72139902 +72139999 +72141001 +72142001 +72142099 +72143001 +72149101 +72149102 +72149101 +72149199 +72149901 +72149901 +72149902 +72149999 +72149901 +72149902 +72149999 +72151001 +72155001 +72155099 +72159001 +72159099 +72161001 +72161001 +72162101 +72162101 +72162201 +72163101 +72163102 +72163199 +72163204 +72163201 +72163202 +72163299 +72163301 +72163301 +72163301 +72163301 +72163301 +72163302 +72163302 +72163302 +72163302 +72163302 +72164001 +72164001 +72164001 +72164001 +72165001 +72165099 +72166101 +72166102 +72166199 +72166901 +72166902 +72166999 +72169101 +72169999 +72171001 +72171099 +72171099 +72171099 +72171099 +72171099 +72171099 +72171099 +72171099 +72172001 +72172099 +72173001 +72173099 +72179099 +72179099 +72181001 +72189101 +72189999 +72191101 +72191201 +72191299 +72191301 +72191401 +72192101 +72192201 +72192301 +72192401 +72193102 +72193199 +72193201 +72193299 +72193301 +72193401 +72193501 +72193599 +72199099 +72201101 +72201201 +72202001 +72202002 +72202099 +72209099 +72210002 +72210099 +72221101 +72221199 +72221999 +72222001 +72223001 +72223099 +72224002 +72224099 +72230001 +72230099 +72241001 +72241002 +72241003 +72241004 +72241005 +72241091 +72241099 +72249002 +72249001 +72249003 +72249099 +72251101 +72251999 +72253002 +72253003 +72253004 +72253005 +72253006 +72253008 +72253002 +72253003 +72253004 +72253005 +72253099 +72253091 +72253099 +72254001 +72254002 +72254003 +72254004 +72254005 +72254099 +72254007 +72254099 +72254091 +72254099 +72254005 +72255002 +72255003 +72255004 +72255008 +72255009 +72255010 +72255011 +72255006 +72255012 +72255002 +72255003 +72255004 +72255008 +72255009 +72255010 +72255011 +72255099 +72255099 +72255091 +72255099 +72259101 +72259201 +72259201 +72259999 +72259999 +72259999 +72259999 +72261101 +72261999 +72262001 +72269103 +72269104 +72269105 +72269108 +72269109 +72269110 +72269111 +72269112 +72269191 +72269199 +72269201 +72269202 +72269203 +72269204 +72269205 +72269207 +72269299 +72269901 +72269902 +72269999 +72271001 +72272002 +72272099 +72279001 +72279002 +72279003 +72279099 +72279099 +72281001 +72281099 +72282001 +72282099 +72283001 +72283003 +72283099 +72284001 +72284099 +72285001 +72285099 +72286001 +72286003 +72286099 +72287002 +72287099 +72288001 +72292001 +72299001 +72299002 +72299003 +72299004 +72299099 +73011001 +73012001 +73021001 +73021003 +73021099 +73023001 +73024001 +73024099 +73029001 +73029002 +73029099 +73030001 +73030099 +73041101 +73041102 +73041103 +73041104 +73041105 +73041199 +73041901 +73041901 +73041901 +73041901 +73041902 +73041902 +73041903 +73041903 +73041904 +73041904 +73041904 +73041905 +73041999 +73041991 +73041999 +73042201 +73042202 +73042203 +73042299 +73042301 +73042302 +73042303 +73042399 +73042401 +73042402 +73042403 +73042404 +73042405 +73042406 +73042499 +73042901 +73042902 +73042903 +73042904 +73042905 +73042906 +73042999 +73042999 +73043101 +73043101 +73043110 +73043110 +73043102 +73043103 +73043104 +73043105 +73043106 +73043107 +73043108 +73043109 +73043199 +73043191 +73043199 +73043901 +73043901 +73043902 +73043902 +73043903 +73043904 +73043908 +73043909 +73043910 +73043911 +73043912 +73043913 +73043914 +73043915 +73043916 +73043991 +73043992 +73043999 +73043999 +73043999 +73043999 +73043999 +73044101 +73044102 +73044199 +73044901 +73044999 +73045101 +73045102 +73045103 +73045104 +73045105 +73045106 +73045107 +73045108 +73045109 +73045110 +73045111 +73045191 +73045199 +73045909 +73045901 +73045902 +73045903 +73045904 +73045905 +73045910 +73045911 +73045912 +73045913 +73045914 +73045915 +73045916 +73045917 +73045991 +73045992 +73045999 +73049099 +73051101 +73051101 +73051199 +73051201 +73051201 +73051299 +73051901 +73051999 +73052001 +73052099 +73053101 +73053102 +73053103 +73053104 +73053105 +73053106 +73053191 +73053199 +73053901 +73053902 +73053903 +73053904 +73053905 +73053999 +73059001 +73059099 +73061101 +73061901 +73061999 +73061999 +73062101 +73062999 +73063002 +73063003 +73063004 +73063005 +73063006 +73063099 +73063099 +73063099 +73063099 +73063091 +73063099 +73064001 +73064099 +73065001 +73065003 +73065004 +73065099 +73066102 +73066103 +73066102 +73066103 +73066199 +73066199 +73066901 +73066902 +73066999 +73069099 +73071101 +73071199 +73071902 +73071903 +73071904 +73071901 +73071905 +73071906 +73071999 +73072101 +73072201 +73072299 +73072301 +73072399 +73072999 +73079101 +73079201 +73079299 +73079301 +73079301 +73079902 +73079903 +73079904 +73079901 +73079905 +73079999 +73081001 +73082001 +73082099 +73083001 +73083099 +73084001 +73089001 +73089002 +73089099 +73089099 +73090001 +73090002 +73090003 +73090099 +73101001 +73101002 +73101003 +73101004 +73101099 +73102101 +73102901 +73102905 +73102902 +73102903 +73102904 +73102999 +73110001 +73110002 +73110003 +73110004 +73110099 +73121001 +73121005 +73121005 +73121005 +73121007 +73121008 +73121008 +73121003 +73121004 +73121009 +73121010 +73121099 +73121099 +73121099 +73121002 +73121006 +73121099 +73129099 +73130001 +73141201 +73141401 +73141903 +73141903 +73141903 +73141902 +73141902 +73141901 +73141999 +73142001 +73143101 +73141903 +73143101 +73143101 +73143999 +73144101 +73144101 +73144101 +73144201 +73144999 +73144999 +73145001 +73151102 +73151101 +73151102 +73151103 +73151104 +73151102 +73151105 +73151102 +73151199 +73151201 +73151202 +73151299 +73151901 +73151902 +73151903 +73151999 +73152001 +73158102 +73158101 +73158199 +73158201 +73158202 +73158299 +73158902 +73158901 +73158999 +73159001 +73160001 +73170001 +73170002 +73170003 +73170004 +73170099 +73170099 +73170099 +73170099 +73170099 +73170099 +73170099 +73170099 +73181101 +73181201 +73181301 +73181401 +73181504 +73181501 +73181502 +73181503 +73181505 +73181506 +73181507 +73181508 +73181509 +73181510 +73181599 +73181601 +73181602 +73181603 +73181604 +73181605 +73181901 +73181902 +73181901 +73181999 +73182101 +73182199 +73182201 +73182299 +73182301 +73182399 +73182402 +73182401 +73182402 +73182499 +73182901 +73182999 +73194001 +73199001 +73199099 +73201001 +73201099 +73202001 +73202003 +73202004 +73202002 +73202099 +73209003 +73209001 +73209002 +73209099 +73211101 +73211102 +73211199 +73211201 +73211901 +73218101 +73218199 +73218201 +73218299 +73218901 +73219001 +73219002 +73219003 +73219004 +73219005 +73219006 +73219007 +73219099 +73221101 +73221199 +73221901 +73221999 +73229001 +73229099 +73231001 +73239101 +73239102 +73239199 +73239202 +73239201 +73239203 +73239299 +73239301 +73239302 +73239303 +73239304 +73239399 +73239401 +73239403 +73239402 +73239404 +73239499 +73239999 +73241001 +73242101 +73242999 +73249003 +73249001 +73249002 +73249099 +73251002 +73251001 +73251003 +73251004 +73251099 +73259101 +73259102 +73259199 +73259903 +73259902 +73259903 +73259905 +73259901 +73259903 +73259904 +73259906 +73259999 +73261101 +73261102 +73261199 +73261901 +73261902 +73261903 +73261905 +73261907 +73261909 +73261910 +73261911 +73261912 +73261914 +73261904 +73261906 +73261908 +73261913 +73261999 +73262001 +73262002 +73262003 +73262004 +73262005 +73262099 +73269002 +73269005 +73269006 +73269009 +73269010 +73269012 +73269013 +73269014 +73269015 +73269017 +73269018 +73269001 +73269003 +73269004 +73269007 +73269008 +73269011 +73269016 +73269099 +74010001 +74010002 +74020001 +74031101 +74031201 +74031301 +74031999 +74032101 +74032201 +74032901 +74032999 +74040001 +74040002 +74040099 +74050001 +74061001 +74062001 +74071001 +74071002 +74071099 +74072102 +74072101 +74072199 +74072901 +74072904 +74072905 +74072902 +74072903 +74072999 +74081101 +74081199 +74081901 +74081902 +74081999 +74082101 +74082201 +74082299 +74082999 +74091101 +74091999 +74092101 +74092999 +74093101 +74093999 +74094001 +74099001 +74101101 +74101201 +74102101 +74102102 +74102103 +74102199 +74102201 +74111001 +74111002 +74111003 +74111004 +74111099 +74112101 +74112105 +74112102 +74112103 +74112104 +74112199 +74112201 +74112202 +74112203 +74112204 +74112299 +74112901 +74112902 +74112903 +74112904 +74112999 +74121001 +74122001 +74130001 +74130099 +74151001 +74151099 +74152101 +74152999 +74152901 +74153301 +74153302 +74153399 +74153999 +74153901 +74181001 +74182001 +74191001 +74199101 +74199102 +74199103 +74199104 +74199105 +74199106 +74199199 +74199901 +74199902 +74199905 +74199906 +74199908 +74199913 +74199915 +74199999 +74199903 +74199904 +74199907 +74199909 +74199910 +74199911 +74199912 +74199914 +75011001 +75012001 +75021001 +75022001 +75030001 +75040001 +75051101 +75051201 +75052101 +75052201 +75061001 +75061099 +75062001 +75062099 +75071101 +75071201 +75072001 +75081001 +75089001 +75089099 +75089002 +75089003 +76011001 +76011099 +76012001 +76012099 +76020001 +76020099 +76031001 +76032001 +76041001 +76041002 +76041099 +76042101 +76042901 +76042902 +76042999 +76051101 +76051199 +76051999 +76052101 +76052102 +76052199 +76052901 +76052902 +76052999 +76061101 +76061199 +76061201 +76061202 +76061203 +76061299 +76069101 +76069199 +76069201 +76069299 +76071101 +76071901 +76071902 +76071903 +76071999 +76072001 +76072099 +76081003 +76081001 +76081002 +76081099 +76082001 +76082002 +76082003 +76082099 +76090001 +76090099 +76101001 +76109001 +76109099 +76110001 +76121001 +76129001 +76129099 +76130001 +76141001 +76141001 +76141001 +76149099 +76149099 +76151001 +76151099 +76151099 +76152001 +76161001 +76161002 +76161003 +76161099 +76169101 +76169901 +76169902 +76169903 +76169904 +76169905 +76169906 +76169907 +76169908 +76169909 +76169910 +76169911 +76169912 +76169913 +76169914 +76169915 +76169991 +76169992 +76169999 +78011001 +78019101 +78019999 +78020001 +78041101 +78041999 +78042001 +78060001 +78060099 +78060002 +79011101 +79011201 +79012001 +79020001 +79031001 +79039099 +79040001 +79050001 +79070001 +79070099 +80011001 +80012001 +80020001 +80030001 +80070001 +80070002 +80070003 +80070099 +81011001 +81019401 +81019602 +81019699 +81019601 +81019701 +81019901 +81019999 +81021001 +81029401 +81029501 +81029599 +81029601 +81029701 +81029999 +81032001 +81033001 +81039099 +81041101 +81041999 +81042001 +81043001 +81049001 +81049002 +81049099 +81052001 +81053001 +81059099 +81060001 +81072001 +81073001 +81079099 +81082001 +81083001 +81089001 +81089099 +81092001 +81093001 +81099099 +81101001 +81102001 +81109099 +81110001 +81110099 +81121201 +81121301 +81121999 +81122101 +81122201 +81122999 +81125101 +81125201 +81125999 +81129201 +81129999 +81130001 +81130099 +82011001 +82011099 +82013001 +82013099 +82014001 +82015001 +82016001 +82016002 +82019002 +82019003 +82019004 +82019001 +82019099 +82021001 +82021004 +82021002 +82021003 +82021099 +82022001 +82023101 +82023199 +82023901 +82023902 +82023903 +82023904 +82023905 +82023906 +82023907 +82023999 +82024001 +82024099 +82029101 +82029102 +82029103 +82029199 +82029901 +82029999 +82031002 +82031001 +82031099 +82032001 +82032099 +82033001 +82034001 +82034003 +82034002 +82034099 +82041101 +82041102 +82041199 +82041201 +82041202 +82041299 +82042001 +82042099 +82051001 +82051002 +82051003 +82051099 +82052001 +82053001 +82053099 +82054001 +82054099 +82055102 +82055101 +82055103 +82055199 +82055905 +82055908 +82055909 +82055910 +82055913 +82055914 +82055915 +82055916 +82055901 +82055902 +82055903 +82055907 +82055911 +82055912 +82055917 +82055918 +82055919 +82055904 +82055906 +82055999 +82056001 +82056099 +82057003 +82057001 +82057002 +82057099 +82059002 +82059003 +82059004 +82060001 +82071302 +82071305 +82071306 +82071301 +82071303 +82071304 +82071307 +82071399 +82071902 +82071903 +82071904 +82071905 +82071906 +82071907 +82071908 +82071901 +82071909 +82071999 +82072001 +82073001 +82073002 +82074002 +82074001 +82074003 +82074099 +82075001 +82075002 +82075003 +82075005 +82075006 +82075004 +82075099 +82076002 +82076003 +82076004 +82076005 +82076001 +82076099 +82077001 +82077002 +82077099 +82078001 +82079001 +82079099 +82081001 +82081099 +82082001 +82082099 +82083001 +82083099 +82084001 +82084002 +82084099 +82089099 +82090001 +82100001 +82111001 +82119101 +82119201 +82119299 +82119301 +82119401 +82119501 +82121001 +82121099 +82122001 +82129001 +82129099 +82130001 +82141001 +82141099 +82142001 +82142099 +82149001 +82149002 +82149003 +82149004 +82149099 +82151001 +82152001 +82159101 +82159901 +82159999 +83011001 +83012001 +83012099 +83013001 +83014001 +83015001 +83015099 +83016001 +83016099 +83017001 +83017099 +83021001 +83021002 +83021099 +83022001 +83022099 +83023001 +83024101 +83024102 +83024104 +83024105 +83024199 +83024103 +83024201 +83024202 +83024299 +83024299 +83024999 +83025001 +83026001 +83030001 +83040001 +83040002 +83040099 +83051001 +83052001 +83059001 +83059002 +83059099 +83061001 +83062101 +83062999 +83063001 +83071001 +83071099 +83079001 +83081001 +83081099 +83082001 +83089001 +83091001 +83099001 +83099003 +83099006 +83099007 +83099008 +83099002 +83099004 +83099099 +83099005 +83100001 +83100099 +83111002 +83111003 +83111004 +83111001 +83111099 +83112001 +83112002 +83112003 +83112004 +83112099 +83113001 +83113002 +83113003 +83113099 +83113004 +83119001 +83119002 +83119003 +83119004 +83119005 +83119099 +84011001 +84012001 +84013001 +84014001 +84021101 +84021201 +84021901 +84021999 +84022001 +84029001 +84031001 +84039001 +84041001 +84042001 +84049001 +84051001 +84051002 +84051099 +84059001 +84061001 +84061099 +84068101 +84068201 +84068299 +84069001 +84069002 +84069099 +84069003 +84071001 +84072101 +84072199 +84072901 +84072999 +84073101 +84073199 +84073202 +84073201 +84073203 +84073299 +84073301 +84073302 +84073303 +84073399 +84073402 +84073499 +84073401 +84079001 +84079099 +84081001 +84081099 +84082001 +84089001 +84089099 +84091001 +84099105 +84099111 +84099101 +84099102 +84099103 +84099104 +84099106 +84099107 +84099108 +84099110 +84099112 +84099114 +84099115 +84099116 +84099117 +84099118 +84099119 +84099199 +84099199 +84099109 +84099113 +84099901 +84099902 +84099903 +84099906 +84099904 +84099905 +84099908 +84099909 +84099910 +84099911 +84099912 +84099913 +84099914 +84099999 +84101101 +84101201 +84101299 +84101301 +84101399 +84109001 +84111101 +84111201 +84112101 +84112201 +84118101 +84118201 +84119101 +84119999 +84121001 +84122101 +84122999 +84123101 +84123199 +84123999 +84123901 +84128001 +84128099 +84129001 +84131101 +84131199 +84131901 +84131903 +84131902 +84131999 +84131904 +84132001 +84133003 +84133001 +84133002 +84133004 +84133005 +84133006 +84133099 +84134001 +84134099 +84135002 +84135001 +84135099 +84136001 +84136004 +84136006 +84136002 +84136003 +84136005 +84136099 +84137001 +84137002 +84137005 +84137007 +84137003 +84137004 +84137006 +84137099 +84138101 +84138102 +84138103 +84138199 +84138201 +84139101 +84139102 +84139104 +84139105 +84139106 +84139109 +84139111 +84139112 +84139199 +84139103 +84139107 +84139108 +84139110 +84139201 +84141001 +84141002 +84141003 +84141099 +84141004 +84141005 +84142001 +84143001 +84143009 +84143002 +84143003 +84143004 +84143005 +84143006 +84143007 +84143008 +84143010 +84143099 +84144001 +84144002 +84144099 +84145101 +84145102 +84145199 +84145901 +84145999 +84146001 +84146099 +84148006 +84148007 +84148008 +84148010 +84148001 +84148002 +84148016 +84148003 +84148004 +84148011 +84148012 +84148013 +84148014 +84148015 +84148099 +84148005 +84148009 +84149001 +84149002 +84149003 +84149004 +84149006 +84149099 +84149005 +84149007 +84149008 +84149009 +84151001 +84151001 +84151001 +84152001 +84158101 +84158201 +84158299 +84158301 +84159001 +84159099 +84161001 +84161099 +84162001 +84162099 +84163001 +84163099 +84169001 +84169099 +84171003 +84171001 +84171002 +84171004 +84171099 +84171005 +84172001 +84172099 +84178001 +84178002 +84178003 +84178004 +84178005 +84178099 +84179001 +84181001 +84181099 +84182101 +84182901 +84182999 +84183001 +84183002 +84183004 +84183003 +84183099 +84184001 +84184002 +84184004 +84184003 +84184099 +84185001 +84185003 +84185002 +84185099 +84186101 +84186199 +84186102 +84186901 +84186902 +84186903 +84186904 +84186905 +84186906 +84186907 +84186908 +84186909 +84186910 +84186912 +84186913 +84186914 +84186916 +84186917 +84186915 +84186911 +85161001 +84186999 +84189101 +84189903 +84189904 +84189999 +84189901 +84189902 +84191101 +84191901 +84191902 +84191999 +84191903 +84192001 +84192099 +84193101 +84193102 +84193103 +84193104 +84193105 +84193199 +84193201 +84193299 +84193901 +84193904 +84193999 +84193902 +84193903 +84193905 +84194004 +84194001 +84194002 +84194003 +84194099 +84195003 +84195001 +84195002 +84195004 +84195005 +84195099 +84196001 +84198101 +84198103 +84198102 +84198199 +84198902 +84198903 +84198909 +84198910 +84198911 +84198915 +84198917 +84198918 +84198919 +84198901 +84198905 +84198907 +84198908 +84198912 +84198913 +84198914 +84198916 +84198904 +84198906 +84198920 +84198921 +84198999 +84199001 +84199003 +84199099 +84199002 +84201001 +84209101 +84209199 +84209999 +84211101 +84211199 +84211201 +84211299 +84211901 +84211903 +84211902 +84211904 +84211999 +84212101 +84212102 +84212104 +84212103 +84212199 +84212201 +84212301 +84212901 +84212902 +84212903 +84212906 +84212908 +84212904 +84212905 +84212999 +84212907 +84213101 +84213102 +84213199 +84213902 +84213903 +84213905 +84213906 +84213907 +84213908 +84213901 +84213904 +84213999 +84219101 +84219199 +84219102 +84219103 +84219901 +84219999 +84219902 +84219903 +84221101 +84221999 +84222001 +84222002 +84222003 +84222099 +84223008 +84223001 +84223002 +84223003 +84223004 +84223006 +84223007 +84223009 +84223010 +84223099 +84223005 +84224002 +84224001 +84224003 +84224004 +84224099 +84224005 +84224006 +84229001 +84229002 +84229003 +84229004 +84229099 +84231001 +84231099 +84232001 +84232099 +84233001 +84233099 +84238101 +84238102 +84238201 +84238202 +84238999 +84239001 +84239099 +84241002 +84241099 +84241001 +84242001 +84242002 +84242099 +84242003 +84243004 +84243001 +84243002 +84243099 +84243003 +84248102 +84248199 +84248104 +84248199 +84248101 +84248102 +84248103 +84248104 +84248105 +84248106 +84248199 +84248902 +84248999 +84248901 +84249001 +84251101 +84251199 +84251999 +84253101 +84253102 +84253199 +84253901 +84253902 +84253903 +84253999 +84254101 +84254201 +84254202 +84254299 +84254999 +84261101 +84261201 +84261999 +84262001 +84263001 +84264101 +84264102 +84264103 +84264104 +84264199 +84264901 +84264902 +84264999 +84269103 +84269101 +84269102 +84269199 +84269903 +84269904 +84269901 +84269902 +84269999 +84271001 +84271002 +84271099 +84272001 +84272002 +84272003 +84272004 +84272005 +84272099 +84279001 +84279099 +84281001 +84282002 +84282003 +84282099 +84282001 +84283101 +84283299 +84283399 +84283901 +84283902 +84283999 +84289005 +84284001 +84284099 +84286001 +84289001 +84289002 +84289003 +84289006 +84289004 +84289099 +84291101 +84291999 +84292001 +84293001 +84294001 +84294099 +84295103 +84295101 +84295102 +84295199 +84295201 +84295202 +84295299 +84295901 +84295902 +84295905 +84295903 +84295904 +84295999 +84301001 +84302001 +84303101 +84303102 +84303199 +84303901 +84303999 +84304101 +84304102 +84304199 +84304999 +84304901 +84304902 +84305001 +84305002 +84305099 +84306101 +84306102 +84306199 +84306901 +84306902 +84306903 +84306904 +84306999 +84311001 +84312001 +84312099 +84313101 +84313199 +84313999 +84314101 +84314102 +84314103 +84314199 +84314201 +84314302 +84314399 +84314301 +84314902 +84314903 +84314999 +84314901 +84321001 +84322101 +84322901 +84322999 +84323001 +84323002 +84323003 +84323099 +84323002 +84323003 +84323099 +84324001 +84324001 +84328002 +84328003 +84328099 +84328001 +84329001 +84331101 +84331999 +84332001 +84332002 +84332099 +84333001 +84334001 +84334099 +84334002 +84335101 +84335201 +84335301 +84335901 +84335902 +84335903 +84335904 +84335999 +84336003 +84336099 +84336001 +84336002 +84339001 +84339003 +84339099 +84339002 +84341001 +84342001 +84349001 +84351001 +84359001 +84361001 +84362101 +84362901 +84362999 +84368001 +84368003 +84368099 +84368002 +84369101 +84369999 +84371003 +84371099 +84371001 +84371002 +84378001 +84378099 +84378002 +84379001 +84379099 +84381001 +84381003 +84381004 +84381002 +84381005 +84381006 +84381007 +84381099 +84382001 +84382099 +84382002 +84383001 +84383099 +84384001 +84384099 +84385006 +84385001 +84385002 +84385003 +84385005 +84385007 +84385099 +84385004 +84385008 +84386004 +84386001 +84386002 +84386003 +84386005 +84386099 +84388001 +84388002 +84388099 +84388003 +84389001 +84389002 +84389005 +84389099 +84389003 +84389004 +84391001 +84391002 +84391003 +84391004 +84391005 +84391099 +84392001 +84393001 +84399101 +84399999 +84401001 +84401099 +84409001 +84411001 +84411002 +84411003 +84411099 +84412001 +84413001 +84414001 +84414099 +84418001 +84419001 +84423001 +84423002 +84423099 +84424001 +84425001 +84425003 +84425099 +84425002 +84431101 +84431199 +84431201 +84431301 +84431399 +84431302 +84431401 +84431499 +84431501 +84431599 +84431601 +84431701 +84431901 +84431903 +84431999 +84431902 +84433101 +84433202 +84433203 +84433201 +84433204 +84433205 +84433208 +84433207 +84433299 +84433206 +84433902 +84433905 +84433906 +84433901 +84433908 +84433904 +84433999 +84433903 +84433907 +84439102 +84439101 +84439199 +84439905 +84439906 +84439910 +84439901 +84439903 +84439909 +84439999 +84439902 +84439904 +84439907 +84439908 +84440001 +84451101 +84451201 +84451301 +84451901 +84451999 +84452001 +84453001 +84453099 +84454001 +84459001 +84459099 +84461001 +84462101 +84462999 +84463001 +84471101 +84471201 +84472001 +84472099 +84479001 +84479099 +84481101 +84481999 +84482001 +84483101 +84483201 +84483301 +84483999 +84484201 +84484999 +84484901 +84485101 +84485999 +84490001 +84501101 +84501199 +84501201 +84501299 +84501999 +84501901 +84502001 +84509002 +84509099 +84509001 +84511001 +84512101 +84512199 +84512901 +84512999 +84512902 +84512903 +84513001 +84514001 +84515001 +84518001 +84518099 +84519001 +84519099 +84519002 +84521001 +84522101 +84522102 +84522104 +84522105 +84522199 +84522103 +84522901 +84522902 +84522904 +84522905 +84522906 +84522907 +84522999 +84522903 +84523001 +84529001 +84529002 +84529099 +84531001 +84532001 +84538001 +84539001 +84541001 +84542001 +84542099 +84543001 +84543099 +84549001 +84549099 +84551001 +84552101 +84552199 +84552102 +84552201 +84552202 +84552299 +84553001 +84553002 +84553099 +84559001 +84559099 +84561001 +84561099 +84561001 +84561099 +84562001 +84562099 +84563001 +84569099 +84569099 +84569099 +84571001 +84572001 +84573002 +84573003 +84573001 +84573004 +84573099 +84581101 +84581102 +84581199 +84581901 +84581999 +84581902 +84589101 +84589199 +84589999 +84589901 +84591001 +84591099 +84592101 +84592199 +84592901 +84592999 +84593101 +84593999 +84594001 +84594099 +84594001 +84594099 +84595101 +84595999 +84596101 +84596999 +84597001 +84597002 +84597099 +84601101 +84609001 +84601199 +84609001 +84601999 +84601901 +84609099 +84602199 +84609001 +84602102 +84602103 +84602104 +84602199 +84602101 +84602199 +84609001 +84602999 +84602901 +84602902 +84602903 +84602904 +84609099 +84603101 +84603199 +84603999 +84603901 +84604002 +84604099 +84604001 +84609001 +84609002 +84609003 +84609099 +84612001 +84612099 +84613001 +84613099 +84614001 +84615002 +84615003 +84615001 +84615099 +84619003 +84619002 +84619099 +84619004 +84619005 +84621001 +84621099 +84622101 +84622106 +84622107 +84622102 +84622103 +84622104 +84622105 +84622199 +84622901 +84622903 +84622905 +84622906 +84622907 +84622902 +84622904 +84622999 +84623101 +84623103 +84623102 +84623199 +84623901 +84623903 +84623902 +84623999 +84624101 +84624102 +84624103 +84624199 +84624901 +84624902 +84624903 +84624999 +84629101 +84629102 +84629103 +84629199 +84629904 +84629901 +84629999 +84629902 +84629903 +84631001 +84632001 +84633001 +84633003 +84633099 +84633002 +84639099 +84639001 +84641001 +84642001 +84649001 +84649099 +84651001 +84659199 +84659299 +84659399 +84659499 +84659599 +84659601 +84659999 +84659101 +84659199 +84659201 +84659202 +84659299 +84659203 +84659301 +84659399 +84659401 +84659402 +84659499 +84659501 +84659599 +84659601 +84659902 +84659999 +84659901 +84659903 +84661003 +84661001 +84661002 +84661099 +84662001 +84662099 +84663002 +84663099 +84663001 +84669101 +84669201 +84669303 +84669304 +84669301 +84669302 +84669399 +84669401 +84669499 +84669402 +84671101 +84671199 +84671999 +84671901 +84672101 +84672102 +84672103 +84672199 +84672202 +84672203 +84672299 +84672201 +84672901 +84672902 +84672903 +84672999 +84678101 +84678902 +84678903 +84678901 +84678999 +84679101 +84679199 +84679201 +84679901 +84679902 +84679999 +84681001 +84682001 +84682099 +84688099 +84689001 +84701001 +84701002 +84701099 +84702101 +84702999 +84702901 +84703001 +84705001 +84709003 +84709002 +84709099 +84709001 +84713001 +84713001 +84714101 +84714901 +84715001 +84716001 +84716002 +84716003 +84716099 +84717001 +84718001 +84718002 +84718003 +84718099 +84719099 +84721001 +84721099 +84723001 +84723002 +84723099 +84729001 +84729005 +84729010 +84729012 +84729013 +84729014 +84690001 +84729002 +84729009 +84690002 +84690003 +84690004 +84690099 +84729099 +84729003 +84729004 +84729006 +84729007 +84729008 +84729011 +84729015 +84732101 +84732999 +84733002 +84733003 +84733001 +84734002 +84731001 +84731099 +84731099 +84734001 +84734099 +84735099 +84735001 +84735099 +84735002 +84741001 +84741002 +84741099 +84742004 +84742007 +84742008 +84742001 +84742002 +84742005 +84742006 +84742099 +84742003 +84743101 +84743201 +84743901 +84743902 +84743999 +84748001 +84748004 +84748002 +84748005 +84748008 +84748010 +84748003 +84748006 +84748007 +84748009 +84748099 +84749001 +84749002 +84749099 +84751001 +84752101 +84752901 +84752999 +84759001 +84762101 +84762999 +84768101 +84768999 +84769001 +84769099 +84771001 +84771099 +84772001 +84772002 +84772099 +84773001 +84774001 +84775101 +84775999 +84778006 +84778001 +84778003 +84778004 +84778005 +84778007 +84778002 +84778099 +84779001 +84779002 +84779003 +84779099 +84781001 +84781002 +84781003 +84781004 +84781005 +84781099 +84789001 +84791001 +84791003 +84791004 +84791007 +84791005 +84791006 +84791008 +84791099 +84791002 +84792001 +84793001 +84793002 +84793099 +84794001 +84794099 +84795001 +84796001 +84797101 +84797999 +84798102 +84798103 +84798104 +84798107 +84798101 +84798105 +84798108 +84798109 +84798106 +84798199 +84798201 +84798202 +84798204 +84798205 +84798203 +84798299 +84798903 +84798904 +84798906 +84798907 +84798908 +84798910 +84798912 +84798913 +84798914 +84798919 +84798920 +84798921 +84798922 +84798926 +84798927 +84798901 +84798902 +84798905 +84798915 +84798916 +84798917 +84798923 +84798925 +84798909 +84798911 +84798918 +84798924 +84798999 +84799001 +84799006 +84799009 +84799010 +84799013 +84799014 +84799002 +84799004 +84799005 +84799007 +84799008 +84799011 +84799012 +84799015 +84799016 +84799017 +84799099 +84801001 +84802001 +84803001 +84803002 +84803099 +84804101 +84804199 +84804901 +84804999 +84805001 +84805002 +84805099 +84806001 +84806099 +84807101 +84807102 +84807199 +84807902 +84807904 +84807901 +84807903 +84807999 +84811001 +84811002 +84811099 +84812007 +84812010 +84812012 +84812001 +84812002 +84812003 +84812004 +84812006 +84812009 +84812011 +84812005 +84812008 +84812099 +84813001 +84813002 +84813003 +84813099 +84814004 +84814002 +84814003 +84814001 +84814099 +84818001 +84818002 +84818003 +84818004 +84818005 +84818006 +84818007 +84818008 +84818009 +84818010 +84818011 +84818012 +84818013 +84818014 +84818015 +84818016 +84818017 +84818018 +84818019 +84818020 +84818021 +84818022 +84818023 +84818024 +84818025 +84818099 +84819001 +84819003 +84819004 +84819002 +84819099 +84821002 +84821001 +84821003 +84821099 +84822001 +84822003 +84822002 +84822099 +84823001 +84824001 +84825001 +84828001 +84829101 +84829199 +84829901 +84829902 +84829903 +84829999 +84831001 +84831002 +84831003 +84831004 +84831005 +84831006 +84831007 +84831099 +84832001 +84833001 +84833002 +84833003 +84833099 +84834001 +84834002 +84834003 +84834005 +84834006 +84834007 +84834008 +84834004 +84834099 +84835001 +84835002 +84835099 +84836001 +84836002 +84836099 +84839001 +84839002 +84839099 +84841001 +84842001 +84849001 +84849002 +84849099 +84861001 +84862002 +84862099 +84863001 +84864001 +84869001 +84869002 +84869003 +84869004 +84871001 +84871099 +84879001 +84879002 +84879003 +84879004 +84879005 +84879006 +84879007 +84879099 +85011001 +85011002 +85011003 +85011004 +85011005 +85011008 +85011009 +85011006 +85011007 +85011099 +85012002 +85012004 +85012001 +85012003 +85012099 +85013101 +85013102 +85013103 +85013104 +85013105 +85013199 +85013201 +85013202 +85013203 +85013204 +85013205 +85013206 +85013299 +85013301 +85013302 +85013303 +85013304 +85013305 +85013399 +85013401 +85013405 +85013402 +85013403 +85013404 +85013499 +85014005 +85014008 +85014001 +85014007 +85014002 +85014003 +85014004 +85014006 +85014099 +85015102 +85015103 +85015101 +85015199 +85015204 +85015202 +85015205 +85015201 +85015203 +85015299 +85015304 +85015305 +85015302 +85015306 +85015307 +85015301 +85015303 +85015399 +85016101 +85016201 +85016301 +85016401 +85016403 +85016402 +85016499 +85021101 +85021201 +85021301 +85021302 +85021399 +85022001 +85022002 +85022099 +85023101 +85023199 +85023901 +85023902 +85023903 +85023904 +85023999 +85024001 +85030005 +85030001 +85030002 +85030003 +85030004 +85030006 +85030099 +85041001 +85041099 +85042101 +85042102 +85042103 +85042104 +85042199 +85042201 +85042301 +85043103 +85043104 +85043101 +85043102 +85043105 +85043106 +85043199 +85043201 +85043202 +85043299 +85043301 +85043399 +85043401 +85044001 +85044002 +85044005 +85044006 +85044007 +85044008 +85044009 +85044011 +85044013 +85044012 +85044014 +85044015 +85044010 +85044003 +85044004 +85044099 +85045001 +85045002 +85045099 +85049002 +85049007 +85049008 +85049001 +85049005 +85049003 +85049004 +85049006 +85049099 +85051101 +85051999 +85052001 +85059005 +85059001 +85059002 +85059003 +85059004 +85059099 +85061002 +85061099 +85063001 +85064001 +85065001 +85066001 +85068001 +85069001 +85071001 +85071099 +85072001 +85072002 +85072004 +85072003 +85072099 +85073001 +85074001 +85075001 +85076001 +85078001 +85079001 +85081101 +85081901 +85081999 +85086001 +85087001 +85087002 +85087099 +85094002 +85094003 +85094001 +85094099 +85098003 +85098004 +85098007 +85098009 +85098010 +85098012 +85098001 +85098002 +85098005 +85098006 +85098008 +85098011 +85098099 +85099002 +85099099 +85099001 +85099099 +85101001 +85102001 +85103001 +85109001 +85109002 +85109003 +85109004 +85109099 +85111003 +85111002 +85111001 +85111099 +85112003 +85112001 +85112002 +85112099 +85113002 +85113003 +85113001 +85113004 +85113099 +85114001 +85114002 +85114003 +85114099 +85115001 +85115002 +85115003 +85115004 +85115099 +85118001 +85118002 +85118003 +85118004 +85118099 +85119001 +85119003 +85119005 +85119002 +85119004 +85119099 +85121001 +85121002 +85121099 +85122001 +85122002 +85122099 +85123001 +85123099 +85124001 +85129001 +85129002 +85129003 +85129004 +85129005 +85129006 +85129099 +85131001 +85131099 +85139001 +85141001 +85141002 +85141003 +85141004 +85141099 +85142001 +85142002 +85142003 +85142004 +85142005 +85142099 +85143001 +85143002 +85143003 +85143004 +85143005 +85143006 +85143099 +85144001 +85144099 +85149002 +85149003 +85149001 +85149099 +85151101 +85151199 +85151999 +85152101 +85152199 +85152901 +85152999 +85153101 +85153102 +85153199 +85153901 +85153902 +85153999 +85158001 +85158002 +85158099 +85159001 +85159099 +85161099 +85162101 +85162901 +85162999 +85163101 +85163201 +85163301 +85164001 +85165001 +85166001 +85166003 +85166002 +85166099 +85167101 +85167201 +85167901 +85167999 +85168002 +85168003 +85168001 +85168099 +85169007 +85169009 +85169001 +85169002 +85169003 +85169004 +85169005 +85169006 +85169008 +85169010 +85169099 +85171101 +85171201 +85171299 +85171802 +85171801 +85171899 +85176101 +85176201 +85176202 +85176203 +85176204 +85176205 +85176206 +85176209 +85176210 +85176213 +85176214 +85176215 +85176299 +85176207 +85176208 +85176211 +85176212 +85176216 +85176299 +85176905 +85176907 +85176913 +85176914 +85176915 +85176916 +85176917 +85176919 +85176901 +85176903 +85176904 +85176999 +85176902 +85176906 +85176908 +85176909 +85176910 +85176911 +85176912 +85176918 +85176920 +85176999 +85177009 +85177010 +85177011 +85177012 +85177001 +85177002 +85177013 +85177003 +85177004 +85177005 +85177006 +85177007 +85177008 +85177099 +85181001 +85181002 +85181003 +85181099 +85182101 +85182199 +85182199 +85182201 +85182299 +85182299 +85182901 +85182999 +85183003 +85183004 +85183001 +85183002 +85183099 +85184001 +85184002 +85184004 +85184006 +85184003 +85184005 +85184099 +85185001 +85189001 +85189002 +85189003 +85189099 +85192001 +85193001 +85193099 +85195001 +85198103 +85198104 +85198105 +85198106 +85198107 +85198108 +85198109 +85198110 +85198101 +85198102 +85198111 +85198199 +85198901 +85198902 +85198903 +85198904 +85198999 +85211001 +85211099 +85219001 +85219002 +85219003 +85219004 +85219005 +85219099 +85221001 +85229007 +85229001 +85229008 +85229014 +85229002 +85229003 +85229004 +85229005 +85229006 +85229009 +85229010 +85229011 +85229012 +85229013 +85229099 +85232101 +85232199 +85232905 +85232907 +85232908 +85232906 +85232909 +85232901 +85232902 +85232903 +85232910 +85232999 +85234101 +85234199 +85234901 +85234999 +85235101 +85235199 +85235201 +85235202 +85235901 +85235999 +85238099 +85255001 +85255002 +85255004 +85255003 +85255099 +85256005 +85256001 +85256003 +85256004 +85256006 +85256009 +85256010 +85256002 +85256007 +85256099 +85258001 +85258002 +85258003 +85258004 +85258099 +85261001 +85261099 +85269101 +85269199 +85269201 +85269299 +85271201 +85271301 +85271302 +85271901 +85271999 +85272101 +85272199 +85272901 +85272999 +85279101 +85279199 +85279199 +85279201 +85279901 +85279999 +85284101 +85284901 +85284902 +85284903 +85284904 +85284905 +85284908 +85284199 +85284906 +85284908 +85284906 +85284907 +85284901 +85284902 +85284903 +85284904 +85284905 +85284908 +85284909 +85284999 +85285101 +85285199 +85285901 +85285902 +85285903 +85285904 +85285999 +85286101 +85286901 +85286903 +85286902 +85286904 +85286999 +85287101 +85287102 +85287103 +85287104 +85287199 +85287201 +85287202 +85287203 +85287204 +85287205 +85287206 +85287207 +85287299 +85287301 +85291001 +85291002 +85291004 +85291005 +85291006 +85291007 +85291008 +85291003 +85291099 +85299009 +85299013 +85299015 +85299016 +85299018 +85299019 +85299020 +85299021 +85299001 +85299002 +85299003 +85299005 +85299006 +85299007 +85299010 +85299011 +85299023 +85299012 +85299004 +85299008 +85299013 +85299014 +85299017 +85299022 +85299099 +85301001 +85308002 +85308001 +85308099 +85309001 +85311001 +85311002 +85311003 +85311004 +85311005 +85311099 +85312001 +85318001 +85318003 +85318002 +85318099 +85319002 +85319001 +85319099 +85321001 +85321099 +85322101 +85322202 +85322203 +85322201 +85322299 +85322304 +85322305 +85322399 +85322301 +85322302 +85322303 +85322401 +85322402 +85322403 +85322499 +85322502 +85322503 +85322504 +85322501 +85322599 +85322904 +85322999 +85322901 +85322902 +85322903 +85322905 +85323001 +85323002 +85323003 +85323004 +85323099 +85329001 +85331001 +85331002 +85332101 +85332901 +85332999 +85333101 +85333199 +85333901 +85333902 +85333999 +85334001 +85334002 +85334004 +85334005 +85334006 +85334099 +85334003 +85334007 +85339002 +85339099 +85339001 +85340001 +85340002 +85340003 +85340099 +85351001 +85351002 +85351003 +85351099 +85352101 +85352999 +85353001 +85353003 +85353005 +85353006 +85353099 +85353002 +85353004 +85354001 +85354002 +85354099 +85359008 +85359020 +85359001 +85359002 +85359005 +85359010 +85359015 +85359016 +85359099 +85359003 +85359004 +85359006 +85359007 +85359009 +85359011 +85359012 +85359013 +85359014 +85359017 +85359018 +85359019 +85359021 +85359022 +85361003 +85361004 +85361002 +85361005 +85361001 +85361099 +85362001 +85362002 +85362099 +85363005 +85363002 +85363003 +85363099 +85363001 +85363004 +85364103 +85364102 +85364104 +85364108 +85364109 +85364110 +85364111 +85364101 +85364105 +85364106 +85364107 +85364199 +85364901 +85364902 +85364903 +85364905 +85364999 +85364904 +85365007 +85365001 +85365005 +85365008 +85365009 +85365010 +85365011 +85365013 +85365015 +85365016 +85365017 +85365002 +85365003 +85365004 +85365006 +85365012 +85365014 +85365099 +85366101 +85366102 +85366103 +85366199 +85366902 +85366901 +85366999 +85367001 +85369028 +85369001 +85369002 +85369003 +85369005 +85369006 +85369007 +85369010 +85369011 +85369012 +85369013 +85369014 +85369015 +85369016 +85369017 +85369019 +85369021 +85369022 +85369023 +85369024 +85369026 +85369027 +85369004 +85369008 +85369009 +85369018 +85369020 +85369025 +85369099 +85371003 +85371004 +85371005 +85371006 +85371001 +85371002 +85371099 +85372002 +85372001 +85372099 +85381001 +85389001 +85389005 +85389002 +85389004 +85389099 +85389003 +85391001 +85391003 +85391099 +85391002 +85392101 +85392199 +85392201 +85392202 +85392203 +85392204 +85392205 +85392299 +85392908 +85392999 +85392901 +85392902 +85392903 +85392904 +85392905 +85392906 +85392907 +85393101 +85393199 +85393201 +85393202 +85393203 +85393299 +85393901 +85393902 +85393903 +85393904 +85393905 +85393906 +85393999 +85394101 +85394901 +85394999 +85437099 +85399001 +85399003 +85399004 +85399005 +85399099 +85399002 +85399006 +85401102 +85401105 +85401199 +85401101 +85401103 +85401104 +85401201 +85401299 +85402001 +85402099 +85404002 +85406001 +85406099 +85407101 +85407999 +85408101 +85408102 +85408199 +85408901 +85408999 +85408902 +85408903 +85409101 +85409102 +85409103 +85409104 +85409199 +85409901 +85409902 +85409903 +85409904 +85409999 +85411001 +85411099 +85412101 +85412999 +85413001 +85413099 +85414001 +85414002 +85414003 +85415001 +85416001 +85419001 +85419099 +85423101 +85423102 +85423199 +85423201 +85423299 +85423301 +85423399 +85423901 +85423999 +85429001 +85431002 +85432005 +85432099 +85432001 +85432002 +85432003 +85432004 +85433001 +85437001 +85437008 +85437017 +85437002 +85437005 +85437006 +85437007 +85437009 +85437010 +85437012 +85437014 +85437015 +85437016 +85437003 +85437004 +85437011 +85437013 +85437099 +85439001 +85439002 +85439099 +85441101 +85441901 +85441999 +85442001 +85442002 +85442003 +85442099 +85443001 +85443002 +85443099 +85444205 +85444201 +85444202 +85444203 +85444204 +85444204 +85444204 +85444299 +85444905 +85444901 +85444902 +85444903 +85444904 +85444901 +85444903 +85444904 +85444901 +85444903 +85444904 +85444901 +85444903 +85444904 +85444906 +85444999 +85446001 +85446099 +85446099 +85447001 +85451101 +85451999 +85452001 +85459001 +85459002 +85459099 +85461001 +85461002 +85461003 +85461099 +85462001 +85462002 +85462003 +85462004 +85462005 +85462099 +85469001 +85469002 +85469003 +85469099 +85471006 +85471001 +85471005 +85471099 +85471002 +85471003 +85471004 +85472001 +85472002 +85472003 +85472099 +85479008 +85479012 +85479099 +85479001 +85479002 +85479003 +85479004 +85479005 +85479006 +85479007 +85479009 +85479010 +85479011 +85481001 +85489004 +85489001 +85489002 +85489003 +85489099 +86011001 +86012001 +86021001 +86029099 +86031001 +86039099 +86040001 +86040099 +86040002 +86050001 +86050099 +86061001 +86063001 +86069101 +86069199 +86069201 +86069999 +86071101 +86071299 +86071902 +86071903 +86071906 +86071901 +86071904 +86071905 +86071999 +86072101 +86072199 +86072999 +86073001 +86079101 +86079199 +86079999 +86080001 +86080002 +86080099 +86080003 +86090001 +87011001 +87012001 +87012002 +87013001 +87013099 +87019001 +87019007 +87019003 +87019002 +87019004 +87019099 +87019001 +87019008 +87019007 +87019002 +87019003 +87019004 +87019099 +87019001 +87019007 +87019002 +87019003 +87019004 +87019099 +87019001 +87019003 +87019005 +87019006 +87019007 +87019002 +87019004 +87019099 +87019001 +87019007 +87019002 +87019003 +87019004 +87019099 +87021005 +87021001 +87021002 +87021003 +87021004 +87021005 +87029006 +87021001 +87029002 +87021002 +87029003 +87021003 +87029004 +87021004 +87029005 +87029006 +87029002 +87029003 +87029004 +87029005 +87029001 +87029007 +87029007 +87029007 +87029007 +87029006 +87029008 +87029001 +87029006 +87029008 +87029002 +87029003 +87029004 +87029005 +87031001 +87031002 +87031099 +87032101 +87032102 +87032199 +87032201 +87032202 +87032301 +87032302 +87032401 +87032402 +87033101 +87033102 +87033201 +87033202 +87033301 +87033302 +87032199 +87032201 +87032301 +87032401 +87039099 +87032102 +87032202 +87032302 +87032402 +87039002 +87032101 +87033101 +87033201 +87033301 +87039099 +87033102 +87033202 +87033302 +87039002 +87032199 +87032201 +87032301 +87032401 +87039099 +87032102 +87032202 +87032302 +87032402 +87039002 +87032101 +87033101 +87033201 +87033301 +87039099 +87033102 +87033202 +87033302 +87039002 +87039001 +87039003 +87039002 +87039099 +87041001 +87041099 +87042101 +87042104 +87042102 +87042103 +87042199 +87042201 +87042207 +87042202 +87042203 +87042204 +87042205 +87042206 +87042299 +87042301 +87042302 +87042399 +87043101 +87043102 +87043105 +87043103 +87043199 +87043201 +87043207 +87043202 +87043203 +87043204 +87043206 +87043205 +87043299 +87049001 +87049099 +87051001 +87052001 +87052099 +87053001 +87054001 +87054002 +87059001 +87059002 +87059099 +87060001 +87060002 +87060099 +87071001 +87071099 +87079002 +87082914 +87082915 +87079001 +87079099 +87081001 +87081002 +87081003 +87081099 +87082101 +87082901 +87082902 +87082903 +87082904 +87082905 +87082906 +87082907 +87082908 +87082909 +87082910 +87082911 +87082912 +87082913 +87082916 +87082917 +87082918 +87082919 +87082920 +87082922 +87082923 +87082924 +87082999 +87082999 +87082999 +87082999 +87082999 +87082999 +87082999 +87082999 +87082999 +87083001 +87083002 +87083004 +87083006 +87083008 +87083009 +87083010 +87083011 +87083005 +87083007 +87083012 +87083013 +87083003 +87083014 +87083099 +87084001 +87084002 +87084003 +87084004 +87084005 +87084007 +87084008 +87084006 +87084099 +87085001 +87085002 +87085003 +87085004 +87085005 +87085006 +87085007 +87085008 +87085009 +87085010 +87085013 +87085014 +87085015 +87085016 +87085018 +87085020 +87085022 +87085023 +87085024 +87085025 +87085026 +87085027 +87085028 +87085029 +87085030 +87085011 +87085017 +87085019 +87085021 +87085012 +87085099 +87087006 +87087002 +87087003 +87087004 +87087007 +87087001 +87087005 +87087099 +87088001 +87088002 +87088003 +87088004 +87088005 +87088006 +87088007 +87088008 +87088009 +87088010 +87088011 +87088012 +87088099 +87089101 +87089102 +84099907 +87089199 +87089201 +87089202 +87089299 +87089302 +87089304 +87089301 +87089303 +87089399 +87089402 +87089401 +87089408 +87089403 +87089401 +87089408 +87089404 +87089401 +87089408 +87089406 +87089401 +87089408 +87089407 +87089401 +87089408 +87089409 +87089401 +87089408 +87089410 +87089401 +87089408 +87089411 +87089401 +87089408 +87089405 +87089499 +87089501 +87082921 +87089599 +87089904 +87089907 +87089908 +87089909 +87089902 +87089912 +87089901 +87089903 +87089905 +87089902 +87089912 +87089906 +87089902 +87089912 +87089910 +87089902 +87089912 +87089911 +87089902 +87089912 +87089913 +87089902 +87089912 +87089914 +87089902 +87089912 +87089999 +87091101 +87091901 +87091902 +87091999 +87099001 +87100001 +87111001 +87111002 +87111099 +87112003 +87112004 +87112002 +87112099 +87113003 +87113001 +87113002 +87113099 +87114001 +87114002 +87114003 +87114099 +87115001 +87115002 +87115099 +87119099 +87119001 +87119099 +87120001 +87120002 +87120004 +87120003 +87120099 +87131001 +87139099 +87141001 +87141002 +87141003 +87141099 +87142001 +87149101 +87149101 +87149101 +87149201 +87149301 +87149401 +87149499 +87149501 +87149601 +87149999 +87150001 +87150002 +87161001 +87162001 +87162003 +87162002 +87162099 +87163101 +87163102 +87163199 +87163903 +87163904 +87163908 +87163901 +87163902 +87163905 +87163906 +87163907 +87163999 +87164099 +87168003 +87168001 +87168002 +87168099 +87169003 +87169001 +87169002 +87169099 +88010001 +88010099 +88021101 +88021199 +88021201 +88021299 +88022001 +88022099 +88023001 +88023002 +88023099 +88024001 +88026001 +88031001 +88032001 +88033099 +88039099 +88040001 +88051001 +88052101 +88052901 +89011001 +89011099 +89012001 +89012099 +89013001 +89013099 +89019001 +89019002 +89019003 +89019099 +89020001 +89020002 +89020099 +89031001 +89039101 +89039201 +89039999 +89040001 +89051001 +89052001 +89059001 +89059099 +89061001 +89069099 +89071001 +89079099 +89080001 +90011001 +90011099 +90012001 +90013002 +90013001 +90013099 +90014001 +90014002 +90014099 +90015001 +90015099 +90019001 +90019099 +90021101 +90021999 +90022001 +90029099 +90031101 +90031901 +90039001 +90039099 +90041001 +90049099 +90051001 +90058099 +90059001 +90059002 +90059099 +90063001 +90064001 +90065101 +90065201 +90065299 +90065301 +90065399 +90061001 +90065901 +90065902 +90065999 +90066101 +90066901 +90066999 +90069102 +90069199 +90069999 +90071001 +90071002 +90071099 +90072001 +90079101 +90079201 +90085001 +90089001 +90089099 +90101001 +90105001 +90106001 +90109001 +90111001 +90111099 +90112099 +90118001 +90119001 +90121001 +90129001 +90131001 +90132001 +90138001 +90138099 +90139001 +90141001 +90141002 +90141003 +90141099 +90142001 +90148001 +90148002 +90148099 +90149001 +90149099 +90151001 +90152001 +90152099 +90153001 +90154001 +90158001 +90158003 +90158004 +90158005 +90158007 +90158002 +90158006 +90158099 +90159001 +90160001 +90160099 +90171001 +90171002 +90171099 +90172001 +90172099 +90173001 +90173099 +90178003 +90178004 +90178001 +90178002 +90178099 +90179001 +90179099 +90181101 +90181102 +90181201 +90181301 +90181401 +90181902 +90181905 +90181906 +90181904 +90181910 +90181901 +90181903 +90181907 +90181909 +90181908 +90181999 +90182001 +90183101 +90183199 +90183202 +90183203 +90183204 +90183201 +90183299 +90183902 +90183903 +90183904 +90189007 +90183901 +90183905 +90183999 +90184101 +90184199 +90184902 +90184904 +90184905 +90184906 +90184901 +90184903 +90184999 +90185001 +90189001 +90189002 +90189003 +90189004 +90189005 +90189006 +90189007 +90189008 +90189009 +90189010 +90189011 +90189012 +90189013 +90189014 +90189015 +90189016 +90189017 +90189018 +90189019 +90189020 +90189025 +90189027 +90189028 +90189031 +90189021 +90189022 +90189023 +90189024 +90189026 +90189029 +90189030 +90189099 +90191002 +90191001 +90191099 +90192001 +90200002 +90200003 +90200001 +90200099 +90211001 +90211002 +90211004 +90211005 +90211003 +90211099 +90212101 +90212199 +90212999 +90213101 +90213901 +90213902 +90213904 +90213903 +90213999 +90214001 +90215001 +90219099 +90221201 +90221301 +90221401 +90221499 +90221901 +90222101 +90222199 +90222901 +90223001 +90229003 +90229001 +90229002 +90229099 +90230001 +90241001 +90248001 +90249001 +90251101 +90251199 +90251901 +90251902 +90251903 +90251904 +90251999 +90258001 +90258002 +90258003 +90258099 +90259001 +90261002 +90261003 +90261004 +90261005 +90261001 +90261006 +90261099 +90262003 +90262004 +90262001 +90262002 +90262005 +90262006 +90262099 +90268001 +90268002 +90268099 +90269001 +90271001 +90272001 +90273001 +90275099 +90278001 +90278002 +90278003 +90278099 +90279001 +90279002 +90279003 +90279099 +90281001 +90282002 +90282003 +90282001 +90282099 +90283001 +90283099 +90289001 +90289002 +90289099 +90291003 +90291002 +90291001 +90291004 +90291099 +90292001 +90292002 +90292004 +90292003 +90292005 +90292099 +90299001 +90301001 +90302001 +90302099 +90303101 +90303201 +90303301 +90303302 +90303304 +90303303 +90303305 +90303306 +90303399 +90303901 +90304001 +90304099 +90308201 +90308401 +90308903 +90308901 +90308902 +90308904 +90308999 +90309002 +90309004 +90309001 +90309003 +90309099 +90311001 +90312001 +90312099 +90314101 +90314901 +90314902 +90314999 +90318001 +90318002 +90318007 +90318003 +90318004 +90318005 +90318006 +90318099 +90319001 +90319002 +90319099 +90321001 +90321003 +90321004 +90321002 +90321099 +90322001 +90328101 +90328199 +90328901 +90328902 +90328903 +90328904 +90328905 +90328906 +90328999 +90329001 +90329099 +90330001 +91011101 +91011999 +91011901 +91012101 +91012999 +91019101 +91019999 +91021101 +91021201 +91021999 +91022101 +91022999 +91029101 +91029999 +91031001 +91039099 +91040002 +91040099 +91040001 +91040003 +91051101 +91051199 +91051999 +91052101 +91052999 +91059101 +91059199 +91059999 +91059901 +91061001 +91061099 +91069001 +91069099 +91070001 +91081101 +91081201 +91081999 +91082001 +91089099 +91091001 +91099099 +91101101 +91101201 +91101901 +91109099 +91111001 +91111099 +91112001 +91118099 +91119001 +91122001 +91122099 +91129001 +91131001 +91131099 +91132001 +91132099 +91139001 +91139099 +91141001 +91143001 +91144001 +91149099 +91149001 +91149002 +92011001 +92012001 +92019001 +92019002 +92019099 +92021001 +92029001 +92029002 +92029099 +92051001 +92059002 +92059003 +92059004 +92059001 +92059099 +92060001 +92071001 +92071002 +92071099 +92079099 +92081001 +92089099 +92093001 +92099101 +92099199 +92099201 +92099401 +92099499 +92099901 +92099902 +92099903 +92099999 +93011001 +93011099 +93012001 +93019099 +93020001 +93020099 +93031001 +93031099 +93032001 +93033001 +93039001 +93039099 +93040001 +93040099 +93051001 +93051099 +93052001 +93052099 +93059101 +93059999 +93062101 +93062199 +93062901 +93062999 +93063004 +93063002 +93063003 +93063099 +93063001 +93069001 +93069002 +93069099 +93070001 +94011001 +94012001 +94013001 +94014001 +94015101 +94015101 +94015999 +94016101 +94016999 +94017101 +94017999 +94017999 +94018001 +94019002 +94019001 +94019099 +94021001 +94021099 +94029001 +94029002 +94029099 +94031002 +94031099 +94031099 +94031099 +94031001 +94032003 +94032004 +94032099 +94032099 +94032099 +94032099 +94032001 +94032002 +94033001 +94033002 +94034001 +94035001 +94036001 +94036002 +94036003 +94036099 +94037001 +94037002 +94037099 +94038101 +94038101 +94038999 +94039001 +94039001 +94041001 +94042101 +94042199 +94042999 +94043001 +94049002 +94049003 +94049004 +94049005 +94049006 +94049001 +94049099 +94051001 +94051002 +94051003 +94051099 +94052001 +94052099 +94053001 +94054001 +94055001 +94055099 +94056001 +94059101 +94059102 +94059103 +94059104 +94059199 +94059201 +94059999 +94060001 +94060001 +95030001 +95030002 +95030003 +95030004 +95030005 +95030006 +95030007 +95030008 +95030009 +95030010 +95030011 +95030012 +95030013 +95030014 +95030015 +95030016 +95030017 +95030018 +95030020 +95030021 +95030022 +95030023 +95030024 +95030025 +95030026 +95030027 +95030028 +95030029 +95030030 +95030031 +95030032 +95030033 +95030034 +95030035 +95030019 +95030036 +95030099 +95042001 +95042099 +95043001 +95043002 +95043099 +95044001 +95045003 +95045001 +95045002 +95049001 +95049002 +95049003 +95049004 +95049005 +95049099 +95051001 +95051099 +95059099 +95061101 +95061201 +95061999 +95062101 +95062901 +95062999 +95063101 +95063199 +95063201 +95063901 +95063999 +95064001 +95065101 +95065199 +95065999 +95066101 +95066201 +95066999 +95067001 +95069102 +95069199 +95069101 +95069901 +95069902 +95069903 +95069904 +95069905 +95069906 +95069999 +95071001 +95072001 +95073001 +95079099 +95081001 +95089002 +95089001 +95089099 +96011001 +96019099 +96020001 +96020099 +96031001 +96032101 +96032999 +96033001 +96034001 +96035001 +96039001 +96039099 +96040001 +96050001 +96061001 +96062101 +96062201 +96062901 +96062999 +96063001 +96071101 +96071999 +96072001 +96081001 +96081099 +96082001 +96083001 +96083099 +96084002 +96084001 +96084099 +96085001 +96085099 +96086001 +96089101 +96089199 +96089903 +96089906 +96089907 +96089908 +96089909 +96089910 +96089911 +96089901 +96089904 +96089902 +96089905 +96089999 +96091001 +96092001 +96092099 +96099001 +96099099 +96100001 +96110001 +96110099 +96121003 +96121001 +96121002 +96121099 +96122001 +96131001 +96132001 +96138002 +96138001 +96138099 +96139001 +96139002 +96139099 +96140001 +96140003 +96140002 +96140099 +96151101 +96151999 +96159099 +96161001 +96162001 +96170001 +96180001 +96180099 +96190001 +96190002 +96190003 +96190004 +96190099 +90069101 +44219099 +76169999 +68151099 +84879099 +39269099 +73269099 +84313999 +84733001 +85229099 +85299099 +90059001 +90059099 +90069199 +90079101 +90159001 +90330001 +92099999 +97011001 +97019099 +97020001 +97030001 +97040001 +97040099 +97050005 +97050006 +97050001 +97050002 +97050003 +97050004 +97050099 +97060001 +98010001 +98020001 +98020002 +98020003 +98020004 +98020005 +98020006 +98020007 +98020008 +98020009 +98020010 +98020011 +98020012 +98020013 +98020014 +98020015 +98020016 +98020017 +98020018 +98020019 +98020020 +98020021 +98020022 +98020023 +98020024 +98020025 +98020026 +98020027 +98020028 +98020029 +98020030 +98020031 +98020032 +98020033 +98020034 +98020035 +98020036 +98020037 +98020038 +98030001 +98030002 +98040001 +98040099 +98050001 +98060001 +98060002 +98060003 +98060004 +98060005 +98060006 +98060007 +98060008 +98060009 +98060010 +98070001 +("0101290200", +("0101290300", +("0101299901", +("0101299999", +("0101300100", +("0101909900", +("0102210100", +("0102290100", +("0102290200", +("0102299900", +("0102310100", +("0102399900", +("0102909900", +("0103100100", +("0103910100", +("0103919900", +("0103919900", +("0103920100", +("0103929900", +("0103929900", +("0103929900", +("0104100100", +("0104109901", +("0104109999", +("0104200100", +("0104200200", +("0104209900", +("0105110301", +("0105110302", +("0105110303", +("0105110303", +("0105110391", +("0105110391", +("0105110392", +("0105110392", +("0105119900", +("0105120100", +("0105130100", +("0105140100", +("0105150100", +("0105940100", +("0105949900", +("0105999900", +("0106110100", +("0106119900", +("0106120100", +("0106130100", +("0106140100", +("0106190200", +("0106199901", +("0106199999", +("0106199999", +("0106200400", +("0106200400", +("0106200400", +("0106200400", +("0106310100", +("0106320100", +("0106330100", +("0106399900", +("0106399900", +("0106399900", +("0106410100", +("0106499900", +("0106900200", +("0106900300", +("0106900400", +("0106909900", +("0201100100", +("0201209900", +("0201300100", +("0202100100", +("0202209900", +("0202300100", +("0203110100", +("0203120101", +("0203120102", +("0203199900", +("0203210100", +("0203220101", +("0203220102", +("0203299900", +("0204100100", +("0204210100", +("0204229900", +("0204230100", +("0204300100", +("0204410100", +("0204429900", +("0204430100", +("0204500100", +("0205000100", +("0206100100", +("0206210100", +("0206220100", +("0206299900", +("0206300100", +("0206309900", +("0206410100", +("0206490100", +("0206499900", +("0206809900", +("0206909900", +("0207110100", +("0207120100", +("0207130401", +("0207130402", +("0207130403", +("0207130404", +("0207130405", +("0207130406", +("0207130499", +("0207140200", +("0207149901", +("0207149902", +("0207149903", +("0207149904", +("0207149905", +("0207149999", +("0207149999", +("0207240100", +("0207250100", +("0207260301", +("0207260399", +("0207260399", +("0207270200", +("0207279901", +("0207279999", +("0207279999", +("0207410100", +("0207420100", +("0207430100", +("0207440100", +("0207450100", +("0207459900", +("0207510100", +("0207520100", +("0207530100", +("0207540100", +("0207550100", +("0207559900", +("0207600300", +("0207600300", +("0207600300", +("0208100100", +("0208300100", +("0208400100", +("0208500100", +("0208600100", +("0208909900", +("0208909900", +("0208909900", +("0209100100", +("0209900100", +("0209909900", +("0210110100", +("0210120100", +("0210199900", +("0210200100", +("0210910100", +("0210920100", +("0210930100", +("0210990200", +("0210999900", +("0210999900", +("0210999900", +("0301110100", +("0301199900", +("0301910100", +("0301920100", +("0301930100", +("0301930100", +("0301940100", +("0301950100", +("0301999900", +("0302110100", +("0302130100", +("0302140100", +("0302199900", +("0302210100", +("0302220100", +("0302230100", +("0302240100", +("0302299900", +("0302310100", +("0302320100", +("0302330100", +("0302340100", +("0302350100", +("0302360100", +("0302399900", +("0302410100", +("0302420100", +("0302430100", +("0302440100", +("0302450100", +("0302460100", +("0302470100", +("0302499900", +("0302510100", +("0302520100", +("0302530100", +("0302540100", +("0302550100", +("0302560100", +("0302599900", +("0302710100", +("0302720100", +("0302730100", +("0302730100", +("0302740100", +("0302799900", +("0302810100", +("0302820100", +("0302830100", +("0302840100", +("0302850100", +("0302890100", +("0302899900", +("0302910100", +("0302920100", +("0302990100", +("0302990100", +("0302990100", +("0302990100", +("0302990100", +("0302990100", +("0302990100", +("0302990200", +("0302990300", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0302999900", +("0303110100", +("0303120100", +("0303130100", +("0303140100", +("0303199900", +("0303230100", +("0303240100", +("0303250100", +("0303250100", +("0303260100", +("0303299900", +("0303310100", +("0303320100", +("0303330100", +("0303340100", +("0303399900", +("0303410100", +("0303420100", +("0303430100", +("0303440100", +("0303450100", +("0303460100", +("0303499900", +("0303510100", +("0303530100", +("0303540100", +("0303550100", +("0303560100", +("0303570100", +("0303599900", +("0303630100", +("0303640100", +("0303650100", +("0303660100", +("0303670100", +("0303680100", +("0303699900", +("0303810100", +("0303820100", +("0303830100", +("0303840100", +("0303890100", +("0303899900", +("0303910100", +("0303920100", +("0303990100", +("0303990100", +("0303990100", +("0303990100", +("0303990100", +("0303990100", +("0303990100", +("0303990200", +("0303990200", +("0303990300", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0303999900", +("0304310100", +("0304320100", +("0304330100", +("0304399900", +("0304399900", +("0304410100", +("0304420100", +("0304430100", +("0304440101", +("0304440199", +("0304450100", +("0304460100", +("0304470100", +("0304480100", +("0304499901", +("0304499902", +("0304499903", +("0304499999", +("0304510100", +("0304510100", +("0304520101", +("0304520199", +("0304530101", +("0304530199", +("0304540100", +("0304550100", +("0304560100", +("0304570100", +("0304599901", +("0304599902", +("0304599903", +("0304599999", +("0304610100", +("0304620100", +("0304630100", +("0304699900", +("0304699900", +("0304710100", +("0304720100", +("0304730100", +("0304740101", +("0304740199", +("0304750100", +("0304799900", +("0304810100", +("0304820100", +("0304830100", +("0304840100", +("0304850100", +("0304860100", +("0304870100", +("0304880100", +("0304899901", +("0304899902", +("0304899999", +("0304910100", +("0304920100", +("0304930100", +("0304930100", +("0304940100", +("0304950101", +("0304950199", +("0304960100", +("0304970100", +("0304999901", +("0304999902", +("0304999903", +("0304999904", +("0304999999", +("0305100100", +("0305200100", +("0305310100", +("0305310100", +("0305320101", +("0305320199", +("0305399901", +("0305399902", +("0305399903", +("0305399904", +("0305399905", +("0305399999", +("0305410100", +("0305420100", +("0305430100", +("0305440100", +("0305440100", +("0305499901", +("0305499902", +("0305499903", +("0305499904", +("0305499905", +("0305499906", +("0305499999", +("0305510201", +("0305510299", +("0305520100", +("0305530100", +("0305540100", +("0305599901", +("0305599902", +("0305599903", +("0305599904", +("0305599905", +("0305599906", +("0305599907", +("0305599999", +("0305610100", +("0305620100", +("0305630100", +("0305640100", +("0305640100", +("0305699901", +("0305699902", +("0305699903", +("0305699904", +("0305699905", +("0305699999", +("0305710100", +("0305720101", +("0305720102", +("0305720103", +("0305720104", +("0305720105", +("0305720106", +("0305720199", +("0305799901", +("0305799902", +("0305799903", +("0305799904", +("0305799905", +("0305799906", +("0305799999", +("0306110100", +("0306120100", +("0306140100", +("0306150100", +("0306160100", +("0306170100", +("0306199900", +("0306310100", +("0306320100", +("0306330100", +("0306340100", +("0306350100", +("0306359900", +("0306360100", +("0306369900", +("0306390100", +("0306910100", +("0306920100", +("0306930100", +("0306940100", +("0306950100", +("0306950100", +("0306959900", +("0306959900", +("0306999900", +("0307110100", +("0307120100", +("0307199900", +("0307210100", +("0307220100", +("0307299900", +("0307310100", +("0307320100", +("0307399900", +("0307420201", +("0307420299", +("0307420299", +("0307430201", +("0307430299", +("0307430299", +("0307499901", +("0307499999", +("0307499999", +("0307510100", +("0307520100", +("0307599900", +("0307600100", +("0307710100", +("0307720100", +("0307799900", +("0307810100", +("0307820100", +("0307830100", +("0307840100", +("0307870100", +("0307880100", +("0307910100", +("0307920100", +("0307999900", +("0308110100", +("0308120100", +("0308199900", +("0308210100", +("0308220100", +("0308299900", +("0308300100", +("0308909900", +("0401100201", +("0401100299", +("0401200201", +("0401200299", +("0401400201", +("0401400299", +("0401500201", +("0401500299", +("0402100100", +("0402109900", +("0402210100", +("0402219900", +("0402299900", +("0402910100", +("0402919900", +("0402990100", +("0402999900", +("0403100100", +("0403909900", +("0404100100", +("0404109900", +("0404909900", +("0405100201", +("0405100299", +("0405200100", +("0405900100", +("0405909900", +("0406100100", +("0406200100", +("0406300200", +("0406300200", +("0406400100", +("0406900100", +("0406900200", +("0406900400", +("0406909901", +("0406909999", +("0406909999", +("0406909999", +("0407110101", +("0407110191", +("0407110199", +("0407199900", +("0407210201", +("0407210299", +("0407290100", +("0407299900", +("0407909900", +("0407909900", +("0408110100", +("0408199900", +("0408910201", +("0408910299", +("0408990200", +("0408999900", +("0408999900", +("0409000100", +("0410000100", +("0410009900", +("0501000100", +("0502100100", +("0502909900", +("0504000100", +("0505100100", +("0505909900", +("0506100100", +("0506909900", +("0507100100", +("0507909900", +("0507909900", +("0508000200", +("0508000200", +("0510000400", +("0510000400", +("0510000400", +("0510000400", +("0511100100", +("0511910200", +("0511919901", +("0511919999", +("0511990100", +("0511990300", +("0511990400", +("0511990500", +("0511990800", +("0511999901", +("0511999902", +("0511999999", +("0511999999", +("0601100901", +("0601100902", +("0601100903", +("0601100999", +("0601100999", +("0601100999", +("0601100999", +("0601100999", +("0601100999", +("0601201000", +("0601201000", +("0601201000", +("0601201000", +("0601201000", +("0601201000", +("0601201000", +("0601201000", +("0601201000", +("0601201000", +("0602100700", +("0602100700", +("0602100700", +("0602100700", +("0602100700", +("0602100700", +("0602100700", +("0602200401", +("0602200402", +("0602200499", +("0602200499", +("0602300100", +("0602400100", +("0602409900", +("0602900600", +("0602900700", +("0602909901", +("0602909902", +("0602909903", +("0602909999", +("0602909999", +("0602909999", +("0602909999", +("0602909999", +("0602909999", +("0602909999", +("0602909999", +("0602909999", +("0603110100", +("0603120100", +("0603130100", +("0603140200", +("0603140200", +("0603150100", +("0603199901", +("0603199991", +("0603199991", +("0603199991", +("0603199991", +("0603199991", +("0603199991", +("0603199991", +("0603199999", +("0603199999", +("0603199999", +("0603199999", +("0603199999", +("0603199999", +("0603199999", +("0603909900", +("0604200100", +("0604209901", +("0604209902", +("0604209999", +("0604900100", +("0604909901", +("0604909999", +("0604909999", +("0604909999", +("0701100100", +("0701909900", +("0702000301", +("0702000302", +("0702000303", +("0702000304", +("0702000305", +("0702000399", +("0703100201", +("0703100299", +("0703200201", +("0703200299", +("0703900100", +("0704100301", +("0704100302", +("0704100399", +("0704200100", +("0704909901", +("0704909999", +("0705110100", +("0705199900", +("0705210100", +("0705299900", +("0706100100", +("0706909900", +("0707000100", +("0708100100", +("0708200100", +("0708909900", +("0709200201", +("0709200299", +("0709300100", +("0709400201", +("0709400299", +("0709510100", +("0709599900", +("0709599900", +("0709600201", +("0709600202", +("0709600203", +("0709600204", +("0709600205", +("0709600206", +("0709600207", +("0709600208", +("0709600299", +("0709700100", +("0709910100", +("0709920100", +("0709930101", +("0709930199", +("0709999901", +("0709999999", +("0710100100", +("0710210100", +("0710220100", +("0710299900", +("0710300100", +("0710400100", +("0710800100", +("0710809901", +("0710809902", +("0710809999", +("0710809999", +("0710900200", +("0710900200", +("0711200100", +("0711400100", +("0711510100", +("0711599900", +("0711900300", +("0711909900", +("0711909900", +("0711909900", +("0712200100", +("0712310100", +("0712320100", +("0712330100", +("0712399900", +("0712900100", +("0712909901", +("0712909902", +("0712909999", +("0713100100", +("0713109900", +("0713200100", +("0713310100", +("0713320100", +("0713330100", +("0713339901", +("0713339902", +("0713339999", +("0713340100", +("0713350100", +("0713399900", +("0713400100", +("0713500100", +("0713600100", +("0713909900", +("0714100100", +("0714109900", +("0714200100", +("0714209900", +("0714300100", +("0714309900", +("0714400100", +("0714409900", +("0714500100", +("0714509900", +("0714900200", +("0714909900", +("0714909900", +("0801110100", +("0801120100", +("0801199900", +("0801210100", +("0801220100", +("0801310100", +("0801320100", +("0802110100", +("0802120100", +("0802210100", +("0802220100", +("0802310100", +("0802320100", +("0802410100", +("0802420100", +("0802510100", +("0802520100", +("0802610100", +("0802620100", +("0802700100", +("0802800100", +("0802909901", +("0802909999", +("0803100100", +("0803909900", +("0804100201", +("0804100299", +("0804200200", +("0804200200", +("0804300100", +("0804400100", +("0804500401", +("0804500402", +("0804500403", +("0805100100", +("0805210100", +("0805220100", +("0805299900", +("0805400100", +("0805500301", +("0805500302", +("0805500399", +("0805909900", +("0806100100", +("0806200100", +("0807110101", +("0807110199", +("0807199901", +("0807199999", +("0807200100", +("0808100100", +("0808300100", +("0808400100", +("0809100100", +("0809210100", +("0809299900", +("0809300301", +("0809300302", +("0809400100", +("0810100100", +("0810200101", +("0810200102", +("0810200199", +("0810300100", +("0810400101", +("0810400199", +("0810500100", +("0810600100", +("0810700100", +("0810909900", +("0811100100", +("0811200101", +("0811200102", +("0811200199", +("0811909901", +("0811909999", +("0812100100", +("0812909900", +("0812909900", +("0812909900", +("0813100200", +("0813100200", +("0813200201", +("0813200299", +("0813300100", +("0813400400", +("0813400400", +("0813400400", +("0813400400", +("0813500100", +("0814000100", +("0901110201", +("0901110299", +("0901120100", +("0901210100", +("0901220100", +("0901909900", +("0901909900", +("0902100100", +("0902200100", +("0902300100", +("0902400100", +("0903000100", +("0904110100", +("0904120100", +("0904210201", +("0904210299", +("0904220201", +("0904220299", +("0905100100", +("0905200100", +("0906110100", +("0906199900", +("0906200100", +("0907100100", +("0907200100", +("0908110100", +("0908120100", +("0908210100", +("0908220100", +("0908310100", +("0908320100", +("0909210100", +("0909220100", +("0909310100", +("0909320100", +("0909610100", +("0909610200", +("0909619900", +("0909620100", +("0909620200", +("0909629900", +("0910110100", +("0910120100", +("0910200100", +("0910300100", +("0910910100", +("0910999901", +("0910999999", +("0910999999", +("1001110100", +("1001199900", +("1001910100", +("1001919900", +("1001990100", +("1001999900", +("1002100100", +("1002909900", +("1003100100", +("1003909901", +("1003909999", +("1004100100", +("1004909900", +("1005100100", +("1005900400", +("1005909901", +("1005909902", +("1005909999", +("1005909999", +("1006100100", +("1006200100", +("1006300201", +("1006300299", +("1006400100", +("1007100100", +("1007900100", +("1007900200", +("1008100100", +("1008210100", +("1008299900", +("1008300100", +("1008400100", +("1008500100", +("1008600100", +("1008909900", +("1101000100", +("1102200100", +("1102909901", +("1102909999", +("1102909999", +("1103110100", +("1103130100", +("1103190301", +("1103190399", +("1103190399", +("1103200201", +("1103200299", +("1104120100", +("1104190200", +("1104190200", +("1104220100", +("1104230100", +("1104290200", +("1104290200", +("1104300100", +("1105100100", +("1105200100", +("1106100100", +("1106200200", +("1106200200", +("1106300200", +("1106300200", +("1107100100", +("1107200100", +("1108110100", +("1108120100", +("1108130100", +("1108140100", +("1108190200", +("1108190200", +("1108200100", +("1109000100", +("1201100100", +("1201900100", +("1201900200", +("1202300100", +("1202410100", +("1202420100", +("1203000100", +("1204000100", +("1205100100", +("1205909900", +("1206000201", +("1206000299", +("1207100100", +("1207210100", +("1207299900", +("1207300100", +("1207400100", +("1207500100", +("1207600300", +("1207609900", +("1207609900", +("1207700100", +("1207910100", +("1207999900", +("1207999900", +("1207999900", +("1208100100", +("1208909900", +("1208909900", +("1208909900", +("1209100100", +("1209210100", +("1209220100", +("1209230100", +("1209240100", +("1209250100", +("1209290400", +("1209299901", +("1209299902", +("1209299999", +("1209299999", +("1209299999", +("1209300100", +("1209911501", +("1209911502", +("1209911503", +("1209911504", +("1209911505", +("1209911506", +("1209911507", +("1209911508", +("1209911509", +("1209911510", +("1209911511", +("1209911512", +("1209911599", +("1209911599", +("1209911599", +("1209999901", +("1209999902", +("1209999999", +("1209999999", +("1209999999", +("1209999999", +("1209999999", +("1210100100", +("1210200100", +("1211200100", +("1211200200", +("1211300100", +("1211300200", +("1211400100", +("1211400100", +("1211500100", +("1211500100", +("1211909100", +("1211909901", +("1211909902", +("1211909903", +("1211909999", +("1211909999", +("1211909999", +("1211909999", +("1211909999", +("1212210100", +("1212210200", +("1212219900", +("1212290100", +("1212299900", +("1212910100", +("1212920200", +("1212920200", +("1212930100", +("1212940200", +("1212940200", +("1212999900", +("1212999900", +("1213000100", +("1214100100", +("1214900100", +("1214909900", +("1301200100", +("1301909900", +("1301909900", +("1301909900", +("1302119900", +("1302119900", +("1302119900", +("1302120201", +("1302120299", +("1302130100", +("1302140100", +("1302190100", +("1302190300", +("1302190400", +("1302190500", +("1302190600", +("1302190700", +("1302190800", +("1302190900", +("1302191300", +("1302191400", +("1302191500", +("1302191500", +("1302199900", +("1302199900", +("1302200201", +("1302200299", +("1302310100", +("1302320100", +("1302320200", +("1302329900", +("1302390100", +("1302390200", +("1302399900", +("1302399900", +("1401100100", +("1401200100", +("1401909900", +("1404200100", +("1404909901", +("1404909902", +("1404909991", +("1404909999", +("1404909999", +("1501100100", +("1501200100", +("1501909900", +("1502100100", +("1502909900", +("1503000200", +("1503000200", +("1504100100", +("1504109900", +("1504200201", +("1504200299", +("1504300100", +("1505000401", +("1505000499", +("1505000499", +("1505000499", +("1506000100", +("1506009900", +("1506009900", +("1507100100", +("1507909900", +("1508100100", +("1508909900", +("1509100200", +("1509100200", +("1509909901", +("1509909999", +("1509909999", +("1510009900", +("1511100100", +("1511909900", +("1512110100", +("1512199900", +("1512210100", +("1512299900", +("1513110100", +("1513199900", +("1513210100", +("1513299900", +("1514110100", +("1514199900", +("1514910100", +("1514999900", +("1515110100", +("1515199900", +("1515210100", +("1515299900", +("1515300100", +("1515500100", +("1515909900", +("1515909900", +("1515909900", +("1515909900", +("1515909900", +("1515909900", +("1516100100", +("1516200100", +("1517100100", +("1517909900", +("1517909900", +("1517909900", +("1518000100", +("1518000200", +("1518009900", +("1520000100", +("1521100100", +("1521109900", +("1521900400", +("1521900400", +("1521909901", +("1521909999", +("1522000100", +("1601000301", +("1601000302", +("1601000399", +("1602100200", +("1602100200", +("1602200200", +("1602200200", +("1602310100", +("1602320100", +("1602399900", +("1602410100", +("1602420100", +("1602499901", +("1602499999", +("1602500200", +("1602500200", +("1602909900", +("1603000100", +("1603009900", +("1604110100", +("1604120100", +("1604130201", +("1604130202", +("1604130299", +("1604140400", +("1604149901", +("1604149902", +("1604149999", +("1604149999", +("1604150100", +("1604160201", +("1604160202", +("1604160299", +("1604170100", +("1604180100", +("1604199901", +("1604199902", +("1604199903", +("1604199999", +("1604200301", +("1604200302", +("1604200303", +("1604200304", +("1604200305", +("1604200306", +("1604200307", +("1604200391", +("1604200399", +("1604310100", +("1604320100", +("1605100201", +("1605100299", +("1605210100", +("1605299900", +("1605300100", +("1605400100", +("1605510100", +("1605520100", +("1605530100", +("1605540100", +("1605540100", +("1605550100", +("1605560100", +("1605570100", +("1605580100", +("1605599900", +("1605610100", +("1605620100", +("1605630100", +("1605699900", +("1701120501", +("1701120502", +("1701130100", +("1701140501", +("1701140502", +("1701910401", +("1701910402", +("1701999901", +("1701999902", +("1701999999", +("1702110100", +("1702190100", +("1702199900", +("1702200100", +("1702300100", +("1702400100", +("1702409900", +("1702500100", +("1702600301", +("1702600302", +("1702600303", +("1702600304", +("1702600305", +("1702600306", +("1702600391", +("1702600392", +("1702600399", +("1702900100", +("1702909900", +("1703100100", +("1703100100", +("1703909900", +("1704100100", +("1704909900", +("1801000100", +("1802000100", +("1803100100", +("1803200100", +("1804000100", +("1805000100", +("1806100100", +("1806109900", +("1806200100", +("1806310100", +("1806320100", +("1806909901", +("1806909999", +("1806909999", +("1901100201", +("1901100299", +("1901200200", +("1901209901", +("1901209999", +("1901900200", +("1901900300", +("1901900400", +("1901900500", +("1901909901", +("1901909999", +("1902110100", +("1902199900", +("1902200100", +("1902309900", +("1902400100", +("1903000100", +("1904100100", +("1904200100", +("1904300100", +("1904909900", +("1905100100", +("1905200100", +("1905310100", +("1905320100", +("1905400100", +("1905909901", +("1905909902", +("1905909991", +("1905909999", +("2001100100", +("2001909901", +("2001909991", +("2001909991", +("2001909999", +("2002100100", +("2002909900", +("2003100100", +("2003909900", +("2004100100", +("2004900300", +("2004900300", +("2004900300", +("2005100100", +("2005200100", +("2005400100", +("2005510100", +("2005599900", +("2005600100", +("2005700100", +("2005800100", +("2005910100", +("2005999901", +("2005999999", +("2005999999", +("2006000100", +("2006000200", +("2006000300", +("2006009900", +("2007100100", +("2007910100", +("2007990100", +("2007990200", +("2007990300", +("2007999901", +("2007999999", +("2008110201", +("2008110299", +("2008190201", +("2008190202", +("2008190203", +("2008190299", +("2008200100", +("2008300901", +("2008300902", +("2008300999", +("2008300999", +("2008300999", +("2008300999", +("2008300999", +("2008300999", +("2008300999", +("2008400100", +("2008500100", +("2008600100", +("2008700100", +("2008800100", +("2008910100", +("2008930100", +("2008970100", +("2008999900", +("2008999900", +("2009110100", +("2009120201", +("2009120299", +("2009199900", +("2009199900", +("2009210100", +("2009299900", +("2009310201", +("2009310299", +("2009399901", +("2009399999", +("2009410201", +("2009410299", +("2009499900", +("2009499900", +("2009500100", +("2009610100", +("2009699900", +("2009710100", +("2009799900", +("2009810100", +("2009899900", +("2009900200", +("2009900200", +("2101110200", +("2101119901", +("2101119999", +("2101120100", +("2101200100", +("2101300100", +("2102100200", +("2102109901", +("2102109999", +("2102200100", +("2102209900", +("2102300100", +("2103100100", +("2103200201", +("2103200299", +("2103300201", +("2103300299", +("2103909900", +("2104100100", +("2104200100", +("2105000100", +("2106100100", +("2106109900", +("2106109900", +("2106900100", +("2106900300", +("2106900400", +("2106900500", +("2106900700", +("2106900800", +("2106900900", +("2106901000", +("2106901100", +("2106901200", +("2106901300", +("2106909901", +("2106909999", +("2106909999", +("2201100201", +("2201100299", +("2201900100", +("2201900200", +("2201909900", +("2202100100", +("2202910100", +("2202990100", +("2202990201", +("2202990299", +("2202990300", +("2202990400", +("2202999900", +("2203000100", +("2204100201", +("2204100299", +("2204210401", +("2204210401", +("2204210402", +("2204210402", +("2204210499", +("2204210499", +("2204220100", +("2204299900", +("2204309900", +("2205100200", +("2205100200", +("2205909900", +("2205909900", +("2206000201", +("2206000299", +("2207100100", +("2207200100", +("2208200100", +("2208200200", +("2208200300", +("2208209900", +("2208300501", +("2208300502", +("2208300503", +("2208300504", +("2208300599", +("2208400201", +("2208400299", +("2208500100", +("2208600100", +("2208700301", +("2208700302", +("2208700399", +("2208900100", +("2208909901", +("2208909902", +("2208909991", +("2208909992", +("2208909999", +("2208909999", +("2209000100", +("2301100201", +("2301100299", +("2301200100", +("2302100100", +("2302300100", +("2302400201", +("2302400299", +("2302500100", +("2303100100", +("2303200100", +("2303300100", +("2303309900", +("2304000100", +("2305000100", +("2306100100", +("2306200100", +("2306300100", +("2306410100", +("2306499900", +("2306500100", +("2306600100", +("2306909901", +("2306909999", +("2307000100", +("2308000200", +("2308000200", +("2309100100", +("2309900400", +("2309909901", +("2309909902", +("2309909999", +("2309909999", +("2309909999", +("2309909999", +("2309909999", +("2309909999", +("2309909999", +("2309909999", +("2309909999", +("2401100201", +("2401100299", +("2401200301", +("2401200399", +("2401200399", +("2401300100", +("2402100100", +("2402200100", +("2402909900", +("2403110100", +("2403199900", +("2403910201", +("2403910299", +("2403990100", +("2403999900", +("2501000201", +("2501000299", +("2501000299", +("2502000100", +("2503000201", +("2503000299", +("2504100100", +("2504909900", +("2505100100", +("2505909900", +("2506100100", +("2506200200", +("2506200200", +("2507000100", +("2508100100", +("2508300100", +("2508400201", +("2508400299", +("2508500100", +("2508600100", +("2508700100", +("2509000100", +("2510100201", +("2510100299", +("2510200201", +("2510200299", +("2511100100", +("2511200100", +("2512000100", +("2513100200", +("2513100200", +("2513200100", +("2514000100", +("2515110100", +("2515120100", +("2515129900", +("2515200100", +("2516110100", +("2516120100", +("2516200100", +("2516909900", +("2517100100", +("2517200100", +("2517300100", +("2517410100", +("2517499900", +("2518100100", +("2518200100", +("2518300100", +("2519100100", +("2519900100", +("2519900200", +("2519900300", +("2519909900", +("2520100100", +("2520200100", +("2521000100", +("2522100100", +("2522200100", +("2522300100", +("2523100100", +("2523210100", +("2523299900", +("2523300100", +("2523909900", +("2524100300", +("2524100300", +("2524909901", +("2524909902", +("2525100100", +("2525200100", +("2525300100", +("2526100100", +("2526200100", +("2528000100", +("2528009900", +("2529100100", +("2529210100", +("2529220100", +("2529300100", +("2530100100", +("2530200100", +("2530909901", +("2530909999", +("2530909999", +("2530909999", +("2530909999", +("2530909999", +("2530909999", +("2530909999", +("2530909999", +("2601110100", +("2601120100", +("2601200100", +("2602000201", +("2602000299", +("2603000100", +("2604000100", +("2605000100", +("2606000201", +("2606000299", +("2607000100", +("2608000100", +("2609000100", +("2610000201", +("2610000299", +("2611000100", +("2612100100", +("2612200100", +("2613100100", +("2613909900", +("2614000301", +("2614000302", +("2614000399", +("2615100201", +("2615100299", +("2615909900", +("2616100100", +("2616909900", +("2617100100", +("2617909900", +("2618000100", +("2619000201", +("2619000299", +("2620110100", +("2620199900", +("2620210100", +("2620299900", +("2620300100", +("2620400200", +("2620400200", +("2620600100", +("2620910200", +("2620910200", +("2620999901", +("2620999999", +("2620999999", +("2620999999", +("2621100100", +("2621909900", +("2701110100", +("2701120100", +("2701199900", +("2701200100", +("2702100100", +("2702200100", +("2703000201", +("2703000299", +("2704000301", +("2704000302", +("2705000100", +("2706000100", +("2707100100", +("2707200100", +("2707300100", +("2707400100", +("2707500100", +("2707910100", +("2707999901", +("2707999999", +("2707999999", +("2707999999", +("2708100100", +("2708200100", +("2709000501", +("2709000502", +("2709000503", +("2709009900", +("2710120600", +("2710129901", +("2710129902", +("2710129903", +("2710129904", +("2710129905", +("2710129906", +("2710129907", +("2710129908", +("2710129991", +("2710129999", +("2710190200", +("2710199901", +("2710199902", +("2710199903", +("2710199904", +("2710199905", +("2710199906", +("2710199907", +("2710199908", +("2710199991", +("2710199999", +("2710200100", +("2710910100", +("2710999900", +("2711110100", +("2711120100", +("2711130100", +("2711140100", +("2711190100", +("2711199901", +("2711199999", +("2711199999", +("2711210100", +("2711299900", +("2712100100", +("2712200100", +("2712900100", +("2712900200", +("2712900300", +("2712909901", +("2712909999", +("2713110100", +("2713120100", +("2713200100", +("2713909900", +("2714100100", +("2714900100", +("2714909900", +("2715000100", +("2715009900", +("2716000100", +("2801100100", +("2801200100", +("2801300100", +("2802000100", +("2803000200", +("2803009900", +("2803009900", +("2804100100", +("2804210100", +("2804299901", +("2804299999", +("2804300100", +("2804400100", +("2804500100", +("2804610100", +("2804699900", +("2804700400", +("2804700400", +("2804700400", +("2804700400", +("2804800100", +("2804900100", +("2805110100", +("2805120100", +("2805199900", +("2805199900", +("2805300100", +("2805400100", +("2806100100", +("2806200100", +("2807000100", +("2808000100", +("2809100100", +("2809200100", +("2809209900", +("2810000200", +("2810000200", +("2811110100", +("2811119900", +("2811120100", +("2811199900", +("2811199900", +("2811210301", +("2811210302", +("2811220301", +("2811220302", +("2811299901", +("2811299999", +("2811299999", +("2812110100", +("2812120100", +("2812130100", +("2812140100", +("2812150100", +("2812160100", +("2812170100", +("2812199901", +("2812199999", +("2812199999", +("2812199999", +("2812909900", +("2813100100", +("2813909900", +("2814100100", +("2814200100", +("2815110100", +("2815120100", +("2815200301", +("2815200302", +("2815300100", +("2816100100", +("2816400300", +("2816400300", +("2817000100", +("2817000200", +("2818100301", +("2818100302", +("2818100399", +("2818200201", +("2818200299", +("2818300301", +("2818300302", +("2819100100", +("2819909900", +("2820100200", +("2820100200", +("2820909900", +("2821100401", +("2821100402", +("2821100403", +("2821200100", +("2822000100", +("2823000100", +("2824100100", +("2824909900", +("2824909900", +("2825100201", +("2825100299", +("2825200100", +("2825300100", +("2825400201", +("2825400299", +("2825500301", +("2825500302", +("2825500399", +("2825600100", +("2825700100", +("2825800100", +("2825909900", +("2825909900", +("2826120100", +("2826199901", +("2826199902", +("2826199999", +("2826300100", +("2826909901", +("2826909999", +("2827100100", +("2827200100", +("2827310100", +("2827320100", +("2827350100", +("2827399901", +("2827399999", +("2827399999", +("2827399999", +("2827399999", +("2827399999", +("2827399999", +("2827410200", +("2827410200", +("2827499900", +("2827510100", +("2827599900", +("2827600100", +("2828100100", +("2828909900", +("2829110301", +("2829110302", +("2829199901", +("2829199999", +("2829900100", +("2829909900", +("2830100100", +("2830909900", +("2830909900", +("2830909900", +("2831100100", +("2831909900", +("2831909900", +("2832100201", +("2832100299", +("2832209900", +("2832209900", +("2832300100", +("2833110100", +("2833199900", +("2833210100", +("2833220100", +("2833240100", +("2833250100", +("2833250200", +("2833270100", +("2833290500", +("2833299901", +("2833299902", +("2833299999", +("2833299999", +("2833300100", +("2833400301", +("2833400302", +("2833400399", +("2834100201", +("2834100299", +("2834210100", +("2834290100", +("2834299900", +("2835100100", +("2835220100", +("2835240100", +("2835250201", +("2835250299", +("2835269900", +("2835299900", +("2835299900", +("2835299900", +("2835299900", +("2835310100", +("2835390100", +("2835390200", +("2835399900", +("2836200100", +("2836300100", +("2836400301", +("2836400302", +("2836500100", +("2836600100", +("2836910100", +("2836920100", +("2836999901", +("2836999999", +("2836999999", +("2836999999", +("2836999999", +("2837110201", +("2837110299", +("2837199900", +("2837199900", +("2837200201", +("2837200299", +("2839110100", +("2839199900", +("2839900401", +("2839900499", +("2839900499", +("2839900499", +("2840110100", +("2840199900", +("2840209900", +("2840300100", +("2841300100", +("2841500300", +("2841500300", +("2841500300", +("2841610100", +("2841699900", +("2841700100", +("2841800100", +("2841909901", +("2841909999", +("2842100201", +("2842100299", +("2842909901", +("2842909999", +("2843100100", +("2843210100", +("2843299900", +("2843300100", +("2843909900", +("2843909900", +("2844100100", +("2844200100", +("2844300100", +("2844400301", +("2844400302", +("2844400399", +("2844500100", +("2845100100", +("2845909900", +("2846100100", +("2846909900", +("2846909900", +("2846909900", +("2847000100", +("2849100100", +("2849209900", +("2849209900", +("2849909900", +("2850000300", +("2850000300", +("2850000300", +("2852100400", +("2852100400", +("2852100400", +("2852100400", +("2852909900", +("2852909900", +("2853100100", +("2853909901", +("2853909902", +("2853909903", +("2853909999", +("2853909999", +("2901100501", +("2901100502", +("2901100599", +("2901100599", +("2901100599", +("2901210100", +("2901220100", +("2901230100", +("2901240100", +("2901299900", +("2902110100", +("2902199901", +("2902199999", +("2902199999", +("2902199999", +("2902200100", +("2902300100", +("2902410100", +("2902420100", +("2902430100", +("2902440100", +("2902500100", +("2902600100", +("2902700100", +("2902909900", +("2902909900", +("2902909900", +("2902909900", +("2902909900", +("2902909900", +("2902909900", +("2902909900", +("2903110100", +("2903120100", +("2903130201", +("2903130299", +("2903140100", +("2903150100", +("2903199900", +("2903199900", +("2903199900", +("2903199900", +("2903199900", +("2903210100", +("2903220100", +("2903230100", +("2903299900", +("2903299900", +("2903310100", +("2903399901", +("2903399902", +("2903399999", +("2903710100", +("2903720100", +("2903730100", +("2903740100", +("2903750100", +("2903760100", +("2903770500", +("2903770500", +("2903770500", +("2903770500", +("2903770500", +("2903780100", +("2903799900", +("2903799900", +("2903799900", +("2903799900", +("2903829900", +("2903830100", +("2903899901", +("2903899999", +("2903899999", +("2903910100", +("2903920100", +("2903930100", +("2903940100", +("2903990100", +("2903999901", +("2903999999", +("2903999999", +("2903999999", +("2903999999", +("2904100100", +("2904100200", +("2904100300", +("2904100400", +("2904100500", +("2904109900", +("2904200800", +("2904209900", +("2904209900", +("2904209900", +("2904209900", +("2904209900", +("2904209900", +("2904209900", +("2904209900", +("2904310100", +("2904320100", +("2904330100", +("2904340100", +("2904350100", +("2904360100", +("2904910100", +("2904999901", +("2904999902", +("2904999903", +("2904999904", +("2904999905", +("2904999906", +("2904999999", +("2905110100", +("2905120201", +("2905120299", +("2905130100", +("2905140401", +("2905140402", +("2905140499", +("2905140499", +("2905160301", +("2905160399", +("2905160399", +("2905170100", +("2905190600", +("2905199901", +("2905199902", +("2905199903", +("2905199904", +("2905199999", +("2905199999", +("2905199999", +("2905199999", +("2905220601", +("2905220602", +("2905220603", +("2905220699", +("2905220699", +("2905220699", +("2905299901", +("2905299999", +("2905299999", +("2905299999", +("2905310100", +("2905320100", +("2905390100", +("2905390200", +("2905399901", +("2905399999", +("2905399999", +("2905410100", +("2905420100", +("2905430100", +("2905440100", +("2905450100", +("2905459900", +("2905499901", +("2905499999", +("2905499999", +("2905510100", +("2905599900", +("2905599900", +("2905599900", +("2905599900", +("2905599900", +("2905599900", +("2906110100", +("2906120200", +("2906120200", +("2906139900", +("2906139900", +("2906139900", +("2906199901", +("2906199999", +("2906199999", +("2906199999", +("2906210100", +("2906290500", +("2906299900", +("2906299900", +("2906299900", +("2906299900", +("2906299900", +("2906299900", +("2907110201", +("2907110299", +("2907120201", +("2907120299", +("2907130301", +("2907130399", +("2907130399", +("2907150300", +("2907150300", +("2907150300", +("2907199901", +("2907199902", +("2907199903", +("2907199999", +("2907199999", +("2907199999", +("2907199999", +("2907199999", +("2907199999", +("2907199999", +("2907210100", +("2907220100", +("2907220200", +("2907230301", +("2907230302", +("2907299900", +("2907299900", +("2907299900", +("2907299900", +("2907299900", +("2907299900", +("2908110100", +("2908199900", +("2908199900", +("2908199900", +("2908199900", +("2908199900", +("2908199900", +("2908199900", +("2908199900", +("2908910100", +("2908920100", +("2908990100", +("2908999901", +("2908999902", +("2908999999", +("2908999999", +("2908999999", +("2908999999", +("2908999999", +("2908999999", +("2908999999", +("2908999999", +("2908999999", +("2908999999", +("2909110100", +("2909199901", +("2909199902", +("2909199999", +("2909199999", +("2909200100", +("2909301001", +("2909301099", +("2909301099", +("2909301099", +("2909301099", +("2909301099", +("2909301099", +("2909301099", +("2909301099", +("2909301099", +("2909410100", +("2909430100", +("2909440100", +("2909440300", +("2909449900", +("2909449900", +("2909490100", +("2909490200", +("2909490300", +("2909490400", +("2909490500", +("2909490600", +("2909490700", +("2909490800", +("2909490900", +("2909499900", +("2909500100", +("2909509901", +("2909509901", +("2909509999", +("2909509999", +("2909509999", +("2909600100", +("2909600200", +("2909600300", +("2909600400", +("2909600500", +("2909609900", +("2910100100", +("2910200100", +("2910300100", +("2910400100", +("2910909900", +("2910909900", +("2911000400", +("2911000400", +("2911000400", +("2911000400", +("2912110100", +("2912120100", +("2912190500", +("2912199901", +("2912199902", +("2912199903", +("2912199999", +("2912199999", +("2912199999", +("2912199999", +("2912199999", +("2912199999", +("2912199999", +("2912199999", +("2912199999", +("2912210100", +("2912290200", +("2912299901", +("2912299902", +("2912299903", +("2912299999", +("2912299999", +("2912410100", +("2912420100", +("2912499901", +("2912499999", +("2912499999", +("2912499999", +("2912499999", +("2912500100", +("2912600100", +("2913000300", +("2913000300", +("2913000300", +("2914110100", +("2914120100", +("2914130100", +("2914190200", +("2914199901", +("2914199999", +("2914199999", +("2914199999", +("2914199999", +("2914199999", +("2914220100", +("2914230301", +("2914230302", +("2914290100", +("2914290200", +("2914290300", +("2914290400", +("2914299900", +("2914310100", +("2914399901", +("2914399999", +("2914399999", +("2914399999", +("2914399999", +("2914399999", +("2914399999", +("2914399999", +("2914400100", +("2914400200", +("2914409900", +("2914500401", +("2914500402", +("2914500499", +("2914500499", +("2914610100", +("2914620100", +("2914699900", +("2914699900", +("2914699900", +("2914710100", +("2914799901", +("2914799902", +("2914799903", +("2914799999", +("2915110100", +("2915120301", +("2915120399", +("2915120399", +("2915130100", +("2915210100", +("2915240100", +("2915299901", +("2915299999", +("2915299999", +("2915310100", +("2915320100", +("2915330100", +("2915360100", +("2915390200", +("2915390300", +("2915390400", +("2915390500", +("2915390900", +("2915391300", +("2915391500", +("2915391700", +("2915391800", +("2915399901", +("2915399902", +("2915399999", +("2915399999", +("2915399999", +("2915399999", +("2915399999", +("2915399999", +("2915399999", +("2915399999", +("2915400100", +("2915409900", +("2915409900", +("2915409900", +("2915409900", +("2915500300", +("2915509901", +("2915509902", +("2915509999", +("2915509999", +("2915509999", +("2915600100", +("2915600300", +("2915609901", +("2915609999", +("2915700100", +("2915700200", +("2915700300", +("2915700400", +("2915700500", +("2915700600", +("2915700700", +("2915709900", +("2915709900", +("2915709900", +("2915900100", +("2915900300", +("2915900400", +("2915900500", +("2915900600", +("2915900700", +("2915900800", +("2915900900", +("2915901000", +("2915901100", +("2915901200", +("2915901500", +("2915901600", +("2915901800", +("2915901900", +("2915902000", +("2915902200", +("2915902300", +("2915902400", +("2915902500", +("2915902600", +("2915902700", +("2915902900", +("2915903000", +("2915903100", +("2915903200", +("2915903300", +("2915909901", +("2915909902", +("2915909999", +("2915909999", +("2915909999", +("2915909999", +("2916110100", +("2916120100", +("2916120200", +("2916120300", +("2916129900", +("2916130100", +("2916140100", +("2916140200", +("2916140300", +("2916140400", +("2916149900", +("2916150500", +("2916150500", +("2916159900", +("2916159900", +("2916159900", +("2916160100", +("2916199901", +("2916199902", +("2916199903", +("2916199904", +("2916199999", +("2916199999", +("2916199999", +("2916200501", +("2916200599", +("2916200599", +("2916200599", +("2916200599", +("2916310100", +("2916310200", +("2916310300", +("2916319901", +("2916319999", +("2916319999", +("2916320301", +("2916320302", +("2916340100", +("2916390800", +("2916399901", +("2916399999", +("2916399999", +("2916399999", +("2916399999", +("2916399999", +("2916399999", +("2916399999", +("2917110200", +("2917110200", +("2917120100", +("2917130300", +("2917130300", +("2917130300", +("2917140100", +("2917190400", +("2917190800", +("2917199901", +("2917199902", +("2917199999", +("2917199999", +("2917199999", +("2917199999", +("2917199999", +("2917200401", +("2917200499", +("2917200499", +("2917200499", +("2917320100", +("2917330100", +("2917340100", +("2917349900", +("2917350100", +("2917360100", +("2917370100", +("2917390100", +("2917390200", +("2917390300", +("2917390400", +("2917390500", +("2917390600", +("2917399900", +("2918110100", +("2918120100", +("2918130500", +("2918130500", +("2918130500", +("2918130500", +("2918130500", +("2918140100", +("2918150100", +("2918150200", +("2918150500", +("2918159900", +("2918159900", +("2918159900", +("2918160301", +("2918160399", +("2918160399", +("2918170100", +("2918180100", +("2918190600", +("2918199900", +("2918199900", +("2918199900", +("2918199900", +("2918199900", +("2918199900", +("2918199900", +("2918199900", +("2918199900", +("2918199900", +("2918210200", +("2918219901", +("2918219999", +("2918220201", +("2918220299", +("2918230401", +("2918230402", +("2918230499", +("2918230499", +("2918290100", +("2918290400", +("2918299901", +("2918299902", +("2918299999", +("2918299999", +("2918299999", +("2918299999", +("2918299999", +("2918299999", +("2918299999", +("2918299999", +("2918299999", +("2918299999", +("2918299999", +("2918299999", +("2918299999", +("2918301001", +("2918301002", +("2918301099", +("2918301099", +("2918301099", +("2918301099", +("2918301099", +("2918301099", +("2918301099", +("2918301099", +("2918910100", +("2918990100", +("2918990200", +("2918990400", +("2918999901", +("2918999902", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2918999999", +("2919100100", +("2919901000", +("2919909901", +("2919909902", +("2919909903", +("2919909999", +("2919909999", +("2919909999", +("2919909999", +("2919909999", +("2919909999", +("2919909999", +("2919909999", +("2919909999", +("2920110100", +("2920199900", +("2920199900", +("2920199900", +("2920210100", +("2920220100", +("2920230100", +("2920240100", +("2920290100", +("2920299901", +("2920299902", +("2920299999", +("2920900900", +("2920909901", +("2920909902", +("2920909903", +("2920909904", +("2920909999", +("2920909999", +("2920909999", +("2921110501", +("2921110502", +("2921110503", +("2921119900", +("2921119900", +("2921120100", +("2921130100", +("2921140100", +("2921190200", +("2921190400", +("2921190500", +("2921191100", +("2921191200", +("2921199901", +("2921199902", +("2921199999", +("2921199999", +("2921199999", +("2921199999", +("2921199999", +("2921199999", +("2921199999", +("2921199999", +("2921199999", +("2921199999", +("2921210201", +("2921210299", +("2921220100", +("2921291000", +("2921299901", +("2921299902", +("2921299999", +("2921299999", +("2921299999", +("2921299999", +("2921299999", +("2921299999", +("2921299999", +("2921299999", +("2921299999", +("2921300200", +("2921309900", +("2921309900", +("2921410100", +("2921421400", +("2921421700", +("2921429901", +("2921429902", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921429999", +("2921431301", +("2921431399", +("2921431399", +("2921431399", +("2921431399", +("2921431399", +("2921431399", +("2921431399", +("2921431399", +("2921431399", +("2921431399", +("2921431399", +("2921431399", +("2921440201", +("2921440299", +("2921450800", +("2921459900", +("2921459900", +("2921459900", +("2921459900", +("2921459900", +("2921459900", +("2921459900", +("2921459900", +("2921460100", +("2921491400", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921499900", +("2921510100", +("2921510200", +("2921510300", +("2921510400", +("2921510500", +("2921510600", +("2921510700", +("2921510800", +("2921510900", +("2921519900", +("2921599900", +("2921599900", +("2921599900", +("2921599900", +("2921599900", +("2921599900", +("2921599900", +("2921599900", +("2921599900", +("2921599900", +("2921599900", +("2922110100", +("2922119900", +("2922120100", +("2922129900", +("2922140300", +("2922140300", +("2922140300", +("2922150100", +("2922160100", +("2922170100", +("2922180100", +("2922191000", +("2922191400", +("2922192000", +("2922194000", +("2922199901", +("2922199902", +("2922199903", +("2922199904", +("2922199905", +("2922199906", +("2922199907", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922199999", +("2922210301", +("2922210399", +("2922210399", +("2922299901", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922299999", +("2922310100", +("2922390900", +("2922399901", +("2922399902", +("2922399999", +("2922399999", +("2922399999", +("2922399999", +("2922399999", +("2922399999", +("2922399999", +("2922399999", +("2922399999", +("2922410201", +("2922410299", +("2922420100", +("2922429900", +("2922430100", +("2922440100", +("2922490100", +("2922490200", +("2922490300", +("2922490400", +("2922490500", +("2922490600", +("2922490700", +("2922490800", +("2922490900", +("2922491000", +("2922491100", +("2922491200", +("2922491300", +("2922491400", +("2922491500", +("2922491600", +("2922491700", +("2922491800", +("2922491900", +("2922492000", +("2922492100", +("2922492200", +("2922492300", +("2922499900", +("2922500100", +("2922509901", +("2922509902", +("2922509903", +("2922509904", +("2922509905", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2922509999", +("2923100100", +("2923100200", +("2923109900", +("2923200101", +("2923200199", +("2923300100", +("2923400100", +("2923900200", +("2923900300", +("2923909901", +("2923909902", +("2923909999", +("2923909999", +("2923909999", +("2923909999", +("2923909999", +("2923909999", +("2923909999", +("2923909999", +("2923909999", +("2924110100", +("2924129900", +("2924129900", +("2924190100", +("2924190200", +("2924190400", +("2924190500", +("2924190600", +("2924190700", +("2924190800", +("2924190900", +("2924191000", +("2924191100", +("2924191200", +("2924191300", +("2924191500", +("2924191500", +("2924199900", +("2924210801", +("2924210802", +("2924210899", +("2924210899", +("2924210899", +("2924210899", +("2924210899", +("2924210899", +("2924230100", +("2924240100", +("2924290900", +("2924299901", +("2924299902", +("2924299903", +("2924299904", +("2924299905", +("2924299906", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2924299999", +("2925110100", +("2925120100", +("2925199901", +("2925199999", +("2925199999", +("2925199999", +("2925210100", +("2925299900", +("2925299900", +("2925299900", +("2925299900", +("2925299900", +("2926100100", +("2926200100", +("2926300100", +("2926400100", +("2926909901", +("2926909902", +("2926909903", +("2926909999", +("2926909999", +("2926909999", +("2926909999", +("2926909999", +("2926909999", +("2926909999", +("2927000601", +("2927000602", +("2927000699", +("2927000699", +("2927000699", +("2927000699", +("2928000100", +("2928000200", +("2928000300", +("2928000500", +("2928000600", +("2928000700", +("2928009900", +("2928009900", +("2929100100", +("2929100200", +("2929100400", +("2929100500", +("2929100600", +("2929109901", +("2929109999", +("2929909900", +("2929909900", +("2929909900", +("2930200500", +("2930200600", +("2930200700", +("2930209900", +("2930209900", +("2930209900", +("2930209900", +("2930209900", +("2930209900", +("2930209900", +("2930300201", +("2930300299", +("2930400100", +("2930600100", +("2930700100", +("2930809900", +("2930901100", +("2930903100", +("2930909901", +("2930909902", +("2930909903", +("2930909904", +("2930909905", +("2930909906", +("2930909907", +("2930909908", +("2930909909", +("2930909910", +("2930909911", +("2930909912", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2930909999", +("2931100100", +("2931200100", +("2931310100", +("2931320100", +("2931330100", +("2931340100", +("2931350100", +("2931360100", +("2931370100", +("2931380100", +("2931390100", +("2931399901", +("2931399902", +("2931399903", +("2931399904", +("2931399905", +("2931399906", +("2931399907", +("2931399908", +("2931399999", +("2931900300", +("2931900900", +("2931909900", +("2931909900", +("2931909900", +("2931909900", +("2931909900", +("2931909900", +("2931909900", +("2931909900", +("2931909900", +("2931909900", +("2931909900", +("2932110100", +("2932120100", +("2932130100", +("2932140100", +("2932190200", +("2932199901", +("2932199901", +("2932199902", +("2932199999", +("2932199999", +("2932201101", +("2932201102", +("2932201103", +("2932201199", +("2932201199", +("2932201199", +("2932201199", +("2932201199", +("2932201199", +("2932201199", +("2932201199", +("2932910100", +("2932920100", +("2932930100", +("2932940100", +("2932950100", +("2932999901", +("2932999902", +("2932999903", +("2932999904", +("2932999999", +("2932999999", +("2932999999", +("2932999999", +("2932999999", +("2932999999", +("2932999999", +("2933110300", +("2933110300", +("2933110300", +("2933190400", +("2933190800", +("2933199991", +("2933199999", +("2933199999", +("2933199999", +("2933199999", +("2933199999", +("2933199999", +("2933199999", +("2933210100", +("2933299901", +("2933299901", +("2933299901", +("2933299902", +("2933299902", +("2933299902", +("2933299902", +("2933299902", +("2933299903", +("2933299904", +("2933299905", +("2933299999", +("2933299999", +("2933299999", +("2933299999", +("2933299999", +("2933299999", +("2933310300", +("2933310300", +("2933320100", +("2933329900", +("2933330301", +("2933330302", +("2933390200", +("2933390600", +("2933391700", +("2933392200", +("2933392400", +("2933392400", +("2933399901", +("2933399902", +("2933399903", +("2933399904", +("2933399905", +("2933399906", +("2933399907", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933399999", +("2933410100", +("2933490100", +("2933490400", +("2933491000", +("2933499901", +("2933499902", +("2933499999", +("2933499999", +("2933499999", +("2933499999", +("2933499999", +("2933499999", +("2933499999", +("2933499999", +("2933499999", +("2933520100", +("2933530100", +("2933540100", +("2933550300", +("2933550300", +("2933550300", +("2933590700", +("2933599901", +("2933599901", +("2933599902", +("2933599902", +("2933599902", +("2933599903", +("2933599904", +("2933599905", +("2933599906", +("2933599907", +("2933599908", +("2933599999", +("2933599999", +("2933599999", +("2933599999", +("2933599999", +("2933599999", +("2933599999", +("2933599999", +("2933599999", +("2933610100", +("2933691200", +("2933691500", +("2933699901", +("2933699902", +("2933699903", +("2933699904", +("2933699991", +("2933699991", +("2933699991", +("2933699991", +("2933699991", +("2933699991", +("2933699999", +("2933699999", +("2933699999", +("2933699999", +("2933710100", +("2933720100", +("2933790501", +("2933790502", +("2933790599", +("2933790599", +("2933790599", +("2933910301", +("2933910302", +("2933990400", +("2933991000", +("2933992600", +("2933999901", +("2933999902", +("2933999902", +("2933999903", +("2933999904", +("2933999905", +("2933999906", +("2933999907", +("2933999908", +("2933999909", +("2933999909", +("2933999910", +("2933999910", +("2933999911", +("2933999912", +("2933999913", +("2933999914", +("2933999915", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2933999999", +("2934100901", +("2934100999", +("2934100999", +("2934100999", +("2934100999", +("2934100999", +("2934100999", +("2934100999", +("2934100999", +("2934200500", +("2934209901", +("2934209902", +("2934209999", +("2934209999", +("2934209999", +("2934209999", +("2934300200", +("2934300200", +("2934910100", +("2934990100", +("2934991000", +("2934991400", +("2934992400", +("2934994100", +("2934999901", +("2934999902", +("2934999903", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2934999999", +("2935100100", +("2935200100", +("2935300100", +("2935400100", +("2935500100", +("2935900300", +("2935900700", +("2935902000", +("2935903100", +("2935909901", +("2935909902", +("2935909903", +("2935909904", +("2935909905", +("2935909906", +("2935909907", +("2935909908", +("2935909909", +("2935909910", +("2935909911", +("2935909912", +("2935909913", +("2935909914", +("2935909915", +("2935909916", +("2935909917", +("2935909918", +("2935909919", +("2935909920", +("2935909921", +("2935909922", +("2935909923", +("2935909924", +("2935909925", +("2935909926", +("2935909927", +("2935909928", +("2935909929", +("2935909930", +("2935909931", +("2935909932", +("2935909933", +("2935909999", +("2936210401", +("2936210499", +("2936210499", +("2936220401", +("2936220499", +("2936220499", +("2936220499", +("2936230301", +("2936230399", +("2936230399", +("2936240301", +("2936240302", +("2936240399", +("2936250201", +("2936250299", +("2936260100", +("2936269900", +("2936269900", +("2936270201", +("2936270299", +("2936280301", +("2936280399", +("2936290300", +("2936290400", +("2936299901", +("2936299902", +("2936299903", +("2936299999", +("2936299999", +("2936299999", +("2936299999", +("2936909900", +("2936909900", +("2936909900", +("2936909900", +("2936909900", +("2937110100", +("2937120201", +("2937120299", +("2937199901", +("2937199999", +("2937199999", +("2937199999", +("2937199999", +("2937199999", +("2937210501", +("2937210599", +("2937210599", +("2937210599", +("2937221100", +("2937221100", +("2937229901", +("2937229902", +("2937229999", +("2937229999", +("2937229999", +("2937229999", +("2937229999", +("2937229999", +("2937229999", +("2937230400", +("2937230500", +("2937230700", +("2937230800", +("2937231000", +("2937231100", +("2937231700", +("2937231800", +("2937232100", +("2937232200", +("2937239901", +("2937239902", +("2937239903", +("2937239904", +("2937239905", +("2937239906", +("2937239999", +("2937239999", +("2937239999", +("2937239999", +("2937239999", +("2937239999", +("2937239999", +("2937239999", +("2937290900", +("2937291700", +("2937291900", +("2937292400", +("2937292900", +("2937293200", +("2937293300", +("2937293600", +("2937299901", +("2937299902", +("2937299903", +("2937299904", +("2937299905", +("2937299906", +("2937299907", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937299999", +("2937500200", +("2937500200", +("2937909901", +("2937909999", +("2937909999", +("2937909999", +("2937909999", +("2938100100", +("2938909901", +("2938909902", +("2938909999", +("2938909999", +("2938909999", +("2938909999", +("2938909999", +("2938909999", +("2938909999", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939119900", +("2939199991", +("2939199999", +("2939199999", +("2939199999", +("2939199999", +("2939199999", +("2939199999", +("2939200200", +("2939200200", +("2939300401", +("2939300402", +("2939300499", +("2939410100", +("2939420100", +("2939430100", +("2939440100", +("2939449900", +("2939499900", +("2939510100", +("2939599900", +("2939599900", +("2939599900", +("2939610100", +("2939620100", +("2939630100", +("2939699900", +("2939699900", +("2939710201", +("2939710299", +("2939799901", +("2939799902", +("2939799903", +("2939799904", +("2939799905", +("2939799906", +("2939799907", +("2939799908", +("2939799909", +("2939799910", +("2939799911", +("2939799912", +("2939799913", +("2939799914", +("2939799915", +("2939799916", +("2939799917", +("2939799918", +("2939799999", +("2939809900", +("2940000501", +("2940000599", +("2940000599", +("2940000599", +("2940000599", +("2941100300", +("2941100700", +("2941100800", +("2941101200", +("2941109901", +("2941109902", +("2941109999", +("2941109999", +("2941109999", +("2941109999", +("2941109999", +("2941109999", +("2941109999", +("2941109999", +("2941200100", +("2941300401", +("2941300499", +("2941300499", +("2941300499", +("2941400401", +("2941400402", +("2941400403", +("2941500200", +("2941500200", +("2941901700", +("2941909901", +("2941909902", +("2941909903", +("2941909904", +("2941909905", +("2941909906", +("2941909907", +("2941909908", +("2941909909", +("2941909910", +("2941909911", +("2941909999", +("2941909999", +("2941909999", +("2941909999", +("2941909999", +("2941909999", +("2942009900", +("3001200300", +("3001200400", +("3001200500", +("3001200600", +("3001200600", +("3001209900", +("3001900100", +("3001900300", +("3001900400", +("3001900500", +("3001900600", +("3001900800", +("3001909901", +("3001909999", +("3001909999", +("3002110100", +("3002120100", +("3002120400", +("3002120700", +("3002120800", +("3002120900", +("3002129901", +("3002129902", +("3002129903", +("3002129904", +("3002129905", +("3002129906", +("3002129907", +("3002129908", +("3002129909", +("3002129910", +("3002129999", +("3002130100", +("3002130500", +("3002139901", +("3002139999", +("3002140100", +("3002149900", +("3002150200", +("3002150300", +("3002159901", +("3002159999", +("3002199900", +("3002200200", +("3002200600", +("3002200700", +("3002200800", +("3002200900", +("3002209901", +("3002209902", +("3002209903", +("3002209999", +("3002209999", +("3002300301", +("3002300399", +("3002300399", +("3002900100", +("3002909900", +("3002909900", +("3002909900", +("3002909900", +("3003100100", +("3003200100", +("3003209900", +("3003310200", +("3003310200", +("3003390100", +("3003399901", +("3003399999", +("3003410100", +("3003420100", +("3003430100", +("3003490300", +("3003499901", +("3003499999", +("3003600100", +("3003900100", +("3003900200", +("3003900300", +("3003900400", +("3003900800", +("3003900900", +("3003901000", +("3003901100", +("3003901200", +("3003901300", +("3003901400", +("3003901500", +("3003901600", +("3003901700", +("3003901800", +("3003901900", +("3003902000", +("3003902100", +("3003902200", +("3003902200", +("3003909900", +("3004100100", +("3004109900", +("3004200100", +("3004200200", +("3004200300", +("3004209900", +("3004310201", +("3004310299", +("3004320100", +("3004329900", +("3004390100", +("3004390200", +("3004390300", +("3004390400", +("3004390500", +("3004399901", +("3004399999", +("3004410100", +("3004420100", +("3004430100", +("3004490300", +("3004490500", +("3004499901", +("3004499999", +("3004500100", +("3004500200", +("3004509901", +("3004509999", +("3004609900", +("3004900100", +("3004900200", +("3004900400", +("3004900500", +("3004900600", +("3004900700", +("3004900800", +("3004900900", +("3004901100", +("3004901200", +("3004901300", +("3004901400", +("3004901500", +("3004901600", +("3004901700", +("3004901800", +("3004901900", +("3004902000", +("3004902100", +("3004902200", +("3004902300", +("3004902400", +("3004902500", +("3004902600", +("3004902700", +("3004902800", +("3004902900", +("3004903000", +("3004903100", +("3004903200", +("3004903400", +("3004903500", +("3004903600", +("3004903700", +("3004903800", +("3004903900", +("3004904000", +("3004904100", +("3004904300", +("3004904400", +("3004904500", +("3004904600", +("3004904700", +("3004904800", +("3004904900", +("3004905000", +("3004905200", +("3004909901", +("3004909902", +("3004909999", +("3005100100", +("3005100200", +("3005109900", +("3005900100", +("3005900300", +("3005909901", +("3005909999", +("3006100301", +("3006100302", +("3006109900", +("3006200100", +("3006209900", +("3006300100", +("3006300200", +("3006309900", +("3006400200", +("3006400300", +("3006409901", +("3006409999", +("3006500100", +("3006600100", +("3006700100", +("3006910100", +("3006920100", +("3101000100", +("3102100100", +("3102210100", +("3102299900", +("3102300201", +("3102300299", +("3102400100", +("3102500100", +("3102600100", +("3102800100", +("3102900200", +("3102900200", +("3103110100", +("3103199900", +("3103909900", +("3103909900", +("3104200100", +("3104300201", +("3104300299", +("3104909900", +("3104909900", +("3105100100", +("3105200100", +("3105300100", +("3105400100", +("3105510100", +("3105599900", +("3105600100", +("3105909901", +("3105909999", +("3201100100", +("3201200100", +("3201909901", +("3201909999", +("3202100100", +("3202909900", +("3203000301", +("3203000399", +("3203000399", +("3204110100", +("3204119901", +("3204119902", +("3204119991", +("3204119999", +("3204120701", +("3204120702", +("3204120703", +("3204120704", +("3204120799", +("3204120799", +("3204120799", +("3204130501", +("3204130502", +("3204130503", +("3204130599", +("3204130599", +("3204140501", +("3204140502", +("3204140503", +("3204140599", +("3204140599", +("3204150201", +("3204150299", +("3204160501", +("3204160502", +("3204160503", +("3204160504", +("3204160599", +("3204170100", +("3204170200", +("3204170300", +("3204170400", +("3204170500", +("3204170600", +("3204170700", +("3204170800", +("3204171000", +("3204179901", +("3204179999", +("3204190400", +("3204190600", +("3204199901", +("3204199902", +("3204199903", +("3204199904", +("3204199905", +("3204199999", +("3204199999", +("3204199999", +("3204200100", +("3204200200", +("3204209900", +("3204909901", +("3204909999", +("3204909999", +("3205000200", +("3205009900", +("3205009900", +("3206110100", +("3206199900", +("3206200100", +("3206200200", +("3206200300", +("3206410201", +("3206410299", +("3206420200", +("3206420200", +("3206490100", +("3206490200", +("3206490300", +("3206490400", +("3206490500", +("3206490700", +("3206490800", +("3206499901", +("3206499999", +("3206500100", +("3206509900", +("3206509900", +("3207100200", +("3207100200", +("3207200100", +("3207209900", +("3207300100", +("3207400301", +("3207400302", +("3207400399", +("3208100201", +("3208100299", +("3208200301", +("3208200399", +("3208200399", +("3208909900", +("3208909900", +("3209100201", +("3209100299", +("3209909900", +("3210000400", +("3210000400", +("3210000400", +("3210000400", +("3211000200", +("3211000200", +("3212100100", +("3212909901", +("3212909902", +("3212909999", +("3213100100", +("3213909900", +("3214100100", +("3214100200", +("3214909900", +("3215110301", +("3215110302", +("3215110399", +("3215190200", +("3215199901", +("3215199999", +("3215199999", +("3215900200", +("3215900300", +("3215909901", +("3215909999", +("3301120100", +("3301130201", +("3301130299", +("3301190701", +("3301190702", +("3301190703", +("3301190704", +("3301199901", +("3301199999", +("3301199999", +("3301240100", +("3301259900", +("3301299901", +("3301299902", +("3301299903", +("3301299999", +("3301299999", +("3301299999", +("3301299999", +("3301299999", +("3301300100", +("3301900100", +("3301900400", +("3301900500", +("3301900600", +("3301900701", +("3301900702", +("3301909900", +("3302100100", +("3302100200", +("3302109900", +("3302909900", +("3303000100", +("3303009900", +("3304100100", +("3304200100", +("3304300100", +("3304910100", +("3304990100", +("3304999900", +("3305100100", +("3305200100", +("3305300100", +("3305909900", +("3306100100", +("3306200201", +("3306200299", +("3306909900", +("3307100100", +("3307200100", +("3307300100", +("3307410100", +("3307499900", +("3307909900", +("3401110100", +("3401199900", +("3401200100", +("3401300100", +("3402110200", +("3402119901", +("3402119902", +("3402119999", +("3402120300", +("3402129901", +("3402129999", +("3402129999", +("3402130100", +("3402130200", +("3402130300", +("3402139900", +("3402199900", +("3402200100", +("3402200200", +("3402200300", +("3402200400", +("3402200500", +("3402209900", +("3402900100", +("3402900200", +("3402909900", +("3403110100", +("3403190100", +("3403199900", +("3403910100", +("3403999900", +("3404200100", +("3404900100", +("3404900200", +("3404909900", +("3405100100", +("3405200200", +("3405200200", +("3405300100", +("3405400100", +("3405900100", +("3405909900", +("3406000100", +("3407000300", +("3407000400", +("3407000501", +("3407000502", +("3407009900", +("3501100100", +("3501900100", +("3501900300", +("3501909901", +("3501909999", +("3502110100", +("3502199900", +("3502200100", +("3502909900", +("3503000100", +("3503009901", +("3503009902", +("3503009999", +("3503009999", +("3504000701", +("3504000702", +("3504000799", +("3504000799", +("3504000799", +("3504000799", +("3504000799", +("3505100100", +("3505200100", +("3506100200", +("3506109901", +("3506109999", +("3506910100", +("3506919901", +("3506919902", +("3506919903", +("3506919999", +("3506990100", +("3506999900", +("3507100100", +("3507900200", +("3507900600", +("3507900800", +("3507900900", +("3507909901", +("3507909902", +("3507909903", +("3507909999", +("3507909999", +("3507909999", +("3507909999", +("3507909999", +("3507909999", +("3601000100", +("3601009900", +("3602000200", +("3602000300", +("3602009900", +("3602009900", +("3603000100", +("3603000200", +("3603009900", +("3604100100", +("3604900100", +("3605000100", +("3606100100", +("3606900100", +("3606900200", +("3606909900", +("3701100200", +("3701109901", +("3701109999", +("3701200100", +("3701300100", +("3701910100", +("3701990100", +("3701990400", +("3701999901", +("3701999902", +("3701999999", +("3701999999", +("3702100100", +("3702109900", +("3702310200", +("3702310200", +("3702320100", +("3702329900", +("3702399900", +("3702399900", +("3702410100", +("3702419900", +("3702420100", +("3702420200", +("3702429900", +("3702430100", +("3702440100", +("3702449900", +("3702520100", +("3702530100", +("3702540100", +("3702550100", +("3702560100", +("3702960100", +("3702970100", +("3702980100", +("3703100200", +("3703100200", +("3703200100", +("3703209900", +("3703900100", +("3703900200", +("3703900300", +("3703909900", +("3704000100", +("3705000100", +("3705000200", +("3705000300", +("3705000400", +("3705009900", +("3706100100", +("3706100200", +("3706900100", +("3706909900", +("3707100100", +("3707900201", +("3707900299", +("3801100100", +("3801109900", +("3801200100", +("3801300201", +("3801300299", +("3801900100", +("3801909900", +("3801909900", +("3801909900", +("3801909900", +("3802100100", +("3802900601", +("3802900602", +("3802909901", +("3802909999", +("3802909999", +("3802909999", +("3803000100", +("3804000201", +("3804000299", +("3805100201", +("3805100299", +("3805900100", +("3805909900", +("3806100100", +("3806109900", +("3806200100", +("3806300301", +("3806300399", +("3806300399", +("3806900100", +("3806909900", +("3807000100", +("3808590100", +("3808599901", +("3808599902", +("3808599999", +("3808599999", +("3808599999", +("3808599999", +("3808599999", +("3808610100", +("3808620100", +("3808699900", +("3808919901", +("3808919999", +("3808919999", +("3808919999", +("3808920301", +("3808920302", +("3808920399", +("3808930401", +("3808930402", +("3808930499", +("3808940100", +("3808940200", +("3808949900", +("3808999900", +("3808999900", +("3809100100", +("3809910100", +("3809919900", +("3809920100", +("3809920200", +("3809929901", +("3809929999", +("3809930100", +("3810100100", +("3810909901", +("3810909999", +("3811110200", +("3811110200", +("3811199900", +("3811210100", +("3811210200", +("3811210300", +("3811210400", +("3811210500", +("3811210600", +("3811210700", +("3811219900", +("3811290400", +("3811290500", +("3811290600", +("3811299900", +("3811299900", +("3811299900", +("3811299900", +("3811900100", +("3811909900", +("3812100100", +("3812200100", +("3812310100", +("3812390200", +("3812390300", +("3812390400", +("3812390500", +("3812399901", +("3812399999", +("3813000100", +("3814000100", +("3815110301", +("3815110399", +("3815110399", +("3815120301", +("3815120399", +("3815120399", +("3815190100", +("3815199900", +("3815900200", +("3815909901", +("3815909902", +("3815909999", +("3816000200", +("3816000600", +("3816000700", +("3816009901", +("3816009902", +("3816009999", +("3816009999", +("3816009999", +("3817000100", +("3817000200", +("3817000300", +("3817009900", +("3817009900", +("3818000100", +("3819000300", +("3819000401", +("3819000402", +("3819009900", +("3820000100", +("3821000100", +("3822000300", +("3822000500", +("3822009901", +("3822009902", +("3822009999", +("3822009999", +("3823110100", +("3823120301", +("3823120302", +("3823130100", +("3823190300", +("3823199901", +("3823199999", +("3823199999", +("3823700201", +("3823700299", +("3824100100", +("3824300201", +("3824300299", +("3824400100", +("3824409900", +("3824500100", +("3824500200", +("3824500300", +("3824509900", +("3824600100", +("3824710100", +("3824720100", +("3824730100", +("3824740100", +("3824750100", +("3824760100", +("3824770100", +("3824780100", +("3824799900", +("3824810100", +("3824820100", +("3824830100", +("3824840100", +("3824850100", +("3824860100", +("3824870100", +("3824880100", +("3824910100", +("3824990100", +("3824990200", +("3824990300", +("3824990600", +("3824990800", +("3824990900", +("3824991000", +("3824991100", +("3824991300", +("3824991400", +("3824991600", +("3824991800", +("3824991900", +("3824992000", +("3824992200", +("3824992300", +("3824992500", +("3824992600", +("3824992800", +("3824992900", +("3824993000", +("3824993100", +("3824993200", +("3824993300", +("3824993500", +("3824993700", +("3824993800", +("3824994000", +("3824994100", +("3824994300", +("3824994400", +("3824994500", +("3824994600", +("3824994700", +("3824994800", +("3824994900", +("3824995000", +("3824995100", +("3824995200", +("3824995300", +("3824995400", +("3824995500", +("3824995600", +("3824995800", +("3824995900", +("3824996000", +("3824996100", +("3824996200", +("3824996300", +("3824996400", +("3824996500", +("3824996600", +("3824996700", +("3824996800", +("3824996900", +("3824997000", +("3824997200", +("3824997300", +("3824997400", +("3824997500", +("3824997600", +("3824999901", +("3824999902", +("3824999903", +("3824999904", +("3824999999", +("3824999999", +("3824999999", +("3824999999", +("3824999999", +("3824999999", +("3824999999", +("3824999999", +("3824999999", +("3824999999", +("3824999999", +("3824999999", +("3824999999", +("3825100100", +("3825200100", +("3825300100", +("3825410100", +("3825499900", +("3825500100", +("3825610300", +("3825610300", +("3825610300", +("3825699900", +("3825699900", +("3825909900", +("3826000100", +("3901100301", +("3901100302", +("3901200100", +("3901300100", +("3901400100", +("3901900100", +("3901909901", +("3901909902", +("3901909999", +("3902100100", +("3902109900", +("3902200201", +("3902200299", +("3902300100", +("3902309900", +("3902900100", +("3902909900", +("3903110100", +("3903199901", +("3903199999", +("3903200100", +("3903300100", +("3903900100", +("3903900200", +("3903900300", +("3903900500", +("3903909901", +("3903909999", +("3904100100", +("3904100200", +("3904100300", +("3904100400", +("3904109900", +("3904210100", +("3904219901", +("3904219999", +("3904220100", +("3904300100", +("3904309900", +("3904400100", +("3904409900", +("3904500100", +("3904610100", +("3904699900", +("3904909900", +("3905120100", +("3905190100", +("3905190200", +("3905190300", +("3905199900", +("3905210100", +("3905290100", +("3905290200", +("3905299900", +("3905300100", +("3905910100", +("3905999901", +("3905999902", +("3905999999", +("3906100201", +("3906100299", +("3906900100", +("3906900200", +("3906900300", +("3906900400", +("3906900500", +("3906900600", +("3906900700", +("3906900800", +("3906900900", +("3906901000", +("3906909900", +("3907100501", +("3907100502", +("3907100599", +("3907100599", +("3907100599", +("3907200100", +("3907200200", +("3907200300", +("3907200400", +("3907200500", +("3907200600", +("3907200700", +("3907209900", +("3907300200", +("3907309901", +("3907309999", +("3907400401", +("3907400402", +("3907400403", +("3907400499", +("3907500200", +("3907509901", +("3907509999", +("3907610100", +("3907690100", +("3907699900", +("3907700100", +("3907910100", +("3907919900", +("3907990100", +("3907990200", +("3907990300", +("3907990400", +("3907990500", +("3907990600", +("3907990700", +("3907990800", +("3907990900", +("3907991000", +("3907991100", +("3907999900", +("3908100100", +("3908100300", +("3908100400", +("3908100500", +("3908100600", +("3908100700", +("3908100800", +("3908900100", +("3908900200", +("3908900300", +("3908909900", +("3909100100", +("3909200200", +("3909209901", +("3909209999", +("3909310100", +("3909390100", +("3909399900", +("3909400100", +("3909400300", +("3909409901", +("3909409902", +("3909409999", +("3909500400", +("3909500500", +("3909509901", +("3909509902", +("3909509903", +("3909509999", +("3910000100", +("3910000200", +("3910000300", +("3910000400", +("3910000500", +("3910009900", +("3911100100", +("3911900100", +("3911900200", +("3911900300", +("3911900400", +("3911900500", +("3911900600", +("3911900700", +("3911909900", +("3912110100", +("3912120100", +("3912200201", +("3912200299", +("3912310100", +("3912390100", +("3912390200", +("3912390300", +("3912399901", +("3912399902", +("3912399999", +("3912900100", +("3912900200", +("3912909900", +("3913100601", +("3913100602", +("3913100603", +("3913100699", +("3913100699", +("3913100699", +("3913900200", +("3913900500", +("3913900600", +("3913909901", +("3913909902", +("3913909903", +("3913909999", +("3913909999", +("3913909999", +("3914000100", +("3914009900", +("3915100100", +("3915200100", +("3915300100", +("3915900100", +("3915909901", +("3915909999", +("3916100201", +("3916100299", +("3916200300", +("3916200300", +("3916200300", +("3916900500", +("3916900500", +("3916900500", +("3916900500", +("3916900500", +("3917100501", +("3917100502", +("3917100503", +("3917100599", +("3917100599", +("3917210301", +("3917210302", +("3917210399", +("3917220301", +("3917220399", +("3917220399", +("3917230401", +("3917230402", +("3917230499", +("3917230499", +("3917290601", +("3917290699", +("3917290699", +("3917290699", +("3917290699", +("3917290699", +("3917310100", +("3917320300", +("3917320300", +("3917320300", +("3917330100", +("3917339900", +("3917399900", +("3917400100", +("3918100201", +("3918100299", +("3918909900", +("3919100100", +("3919909900", +("3920100501", +("3920100502", +("3920100503", +("3920100504", +("3920100599", +("3920200501", +("3920200502", +("3920200503", +("3920200504", +("3920200599", +("3920300401", +("3920300402", +("3920300403", +("3920300499", +("3920430301", +("3920430302", +("3920430399", +("3920499901", +("3920499902", +("3920499999", +("3920510100", +("3920599901", +("3920599999", +("3920610100", +("3920620200", +("3920629901", +("3920629999", +("3920630301", +("3920630399", +("3920630399", +("3920699900", +("3920710100", +("3920730201", +("3920730299", +("3920790201", +("3920790299", +("3920910100", +("3920920201", +("3920920299", +("3920930100", +("3920940100", +("3920990200", +("3920990200", +("3921110100", +("3921120100", +("3921130201", +("3921130299", +("3921140100", +("3921190201", +("3921190299", +("3921900900", +("3921909901", +("3921909902", +("3921909903", +("3921909904", +("3921909999", +("3921909999", +("3921909999", +("3921909999", +("3921909999", +("3922100100", +("3922200100", +("3922909900", +("3923100301", +("3923100302", +("3923210100", +("3923290301", +("3923290302", +("3923290399", +("3923300201", +("3923300299", +("3923400100", +("3923400200", +("3923409900", +("3923500100", +("3923909900", +("3924100100", +("3924900100", +("3924909900", +("3925100100", +("3925200100", +("3925300100", +("3925909900", +("3926100100", +("3926200100", +("3926209900", +("3926209900", +("3926300201", +("3926300299", +("3926400100", +("3926900100", +("3926900400", +("3926900500", +("3926900600", +("3926900700", +("3926900800", +("3926901100", +("3926901300", +("3926901400", +("3926901500", +("3926901800", +("3926901900", +("3926902000", +("3926902400", +("3926902700", +("3926902900", +("3926909901", +("3926909902", +("3926909903", +("3926909904", +("3926909905", +("3926909906", +("3926909907", +("3926909908", +("3926909909", +("3926909910", +("3926909911", +("3926909912", +("3926909999", +("3926909999", +("3926909999", +("3926909999", +("3926909999", +("3926909999", +("3926909999", +("3926909999", +("4001100100", +("4001210100", +("4001220100", +("4001299900", +("4001300300", +("4001300300", +("4001300300", +("4002110200", +("4002119901", +("4002119999", +("4002190100", +("4002190200", +("4002190300", +("4002199900", +("4002200100", +("4002310100", +("4002319900", +("4002390100", +("4002399900", +("4002410100", +("4002499901", +("4002499999", +("4002510100", +("4002590100", +("4002590200", +("4002590300", +("4002599900", +("4002600200", +("4002600200", +("4002700100", +("4002800100", +("4002910100", +("4002919901", +("4002919999", +("4002990100", +("4002999900", +("4003000100", +("4004000100", +("4004000200", +("4004009900", +("4005100100", +("4005200200", +("4005200200", +("4005910401", +("4005910402", +("4005910499", +("4005910499", +("4005999900", +("4006100100", +("4006900100", +("4006900200", +("4006900300", +("4006900400", +("4006909900", +("4007000100", +("4008110100", +("4008199901", +("4008199999", +("4008210201", +("4008210299", +("4008299901", +("4008299999", +("4008299999", +("4009110200", +("4009110200", +("4009120300", +("4009120300", +("4009120300", +("4009210501", +("4009210502", +("4009210502", +("4009210599", +("4009220501", +("4009220599", +("4009220599", +("4009220599", +("4009220599", +("4009220599", +("4009310601", +("4009310602", +("4009310699", +("4009310699", +("4009310699", +("4009320501", +("4009320502", +("4009320599", +("4009320599", +("4009320599", +("4009410400", +("4009410400", +("4009410400", +("4009410400", +("4009420300", +("4009420300", +("4009420300", +("4010110201", +("4010110299", +("4010120301", +("4010120302", +("4010120399", +("4010199901", +("4010199999", +("4010199999", +("4010199999", +("4010199999", +("4010310100", +("4010320100", +("4010330100", +("4010340100", +("4010350200", +("4010350200", +("4010360200", +("4010360200", +("4010399901", +("4010399902", +("4010399903", +("4010399999", +("4010399999", +("4011101001", +("4011101002", +("4011101003", +("4011101004", +("4011101005", +("4011101006", +("4011101007", +("4011101008", +("4011101099", +("4011200400", +("4011200500", +("4011200601", +("4011200602", +("4011300100", +("4011400100", +("4011500100", +("4011700100", +("4011700200", +("4011700300", +("4011709900", +("4011709900", +("4011800100", +("4011800200", +("4011800300", +("4011800400", +("4011800500", +("4011800600", +("4011809391", +("4011809391", +("4011809392", +("4011809392", +("4011900100", +("4011900200", +("4011909900", +("4011909900", +("4012110100", +("4012120100", +("4012130100", +("4012199900", +("4012200100", +("4012209901", +("4012209999", +("4012900200", +("4012909901", +("4012909999", +("4012909999", +("4013100100", +("4013200100", +("4013900100", +("4013900200", +("4013900300", +("4013909900", +("4014100100", +("4014900100", +("4014900200", +("4014909900", +("4015110100", +("4015199900", +("4015900100", +("4015900200", +("4015900300", +("4015909900", +("4015909900", +("4016100100", +("4016910100", +("4016920100", +("4016929900", +("4016930401", +("4016930402", +("4016930403", +("4016930499", +("4016940200", +("4016949901", +("4016949999", +("4016950100", +("4016950200", +("4016959900", +("4016990100", +("4016990400", +("4016999901", +("4016999902", +("4016999903", +("4016999904", +("4016999905", +("4016999906", +("4016999907", +("4016999999", +("4016999999", +("4017000300", +("4017009901", +("4017009999", +("4017009999", +("4101200301", +("4101200302", +("4101500301", +("4101500399", +("4101500399", +("4101900301", +("4101900399", +("4101900399", +("4102100100", +("4102210100", +("4102299900", +("4103200100", +("4103209900", +("4103300100", +("4103909901", +("4103909999", +("4103909999", +("4103909999", +("4104110401", +("4104110402", +("4104110499", +("4104110499", +("4104199901", +("4104199999", +("4104199999", +("4104199999", +("4104410201", +("4104410299", +("4104499901", +("4104499999", +("4105100401", +("4105100499", +("4105100499", +("4105100499", +("4105300100", +("4106210401", +("4106210499", +("4106210499", +("4106210499", +("4106220100", +("4106310100", +("4106320100", +("4106400200", +("4106400200", +("4106910100", +("4106920100", +("4107110201", +("4107110299", +("4107120201", +("4107120299", +("4107199900", +("4107199900", +("4107910100", +("4107920100", +("4107999900", +("4107999900", +("4112000100", +("4113100100", +("4113200100", +("4113300100", +("4113909901", +("4113909999", +("4114100100", +("4114200100", +("4115100100", +("4115200100", +("4201000100", +("4202110100", +("4202120301", +("4202120302", +("4202199900", +("4202210100", +("4202220301", +("4202220302", +("4202299900", +("4202310100", +("4202320301", +("4202320302", +("4202399900", +("4202910100", +("4202920401", +("4202920402", +("4202920403", +("4202999900", +("4203100100", +("4203109900", +("4203210100", +("4203290100", +("4203299900", +("4203300200", +("4203300200", +("4203400100", +("4203409900", +("4205000200", +("4205009901", +("4205009999", +("4206000100", +("4206009900", +("4206009900", +("4301100100", +("4301300100", +("4301600100", +("4301800800", +("4301800800", +("4301800800", +("4301800800", +("4301800800", +("4301800800", +("4301800800", +("4301800800", +("4301900100", +("4302110100", +("4302199900", +("4302199900", +("4302199900", +("4302199900", +("4302200200", +("4302200200", +("4302300200", +("4302300200", +("4303100100", +("4303909900", +("4304000100", +("4401110100", +("4401120100", +("4401210100", +("4401220100", +("4401310100", +("4401399900", +("4401400100", +("4402100100", +("4402909900", +("4403110100", +("4403120100", +("4403210100", +("4403220100", +("4403230100", +("4403240100", +("4403250100", +("4403269900", +("4403410100", +("4403499900", +("4403499900", +("4403499900", +("4403499900", +("4403910100", +("4403930100", +("4403940100", +("4403950100", +("4403960100", +("4403970100", +("4403980100", +("4403999900", +("4404100200", +("4404100200", +("4404200100", +("4404200200", +("4404200300", +("4404200400", +("4404209900", +("4405000301", +("4405000302", +("4406110100", +("4406120100", +("4406910100", +("4406920100", +("4407110100", +("4407110300", +("4407119901", +("4407119999", +("4407120100", +("4407120300", +("4407129901", +("4407129999", +("4407190200", +("4407190300", +("4407199901", +("4407199999", +("4407210301", +("4407210399", +("4407210399", +("4407220201", +("4407220299", +("4407250100", +("4407260100", +("4407270100", +("4407280100", +("4407299901", +("4407299901", +("4407299902", +("4407299999", +("4407299999", +("4407910100", +("4407920200", +("4407920200", +("4407930100", +("4407940100", +("4407950301", +("4407950399", +("4407950399", +("4407960100", +("4407970100", +("4407999901", +("4407999902", +("4407999999", +("4407999999", +("4408100301", +("4408100302", +("4408310100", +("4408399900", +("4408399900", +("4408399900", +("4408909901", +("4408909999", +("4409100200", +("4409109901", +("4409109999", +("4409210300", +("4409210300", +("4409210300", +("4409220100", +("4409299901", +("4409299999", +("4409299999", +("4410110401", +("4410110402", +("4410110403", +("4410110499", +("4410120201", +("4410120299", +("4410199901", +("4410199999", +("4410199999", +("4410199999", +("4410900100", +("4410909900", +("4411120100", +("4411129901", +("4411129902", +("4411129903", +("4411129904", +("4411129999", +("4411130100", +("4411139901", +("4411139902", +("4411139999", +("4411139999", +("4411139999", +("4411140100", +("4411140300", +("4411149901", +("4411149902", +("4411149999", +("4411149999", +("4411920201", +("4411920299", +("4411930400", +("4411930400", +("4411930400", +("4411930400", +("4411940400", +("4411940400", +("4411940400", +("4411940400", +("4412100100", +("4412310100", +("4412319900", +("4412319900", +("4412330100", +("4412340100", +("4412390201", +("4412390299", +("4412940100", +("4412949900", +("4412949900", +("4412990100", +("4412990200", +("4412999900", +("4413000100", +("4413000200", +("4413009900", +("4414000100", +("4415100100", +("4415200201", +("4415200299", +("4416000100", +("4416000500", +("4416009900", +("4416009900", +("4416009900", +("4416009900", +("4417000100", +("4417009900", +("4418100100", +("4418200100", +("4418400100", +("4418500100", +("4418600100", +("4418730100", +("4418739900", +("4418739900", +("4418740100", +("4418750100", +("4418799900", +("4418799900", +("4418910100", +("4418999901", +("4418999999", +("4419110100", +("4419120100", +("4419199900", +("4419909900", +("4420100100", +("4420909900", +("4421100100", +("4421910100", +("4421910200", +("4421910400", +("4421919901", +("4421919999", +("4421990100", +("4421990200", +("4421990400", +("4421999901", +("4421999999", +("4501100100", +("4501909900", +("4502000100", +("4503100100", +("4503909900", +("4504100200", +("4504109900", +("4504109900", +("4504109900", +("4504909900", +("4601210100", +("4601220100", +("4601299900", +("4601299900", +("4601920100", +("4601929900", +("4601930200", +("4601930200", +("4601940100", +("4601949900", +("4601990100", +("4601999900", +("4602110100", +("4602120100", +("4602199900", +("4602909900", +("4701000100", +("4702000201", +("4702000299", +("4703110301", +("4703110399", +("4703110399", +("4703190300", +("4703190300", +("4703210301", +("4703210302", +("4703290301", +("4703290302", +("4704110100", +("4704190100", +("4704210100", +("4704290100", +("4705000100", +("4706100100", +("4706200100", +("4706300400", +("4706300400", +("4706300400", +("4706910100", +("4706920100", +("4706930100", +("4707100100", +("4707200100", +("4707300100", +("4707900100", +("4801000100", +("4801000100", +("4801000100", +("4802100100", +("4802200300", +("4802200300", +("4802200300", +("4802400100", +("4802540400", +("4802549901", +("4802549999", +("4802549999", +("4802549999", +("4802549999", +("4802549999", +("4802549999", +("4802550200", +("4802550300", +("4802559901", +("4802559999", +("4802560200", +("4802569901", +("4802569999", +("4802570200", +("4802570200", +("4802580400", +("4802580400", +("4802580400", +("4802580400", +("4802610301", +("4802610399", +("4802610399", +("4802620300", +("4802620300", +("4802699900", +("4802699900", +("4803000401", +("4803000499", +("4803000499", +("4803000499", +("4804110100", +("4804199901", +("4804199902", +("4804199999", +("4804210100", +("4804299900", +("4804310501", +("4804310599", +("4804310599", +("4804310599", +("4804310599", +("4804399901", +("4804399999", +("4804399999", +("4804399999", +("4804410100", +("4804420100", +("4804499900", +("4804499900", +("4804499900", +("4804510201", +("4804510299", +("4804520100", +("4804599901", +("4804599999", +("4804599999", +("4805110100", +("4805120100", +("4805199900", +("4805240201", +("4805240299", +("4805250201", +("4805250299", +("4805300100", +("4805400100", +("4805500100", +("4805910100", +("4805920100", +("4805930100", +("4806100100", +("4806200100", +("4806300100", +("4806400100", +("4807000300", +("4807000300", +("4807000300", +("4808100100", +("4808400400", +("4808400400", +("4808400400", +("4808400400", +("4808909901", +("4808909999", +("4809200100", +("4809900200", +("4809909901", +("4809909999", +("4810130701", +("4810130799", +("4810130799", +("4810130799", +("4810130799", +("4810130799", +("4810130799", +("4810140701", +("4810140799", +("4810140799", +("4810140799", +("4810140799", +("4810140799", +("4810140799", +("4810199900", +("4810220201", +("4810220299", +("4810299901", +("4810299999", +("4810310100", +("4810310200", +("4810310300", +("4810319900", +("4810319900", +("4810320100", +("4810399900", +("4810920100", +("4810999900", +("4810999900", +("4811100200", +("4811109901", +("4811109999", +("4811410100", +("4811410200", +("4811490100", +("4811499900", +("4811510100", +("4811510200", +("4811510400", +("4811510500", +("4811519900", +("4811519900", +("4811519900", +("4811590700", +("4811599901", +("4811599902", +("4811599903", +("4811599999", +("4811599999", +("4811599999", +("4811599999", +("4811600301", +("4811600399", +("4811600399", +("4811901000", +("4811909901", +("4811909902", +("4811909903", +("4811909999", +("4811909999", +("4811909999", +("4811909999", +("4811909999", +("4811909999", +("4811909999", +("4812000100", +("4813100100", +("4813200100", +("4813909900", +("4814200100", +("4814900200", +("4814909900", +("4814909900", +("4816200100", +("4816909901", +("4816909999", +("4816909999", +("4817100100", +("4817200100", +("4817300100", +("4818100100", +("4818200100", +("4818300100", +("4818500100", +("4818909900", +("4819100100", +("4819200201", +("4819200299", +("4819300100", +("4819400100", +("4819500100", +("4819600100", +("4820100201", +("4820100299", +("4820200100", +("4820300100", +("4820400100", +("4820500100", +("4820909900", +("4821100100", +("4821909900", +("4822100100", +("4822909900", +("4823200201", +("4823200299", +("4823400100", +("4823610100", +("4823699900", +("4823700300", +("4823709901", +("4823709999", +("4823709999", +("4823900100", +("4823900200", +("4823900500", +("4823901000", +("4823901100", +("4823901200", +("4823901700", +("4823909901", +("4823909902", +("4823909903", +("4823909999", +("4823909999", +("4823909999", +("4823909999", +("4823909999", +("4823909999", +("4823909999", +("4823909999", +("4901100100", +("4901109900", +("4901910401", +("4901910402", +("4901910499", +("4901910499", +("4901990100", +("4901990200", +("4901990300", +("4901990400", +("4901990500", +("4901990600", +("4901999900", +("4902100200", +("4902100200", +("4902909901", +("4902909999", +("4903000100", +("4903009900", +("4904000100", +("4905100100", +("4905910100", +("4905919900", +("4905990100", +("4905999900", +("4906000100", +("4907000301", +("4907000302", +("4907009900", +("4908100100", +("4908109900", +("4908900200", +("4908900300", +("4908909901", +("4908909902", +("4908909999", +("4909000100", +("4910000100", +("4911100100", +("4911100200", +("4911100300", +("4911100400", +("4911109900", +("4911910100", +("4911910300", +("4911919901", +("4911919902", +("4911919999", +("4911990100", +("4911990600", +("4911999901", +("4911999902", +("4911999903", +("4911999999", +("4911999999", +("5001000100", +("5002000100", +("5003000200", +("5003000200", +("5004000100", +("5005000100", +("5006000100", +("5007100100", +("5007200100", +("5007900100", +("5101110200", +("5101110200", +("5101199900", +("5101199900", +("5101210200", +("5101210200", +("5101299900", +("5101299900", +("5101300200", +("5101300200", +("5102110100", +("5102199900", +("5102199900", +("5102199900", +("5102200200", +("5102200200", +("5103100300", +("5103100300", +("5103100300", +("5103200300", +("5103200300", +("5103200300", +("5103300100", +("5104000100", +("5105100100", +("5105210100", +("5105299901", +("5105299999", +("5105310100", +("5105399900", +("5105399900", +("5105399900", +("5105400100", +("5106100100", +("5106200100", +("5107100100", +("5107200100", +("5108100100", +("5108200100", +("5109100100", +("5109909900", +("5110000100", +("5111110200", +("5111110200", +("5111199900", +("5111199900", +("5111200200", +("5111200200", +("5111300200", +("5111300200", +("5111909900", +("5112110200", +("5112110200", +("5112199900", +("5112199900", +("5112199900", +("5112200200", +("5112200200", +("5112300300", +("5112300300", +("5112300300", +("5112909900", +("5113000200", +("5113000200", +("5201000301", +("5201000302", +("5201000399", +("5202100100", +("5202910100", +("5202999901", +("5202999999", +("5203000100", +("5204110100", +("5204199900", +("5204200100", +("5205110100", +("5205120100", +("5205130100", +("5205140100", +("5205150100", +("5205210100", +("5205220100", +("5205230100", +("5205240100", +("5205260100", +("5205270100", +("5205280100", +("5205310100", +("5205320100", +("5205330100", +("5205340100", +("5205350100", +("5205410100", +("5205420100", +("5205430100", +("5205440100", +("5205460100", +("5205470100", +("5205480100", +("5206110100", +("5206120100", +("5206130100", +("5206140100", +("5206150100", +("5206210100", +("5206220100", +("5206230100", +("5206240100", +("5206250100", +("5206310100", +("5206320100", +("5206330100", +("5206340100", +("5206350100", +("5206410100", +("5206420100", +("5206430100", +("5206440100", +("5206450100", +("5207100100", +("5207909900", +("5208110100", +("5208120100", +("5208130100", +("5208190301", +("5208190302", +("5208190399", +("5208210100", +("5208220100", +("5208230100", +("5208290200", +("5208290200", +("5208310100", +("5208320100", +("5208330100", +("5208390201", +("5208390299", +("5208410100", +("5208420100", +("5208430100", +("5208490100", +("5208510100", +("5208520100", +("5208590300", +("5208590300", +("5208590300", +("5209110100", +("5209120100", +("5209190200", +("5209190200", +("5209210100", +("5209220100", +("5209290201", +("5209290299", +("5209310100", +("5209320100", +("5209390201", +("5209390299", +("5209410100", +("5209420401", +("5209420402", +("5209420491", +("5209420492", +("5209430100", +("5209490100", +("5209510100", +("5209520100", +("5209590300", +("5209590300", +("5210110201", +("5210110299", +("5210190300", +("5210190300", +("5210190300", +("5210210100", +("5210290301", +("5210290399", +("5210290399", +("5210310100", +("5210320100", +("5210390201", +("5210390299", +("5210410100", +("5210490201", +("5210490299", +("5210510100", +("5210590300", +("5210590300", +("5210590300", +("5211110201", +("5211110299", +("5211120100", +("5211190200", +("5211190200", +("5211200400", +("5211200400", +("5211200400", +("5211200400", +("5211310100", +("5211320100", +("5211390200", +("5211390200", +("5211410100", +("5211420401", +("5211420402", +("5211420491", +("5211420492", +("5211430100", +("5211490100", +("5211510100", +("5211520100", +("5211590200", +("5211590200", +("5212110100", +("5212120100", +("5212130100", +("5212140100", +("5212150100", +("5212210100", +("5212220100", +("5212230100", +("5212240201", +("5212240299", +("5212250100", +("5301100100", +("5301210100", +("5301299900", +("5301300100", +("5302100100", +("5302909900", +("5303100100", +("5303909900", +("5305000801", +("5305000802", +("5305000803", +("5305000899", +("5305000899", +("5305000899", +("5305000899", +("5305000899", +("5306100100", +("5306200100", +("5307100100", +("5307200100", +("5308100100", +("5308200100", +("5308900300", +("5308909901", +("5308909999", +("5309110100", +("5309199900", +("5309210100", +("5309299900", +("5310100100", +("5310909900", +("5311000200", +("5311000200", +("5401100100", +("5401200100", +("5402110100", +("5402199901", +("5402199999", +("5402200201", +("5402200299", +("5402310100", +("5402320100", +("5402330100", +("5402340100", +("5402399900", +("5402399900", +("5402440100", +("5402449900", +("5402450300", +("5402459901", +("5402459902", +("5402459903", +("5402459999", +("5402460100", +("5402470301", +("5402470399", +("5402470399", +("5402480301", +("5402480302", +("5402480399", +("5402490600", +("5402490600", +("5402499900", +("5402499900", +("5402499900", +("5402499900", +("5402510200", +("5402510200", +("5402520300", +("5402520300", +("5402520300", +("5402530100", +("5402599900", +("5402599900", +("5402599900", +("5402599900", +("5402599900", +("5402599900", +("5402610201", +("5402610299", +("5402620201", +("5402620299", +("5402630100", +("5402699901", +("5402699999", +("5402699999", +("5402699999", +("5402699999", +("5402699999", +("5403100100", +("5403310301", +("5403310302", +("5403320300", +("5403320300", +("5403330100", +("5403399900", +("5403399900", +("5403410301", +("5403410302", +("5403420100", +("5403499900", +("5403499900", +("5404110100", +("5404119900", +("5404120200", +("5404120200", +("5404199901", +("5404199902", +("5404199999", +("5404199999", +("5404909900", +("5405000500", +("5405000500", +("5405000500", +("5405000500", +("5405000500", +("5406000100", +("5406000200", +("5406000400", +("5406000400", +("5406000500", +("5407100300", +("5407100300", +("5407100300", +("5407200201", +("5407200299", +("5407300401", +("5407300402", +("5407300403", +("5407300499", +("5407410501", +("5407410502", +("5407410503", +("5407420501", +("5407420502", +("5407420503", +("5407430400", +("5407430400", +("5407430400", +("5407430400", +("5407440100", +("5407510501", +("5407510502", +("5407510503", +("5407520501", +("5407520502", +("5407520503", +("5407530401", +("5407530402", +("5407530403", +("5407530491", +("5407530492", +("5407530493", +("5407540501", +("5407540502", +("5407540503", +("5407610601", +("5407610602", +("5407610603", +("5407610604", +("5407610691", +("5407610692", +("5407610693", +("5407699901", +("5407699991", +("5407699992", +("5407699993", +("5407710100", +("5407720100", +("5407730401", +("5407730499", +("5407730499", +("5407730499", +("5407740100", +("5407810100", +("5407820401", +("5407820499", +("5407820499", +("5407820499", +("5407830100", +("5407840100", +("5407910801", +("5407910802", +("5407910803", +("5407910804", +("5407910805", +("5407910806", +("5407910807", +("5407910899", +("5407920701", +("5407920702", +("5407920703", +("5407920704", +("5407920705", +("5407920706", +("5407920799", +("5407930801", +("5407930802", +("5407930803", +("5407930804", +("5407930805", +("5407930806", +("5407930807", +("5407930899", +("5407940801", +("5407940802", +("5407940803", +("5407940804", +("5407940805", +("5407940806", +("5407940807", +("5407940899", +("5408100501", +("5408100502", +("5408100503", +("5408100504", +("5408100599", +("5408210400", +("5408210400", +("5408210400", +("5408210400", +("5408220501", +("5408220599", +("5408220599", +("5408220599", +("5408220599", +("5408230600", +("5408230600", +("5408230600", +("5408230600", +("5408230600", +("5408230600", +("5408240200", +("5408240200", +("5408310501", +("5408310502", +("5408310503", +("5408310504", +("5408310599", +("5408320601", +("5408320602", +("5408320603", +("5408320604", +("5408320605", +("5408320699", +("5408330501", +("5408330502", +("5408330503", +("5408330504", +("5408330599", +("5408340401", +("5408340402", +("5408340403", +("5408340499", +("5501100100", +("5501200200", +("5501209900", +("5501209900", +("5501209900", +("5501300100", +("5501400100", +("5501909900", +("5502100100", +("5502900100", +("5502909900", +("5503110100", +("5503199900", +("5503200300", +("5503209901", +("5503209902", +("5503209999", +("5503300100", +("5503400100", +("5503409900", +("5503900100", +("5503909900", +("5504100201", +("5504100299", +("5504909900", +("5505100100", +("5505200100", +("5506100100", +("5506200100", +("5506300100", +("5506400100", +("5506909900", +("5507000100", +("5508100100", +("5508200100", +("5509110100", +("5509120100", +("5509210100", +("5509220100", +("5509310100", +("5509320100", +("5509410100", +("5509420100", +("5509510100", +("5509520100", +("5509530100", +("5509599900", +("5509610100", +("5509620100", +("5509699900", +("5509910100", +("5509920100", +("5509999900", +("5510110100", +("5510120100", +("5510200100", +("5510300100", +("5510900100", +("5511100100", +("5511200100", +("5511300100", +("5512110501", +("5512110502", +("5512110503", +("5512199901", +("5512199991", +("5512199992", +("5512199993", +("5512210100", +("5512299900", +("5512910100", +("5512999900", +("5513110401", +("5513110402", +("5513120101", +("5513120199", +("5513130101", +("5513130199", +("5513190101", +("5513190199", +("5513210401", +("5513210402", +("5513230201", +("5513230202", +("5513230291", +("5513230299", +("5513290101", +("5513290199", +("5513310101", +("5513310199", +("5513390301", +("5513390302", +("5513390303", +("5513390391", +("5513390399", +("5513410101", +("5513410199", +("5513490301", +("5513490302", +("5513490391", +("5513490392", +("5513490399", +("5514110100", +("5514120100", +("5514190201", +("5514190299", +("5514210100", +("5514220100", +("5514230100", +("5514290100", +("5514300591", +("5514300599", +("5514300599", +("5514300599", +("5514300599", +("5514410100", +("5514420100", +("5514430100", +("5514490100", +("5515110101", +("5515110102", +("5515110199", +("5515120101", +("5515120102", +("5515120199", +("5515130201", +("5515130299", +("5515199901", +("5515199902", +("5515199999", +("5515210101", +("5515210102", +("5515210199", +("5515220200", +("5515220200", +("5515299901", +("5515299902", +("5515299999", +("5515910101", +("5515910102", +("5515910199", +("5515999901", +("5515999902", +("5515999903", +("5515999904", +("5515999999", +("5516110100", +("5516120100", +("5516130100", +("5516140100", +("5516210100", +("5516220100", +("5516230100", +("5516240100", +("5516310200", +("5516310200", +("5516320200", +("5516320200", +("5516330200", +("5516330200", +("5516340200", +("5516340200", +("5516410100", +("5516420100", +("5516430100", +("5516440100", +("5516910100", +("5516920100", +("5516930100", +("5516940100", +("5601210201", +("5601210299", +("5601220100", +("5601229900", +("5601299900", +("5601300201", +("5601300299", +("5602100200", +("5602100200", +("5602210301", +("5602210302", +("5602210399", +("5602290100", +("5602909900", +("5603110100", +("5603120201", +("5603120299", +("5603130201", +("5603130299", +("5603140100", +("5603910100", +("5603920100", +("5603930100", +("5603940100", +("5604100100", +("5604900100", +("5604900200", +("5604900400", +("5604900500", +("5604900600", +("5604900700", +("5604900800", +("5604900900", +("5604901000", +("5604901100", +("5604901200", +("5604901300", +("5604901400", +("5604909901", +("5604909999", +("5605000100", +("5606000301", +("5606000302", +("5606000399", +("5607210100", +("5607299900", +("5607410100", +("5607499900", +("5607500100", +("5607900200", +("5607909901", +("5607909999", +("5608110201", +("5608110299", +("5608199900", +("5608909900", +("5609000201", +("5609000299", +("5701100100", +("5701900100", +("5702100100", +("5702200100", +("5702310100", +("5702320100", +("5702390100", +("5702410100", +("5702420100", +("5702490100", +("5702500301", +("5702500302", +("5702500399", +("5702910100", +("5702920100", +("5702990100", +("5703100100", +("5703200201", +("5703200299", +("5703300201", +("5703300299", +("5703900100", +("5704100100", +("5704200100", +("5704909900", +("5705000201", +("5705000299", +("5801100100", +("5801210100", +("5801220100", +("5801230100", +("5801260100", +("5801270100", +("5801310100", +("5801320100", +("5801330100", +("5801360100", +("5801370100", +("5801900100", +("5802110100", +("5802199900", +("5802200100", +("5802300100", +("5803000501", +("5803000502", +("5803000503", +("5803000504", +("5803000599", +("5804100100", +("5804210100", +("5804290100", +("5804300100", +("5805000100", +("5806100100", +("5806109900", +("5806200100", +("5806209900", +("5806310100", +("5806320100", +("5806390100", +("5806399900", +("5806400100", +("5806409900", +("5807100100", +("5807909900", +("5808100100", +("5808909900", +("5809000100", +("5810100100", +("5810910100", +("5810920100", +("5810990100", +("5811000100", +("5901100100", +("5901909901", +("5901909902", +("5901909999", +("5902100100", +("5902200100", +("5902909900", +("5903100201", +("5903100299", +("5903200201", +("5903200299", +("5903909901", +("5903909902", +("5903909903", +("5903909904", +("5903909999", +("5904100100", +("5904909900", +("5904909900", +("5905000100", +("5906100100", +("5906910200", +("5906910200", +("5906999901", +("5906999902", +("5906999903", +("5906999999", +("5907000100", +("5907000500", +("5907000600", +("5907009901", +("5907009902", +("5907009903", +("5907009999", +("5908000300", +("5908009901", +("5908009902", +("5908009999", +("5909000100", +("5910000100", +("5911100100", +("5911109900", +("5911200100", +("5911310100", +("5911320100", +("5911400100", +("5911900100", +("5911909901", +("5911909902", +("5911909999", +("6001100301", +("6001100399", +("6001210101", +("6001210199", +("6001220101", +("6001220102", +("6001220199", +("6001290100", +("6001299901", +("6001299999", +("6001910101", +("6001910199", +("6001920101", +("6001920102", +("6001920199", +("6001990100", +("6002400100", +("6002409901", +("6002409902", +("6002409903", +("6002409999", +("6002900100", +("6002909901", +("6002909902", +("6002909903", +("6002909999", +("6003100100", +("6003200100", +("6003300100", +("6003400100", +("6003900100", +("6003909900", +("6004100100", +("6004109901", +("6004109902", +("6004109903", +("6004109904", +("6004109905", +("6004109999", +("6004900100", +("6004909900", +("6005210100", +("6005220100", +("6005230100", +("6005240100", +("6005350100", +("6005350100", +("6005350100", +("6005350100", +("6005360101", +("6005360199", +("6005370201", +("6005370299", +("6005380100", +("6005390100", +("6005390100", +("6005410100", +("6005420100", +("6005430100", +("6005440100", +("6005909901", +("6005909999", +("6006100100", +("6006210201", +("6006210299", +("6006220201", +("6006220299", +("6006230201", +("6006230299", +("6006240201", +("6006240299", +("6006310301", +("6006310399", +("6006320301", +("6006320399", +("6006330301", +("6006330399", +("6006340301", +("6006340399", +("6006410100", +("6006420100", +("6006430100", +("6006440100", +("6006909900", +("6101200301", +("6101200399", +("6101300100", +("6101309901", +("6101309991", +("6101309992", +("6101900201", +("6101900299", +("6102100100", +("6102200301", +("6102200399", +("6102300100", +("6102309901", +("6102309902", +("6102309999", +("6102900100", +("6103100501", +("6103100502", +("6103100503", +("6103100504", +("6103100599", +("6103220100", +("6103230100", +("6103290201", +("6103290299", +("6103310100", +("6103320100", +("6103330201", +("6103330299", +("6103390301", +("6103390302", +("6103390399", +("6103410100", +("6103420301", +("6103420302", +("6103420303", +("6103420391", +("6103420392", +("6103430100", +("6103439901", +("6103439902", +("6103439903", +("6103439904", +("6103439991", +("6103439992", +("6103490301", +("6103490302", +("6103490399", +("6104130201", +("6104130299", +("6104190601", +("6104190602", +("6104190603", +("6104190604", +("6104190605", +("6104190699", +("6104220100", +("6104230100", +("6104290201", +("6104290299", +("6104310100", +("6104320100", +("6104330201", +("6104330299", +("6104390301", +("6104390302", +("6104390399", +("6104410100", +("6104420301", +("6104420399", +("6104430201", +("6104430291", +("6104430292", +("6104440201", +("6104440202", +("6104440299", +("6104490201", +("6104490299", +("6104510100", +("6104520101", +("6104520199", +("6104530201", +("6104530291", +("6104530292", +("6104590301", +("6104590302", +("6104590399", +("6104610100", +("6104620301", +("6104620302", +("6104620303", +("6104620391", +("6104620392", +("6104630100", +("6104639901", +("6104639902", +("6104639903", +("6104639991", +("6104639992", +("6104690301", +("6104690302", +("6104690399", +("6105100201", +("6105100202", +("6105100299", +("6105200301", +("6105200399", +("6105900201", +("6105900299", +("6106100201", +("6106100202", +("6106100291", +("6106100292", +("6106200100", +("6106209991", +("6106209992", +("6106900301", +("6106900302", +("6106900399", +("6107110301", +("6107110399", +("6107120301", +("6107120399", +("6107190100", +("6107210101", +("6107210199", +("6107220101", +("6107220199", +("6107290201", +("6107290299", +("6107910100", +("6107990301", +("6107990302", +("6107990399", +("6108110100", +("6108190100", +("6108210301", +("6108210399", +("6108220301", +("6108220399", +("6108290100", +("6108310301", +("6108310399", +("6108320301", +("6108320399", +("6108390201", +("6108390299", +("6108910201", +("6108910299", +("6108920201", +("6108920299", +("6108990201", +("6108990299", +("6109100301", +("6109100399", +("6109900401", +("6109900491", +("6109909901", +("6109909991", +("6109909992", +("6110110301", +("6110110399", +("6110120101", +("6110120199", +("6110199901", +("6110199999", +("6110200501", +("6110200502", +("6110200503", +("6110200591", +("6110200592", +("6110200593", +("6110200594", +("6110200599", +("6110300101", +("6110300199", +("6110309901", +("6110309902", +("6110309903", +("6110309991", +("6110309992", +("6110309993", +("6110309999", +("6110900201", +("6110900202", +("6110900203", +("6110900204", +("6110900205", +("6110900291", +("6110900299", +("6111201201", +("6111201202", +("6111201203", +("6111201204", +("6111201205", +("6111201206", +("6111201207", +("6111201208", +("6111201209", +("6111201210", +("6111201211", +("6111201212", +("6111201213", +("6111201214", +("6111201291", +("6111201292", +("6111201299", +("6111300701", +("6111300702", +("6111300703", +("6111300704", +("6111300705", +("6111300706", +("6111300707", +("6111300708", +("6111300709", +("6111300710", +("6111300711", +("6111300712", +("6111300713", +("6111300714", +("6111300791", +("6111300792", +("6111300793", +("6111300799", +("6111900501", +("6111900502", +("6111900503", +("6111900504", +("6111900599", +("6112110100", +("6112120100", +("6112190301", +("6112190302", +("6112190399", +("6112200200", +("6112200200", +("6112310100", +("6112390100", +("6112410100", +("6112490100", +("6113000201", +("6113000299", +("6114200100", +("6114300201", +("6114300299", +("6114900201", +("6114900299", +("6115100100", +("6115210100", +("6115220100", +("6115290100", +("6115300100", +("6115940100", +("6115950100", +("6115960100", +("6115990100", +("6116100201", +("6116100299", +("6116910100", +("6116920100", +("6116930100", +("6116990100", +("6117100201", +("6117100299", +("6117800200", +("6117809901", +("6117809999", +("6117900100", +("6201110100", +("6201120100", +("6201129901", +("6201129902", +("6201130100", +("6201130200", +("6201139901", +("6201139902", +("6201190100", +("6201910100", +("6201920100", +("6201929901", +("6201929902", +("6201930100", +("6201939900", +("6201990100", +("6202110100", +("6202120100", +("6202129901", +("6202129902", +("6202130100", +("6202130200", +("6202139901", +("6202139902", +("6202190100", +("6202910100", +("6202920100", +("6202929901", +("6202929902", +("6202930100", +("6202939901", +("6202939902", +("6202990100", +("6203110100", +("6203120100", +("6203190301", +("6203190302", +("6203190399", +("6203220100", +("6203230100", +("6203290201", +("6203290299", +("6203310100", +("6203320301", +("6203320399", +("6203330100", +("6203339901", +("6203339902", +("6203390401", +("6203390402", +("6203390403", +("6203390499", +("6203410100", +("6203420100", +("6203420200", +("6203429101", +("6203429102", +("6203429191", +("6203429192", +("6203429199", +("6203429201", +("6203429202", +("6203429291", +("6203429292", +("6203429299", +("6203430100", +("6203439101", +("6203439102", +("6203439103", +("6203439191", +("6203439192", +("6203439199", +("6203439201", +("6203439202", +("6203439203", +("6203439291", +("6203439292", +("6203439299", +("6203490100", +("6204110100", +("6204120100", +("6204130201", +("6204130299", +("6204190401", +("6204190402", +("6204190403", +("6204190499", +("6204210100", +("6204220100", +("6204230100", +("6204290100", +("6204310100", +("6204320301", +("6204320399", +("6204330100", +("6204330200", +("6204339901", +("6204339902", +("6204339991", +("6204390401", +("6204390402", +("6204390403", +("6204390499", +("6204410100", +("6204420100", +("6204429991", +("6204429992", +("6204430100", +("6204430200", +("6204439901", +("6204439991", +("6204439992", +("6204440100", +("6204440200", +("6204449991", +("6204449992", +("6204490201", +("6204490299", +("6204510100", +("6204520301", +("6204520399", +("6204530100", +("6204530200", +("6204539991", +("6204539992", +("6204590601", +("6204590602", +("6204590603", +("6204590604", +("6204590691", +("6204590699", +("6204610100", +("6204620901", +("6204620902", +("6204620903", +("6204620904", +("6204620991", +("6204620992", +("6204620993", +("6204620994", +("6204620995", +("6204620996", +("6204630100", +("6204639101", +("6204639102", +("6204639103", +("6204639191", +("6204639192", +("6204639199", +("6204639201", +("6204639202", +("6204639203", +("6204639291", +("6204639299", +("6204690200", +("6204690300", +("6204699901", +("6204699902", +("6204699999", +("6205200100", +("6205209100", +("6205209200", +("6205300100", +("6205309100", +("6205309200", +("6205900100", +("6205900200", +("6205909900", +("6206100100", +("6206200201", +("6206200299", +("6206300401", +("6206300402", +("6206400100", +("6206400200", +("6206409100", +("6206409200", +("6206900100", +("6206909900", +("6207110101", +("6207110199", +("6207190100", +("6207210101", +("6207210199", +("6207220100", +("6207290201", +("6207290299", +("6207910100", +("6207990301", +("6207990302", +("6207990399", +("6208110100", +("6208190100", +("6208210101", +("6208210199", +("6208220101", +("6208220199", +("6208290201", +("6208290299", +("6208910100", +("6208920201", +("6208920202", +("6208920299", +("6208990301", +("6208990302", +("6208990399", +("6209200701", +("6209200702", +("6209200702", +("6209200703", +("6209200704", +("6209200705", +("6209200706", +("6209200707", +("6209200708", +("6209200709", +("6209200791", +("6209200792", +("6209200799", +("6209300501", +("6209300502", +("6209300503", +("6209300504", +("6209300505", +("6209300506", +("6209300591", +("6209300592", +("6209300599", +("6209900501", +("6209900502", +("6209900503", +("6209900504", +("6209900599", +("6210100100", +("6210200100", +("6210300100", +("6210400100", +("6210500100", +("6211110100", +("6211120100", +("6211200201", +("6211200299", +("6211320201", +("6211320299", +("6211330201", +("6211330299", +("6211390301", +("6211390302", +("6211390399", +("6211420201", +("6211420299", +("6211430201", +("6211430299", +("6211490100", +("6212100701", +("6212100702", +("6212100703", +("6212100791", +("6212100792", +("6212100793", +("6212200100", +("6212300100", +("6212909901", +("6212909902", +("6212909999", +("6213200100", +("6213900201", +("6213900202", +("6213900299", +("6214100100", +("6214200100", +("6214300100", +("6214400100", +("6214900100", +("6215100100", +("6215200100", +("6215900100", +("6216000100", +("6217100101", +("6217100199", +("6217900100", +("6301100100", +("6301200100", +("6301300100", +("6301400100", +("6301900100", +("6302100100", +("6302210101", +("6302210102", +("6302210103", +("6302210104", +("6302210105", +("6302210106", +("6302210107", +("6302210108", +("6302210199", +("6302220101", +("6302220102", +("6302220103", +("6302220104", +("6302220105", +("6302220106", +("6302220107", +("6302220108", +("6302220199", +("6302290100", +("6302310601", +("6302310602", +("6302310603", +("6302310604", +("6302310605", +("6302310606", +("6302310607", +("6302310608", +("6302310699", +("6302320601", +("6302320602", +("6302320603", +("6302320604", +("6302320605", +("6302320606", +("6302320607", +("6302320608", +("6302320699", +("6302390100", +("6302400100", +("6302510100", +("6302530100", +("6302590201", +("6302590299", +("6302600601", +("6302600602", +("6302600603", +("6302600604", +("6302600699", +("6302910100", +("6302930100", +("6302990201", +("6302990299", +("6303120100", +("6303190201", +("6303190299", +("6303910100", +("6303920201", +("6303920299", +("6303990100", +("6304110100", +("6304199900", +("6304200100", +("6304910100", +("6304920100", +("6304930100", +("6304990100", +("6305100100", +("6305200100", +("6305320100", +("6305330100", +("6305399900", +("6305900100", +("6306120100", +("6306190201", +("6306190299", +("6306220100", +("6306290201", +("6306290299", +("6306300201", +("6306300299", +("6306400201", +("6306400299", +("6306909901", +("6306909999", +("6307100100", +("6307200100", +("6307900100", +("6307909900", +("6308000100", +("6309000100", +("6310100201", +("6310100299", +("6310909901", +("6310909999", +("6401100101", +("6401100199", +("6401921101", +("6401921102", +("6401921103", +("6401929901", +("6401929902", +("6401929903", +("6401929991", +("6401929992", +("6401929993", +("6401999901", +("6401999902", +("6401999903", +("6401999904", +("6401999905", +("6401999991", +("6401999992", +("6401999993", +("6402120100", +("6402190100", +("6402199901", +("6402199902", +("6402199903", +("6402199903", +("6402199904", +("6402199904", +("6402199905", +("6402199905", +("6402200401", +("6402200402", +("6402910200", +("6402910601", +("6402910602", +("6402910603", +("6402910691", +("6402990601", +("6402990699", +("6402991901", +("6402991902", +("6402991903", +("6402991904", +("6402991991", +("6402991992", +("6402991993", +("6402992001", +("6402992002", +("6402992003", +("6402992101", +("6402992102", +("6402992103", +("6402992104", +("6402992191", +("6402992192", +("6402992193", +("6402999100", +("6402999200", +("6402999300", +("6402999300", +("6402999400", +("6403120100", +("6403190200", +("6403199901", +("6403199902", +("6403199903", +("6403199991", +("6403199999", +("6403200100", +("6403400501", +("6403400502", +("6403400503", +("6403510501", +("6403510502", +("6403510503", +("6403510504", +("6403599901", +("6403599902", +("6403599903", +("6403599904", +("6403599991", +("6403599992", +("6403599993", +("6403910400", +("6403911201", +("6403911202", +("6403911301", +("6403911302", +("6403911303", +("6403919901", +("6403919902", +("6403919903", +("6403990100", +("6403990600", +("6403991200", +("6403991301", +("6403991302", +("6403991303", +("6403991401", +("6403991402", +("6403991500", +("6403999901", +("6403999902", +("6404110900", +("6404111201", +("6404111202", +("6404111601", +("6404111602", +("6404111701", +("6404111702", +("6404119901", +("6404119902", +("6404119903", +("6404119904", +("6404119991", +("6404119992", +("6404119993", +("6404119994", +("6404190200", +("6404190801", +("6404190802", +("6404199901", +("6404199902", +("6404199903", +("6404199904", +("6404199905", +("6404199906", +("6404199907", +("6404199908", +("6404199909", +("6404199910", +("6404199991", +("6404199992", +("6404199993", +("6404199994", +("6404200101", +("6404200102", +("6404200199", +("6405100100", +("6405200100", +("6405200200", +("6405209991", +("6405209992", +("6405209993", +("6405209994", +("6405909901", +("6405909902", +("6405909999", +("6406100801", +("6406100801", +("6406100801", +("6406100802", +("6406100802", +("6406100899", +("6406100901", +("6406100902", +("6406100999", +("6406200100", +("6406200200", +("6406900100", +("6406900200", +("6406909900", +("6501000100", +("6502000100", +("6504000100", +("6505000401", +("6505000402", +("6505000403", +("6505000499", +("6506100100", +("6506910100", +("6506919900", +("6506990200", +("6506990200", +("6507000100", +("6601100100", +("6601910100", +("6601999900", +("6602000100", +("6603200100", +("6603209900", +("6603909900", +("6603909900", +("6701000100", +("6701009900", +("6702100100", +("6702900100", +("6703000100", +("6704110100", +("6704199900", +("6704200100", +("6704900100", +("6801000100", +("6802100100", +("6802109900", +("6802210100", +("6802230201", +("6802230299", +("6802290201", +("6802290299", +("6802910100", +("6802920100", +("6802930100", +("6802990100", +("6803000100", +("6803009900", +("6804100201", +("6804100299", +("6804210201", +("6804210299", +("6804220401", +("6804220402", +("6804220403", +("6804220499", +("6804230201", +("6804230299", +("6804300100", +("6805100101", +("6805100199", +("6805200100", +("6805300100", +("6806100100", +("6806200100", +("6806909900", +("6807100100", +("6807909900", +("6808000100", +("6809110100", +("6809199900", +("6809900100", +("6810110100", +("6810199900", +("6810910100", +("6810919900", +("6810999900", +("6810999900", +("6811400300", +("6811400400", +("6811400500", +("6811400500", +("6811409900", +("6811810100", +("6811820100", +("6811890200", +("6811899900", +("6812800100", +("6812800500", +("6812800600", +("6812800800", +("6812809900", +("6812809900", +("6812809900", +("6812809900", +("6812809900", +("6812910100", +("6812920100", +("6812930200", +("6812930200", +("6812990200", +("6812990300", +("6812990500", +("6812999900", +("6812999900", +("6812999900", +("6813200501", +("6813200599", +("6813200599", +("6813200599", +("6813200599", +("6813810100", +("6813819900", +("6813899901", +("6813899999", +("6813899999", +("6814100200", +("6814100200", +("6814909900", +("6815100100", +("6815100200", +("6815100300", +("6815100400", +("6815109900", +("6815200100", +("6815910201", +("6815910299", +("6815990100", +("6815999900", +("6901000100", +("6902100100", +("6902200100", +("6902909900", +("6902909900", +("6902909900", +("6902909900", +("6903100301", +("6903100399", +("6903100399", +("6903200601", +("6903200602", +("6903200603", +("6903200699", +("6903200699", +("6903200699", +("6903200699", +("6903909900", +("6903909900", +("6904100100", +("6904909900", +("6905100100", +("6905900100", +("6905909900", +("6906000100", +("6907210201", +("6907210202", +("6907210299", +("6907210299", +("6907210299", +("6907210299", +("6907220201", +("6907220201", +("6907220299", +("6907220299", +("6907220299", +("6907220299", +("6907230201", +("6907230201", +("6907230299", +("6907230299", +("6907230299", +("6907230299", +("6907300100", +("6907300100", +("6907300100", +("6907300100", +("6907400100", +("6907400100", +("6907400100", +("6907400100", +("6909110600", +("6909110600", +("6909110600", +("6909110600", +("6909110600", +("6909110600", +("6909120100", +("6909199900", +("6909909900", +("6910100100", +("6910900100", +("6910909900", +("6911100100", +("6911909900", +("6912000201", +("6912000299", +("6913100100", +("6913909900", +("6914100100", +("6914909900", +("7001000100", +("7002100100", +("7002200500", +("7002200500", +("7002200500", +("7002200500", +("7002200500", +("7002310301", +("7002310399", +("7002310399", +("7002320100", +("7002399900", +("7003120200", +("7003120200", +("7003190201", +("7003190299", +("7003200100", +("7003300100", +("7004200300", +("7004200300", +("7004200300", +("7004900200", +("7004900200", +("7005100201", +("7005100299", +("7005210301", +("7005210302", +("7005210399", +("7005290100", +("7005299901", +("7005299902", +("7005299903", +("7005299999", +("7005300100", +("7006000401", +("7006000402", +("7006000499", +("7006000499", +("7007110100", +("7007119901", +("7007119902", +("7007119999", +("7007199901", +("7007199999", +("7007210300", +("7007219901", +("7007219902", +("7007219999", +("7007299900", +("7008000100", +("7009100400", +("7009109901", +("7009109902", +("7009109999", +("7009109999", +("7009910100", +("7009919900", +("7009920100", +("7010100100", +("7010109900", +("7010200100", +("7010909901", +("7010909902", +("7010909903", +("7010909999", +("7011100501", +("7011100502", +("7011100503", +("7011100599", +("7011100599", +("7011200500", +("7011200500", +("7011200500", +("7011200500", +("7011200500", +("7011909900", +("7011909900", +("7013100100", +("7013220100", +("7013289901", +("7013289999", +("7013330100", +("7013379901", +("7013379991", +("7013379999", +("7013379999", +("7013379999", +("7013410100", +("7013420100", +("7013499901", +("7013499902", +("7013499903", +("7013499904", +("7013499905", +("7013499906", +("7013499991", +("7013499999", +("7013499999", +("7013910100", +("7013999901", +("7013999902", +("7013999903", +("7013999904", +("7013999999", +("7014000100", +("7014000200", +("7014000300", +("7014000400", +("7014009900", +("7015100100", +("7015909900", +("7016100100", +("7016909900", +("7017100400", +("7017100600", +("7017100700", +("7017100800", +("7017100900", +("7017101000", +("7017109901", +("7017109902", +("7017109999", +("7017109999", +("7017109999", +("7017109999", +("7017109999", +("7017109999", +("7017200100", +("7017200300", +("7017209901", +("7017209999", +("7017900300", +("7017900400", +("7017909900", +("7017909900", +("7017909900", +("7017909900", +("7018100100", +("7018200100", +("7018209900", +("7018909900", +("7018909900", +("7019110100", +("7019120100", +("7019199900", +("7019310100", +("7019320100", +("7019399900", +("7019399900", +("7019399900", +("7019399900", +("7019399900", +("7019400201", +("7019400299", +("7019510201", +("7019510299", +("7019520100", +("7019529900", +("7019599901", +("7019599999", +("7019909901", +("7019909902", +("7019909903", +("7019909904", +("7019909905", +("7019909906", +("7019909999", +("7019909999", +("7019909999", +("7020000601", +("7020000699", +("7020000699", +("7020000699", +("7020000699", +("7020000699", +("7101100200", +("7101100200", +("7101210100", +("7101220100", +("7101229900", +("7102100100", +("7102210100", +("7102299900", +("7102310100", +("7102399900", +("7103100100", +("7103910100", +("7103999900", +("7104100100", +("7104200100", +("7104909900", +("7105100100", +("7105909900", +("7106100100", +("7106910100", +("7106920100", +("7107000100", +("7108110100", +("7108120100", +("7108130100", +("7108200100", +("7108209900", +("7109000100", +("7110110100", +("7110199900", +("7110210100", +("7110299900", +("7110310100", +("7110399900", +("7110410100", +("7110499900", +("7111000100", +("7112300100", +("7112910201", +("7112910299", +("7112920100", +("7112999900", +("7113110100", +("7113110200", +("7113119900", +("7113190300", +("7113199901", +("7113199901", +("7113199999", +("7113200100", +("7114110100", +("7114199900", +("7114200100", +("7115100100", +("7115909900", +("7115909900", +("7116100100", +("7116200100", +("7117110100", +("7117190100", +("7117199900", +("7117900100", +("7117909900", +("7118100100", +("7118909900", +("7201100100", +("7201200100", +("7201500200", +("7201500200", +("7202110100", +("7202199901", +("7202199999", +("7202210200", +("7202210200", +("7202299900", +("7202300100", +("7202410100", +("7202499900", +("7202500100", +("7202600100", +("7202700100", +("7202800100", +("7202910401", +("7202910402", +("7202910403", +("7202920200", +("7202920200", +("7202930100", +("7202999901", +("7202999902", +("7202999903", +("7202999999", +("7203100100", +("7203909900", +("7204100100", +("7204210100", +("7204299900", +("7204300100", +("7204410100", +("7204499900", +("7204500100", +("7205100100", +("7205210100", +("7205299900", +("7206100100", +("7206909900", +("7207110100", +("7207120201", +("7207120299", +("7207199900", +("7207200201", +("7207200299", +("7208100301", +("7208100302", +("7208100303", +("7208100399", +("7208250201", +("7208250299", +("7208260101", +("7208260199", +("7208270101", +("7208270199", +("7208360101", +("7208360102", +("7208360199", +("7208370101", +("7208370102", +("7208370199", +("7208380101", +("7208380199", +("7208390101", +("7208390199", +("7208400201", +("7208400299", +("7208510401", +("7208510402", +("7208510403", +("7208510404", +("7208510404", +("7208510404", +("7208510405", +("7208510405", +("7208510405", +("7208520100", +("7208530100", +("7208540100", +("7208909900", +("7209150401", +("7209150402", +("7209150403", +("7209150499", +("7209160101", +("7209160199", +("7209170101", +("7209170199", +("7209180101", +("7209180199", +("7209250100", +("7209260100", +("7209270100", +("7209280100", +("7209909900", +("7210110100", +("7210120401", +("7210120402", +("7210120403", +("7210120499", +("7210200100", +("7210300201", +("7210300299", +("7210410100", +("7210419900", +("7210499901", +("7210499902", +("7210499999", +("7210500301", +("7210500302", +("7210500399", +("7210610100", +("7210699901", +("7210699999", +("7210700201", +("7210700202", +("7210700203", +("7210700291", +("7210700299", +("7210909901", +("7210909991", +("7210909999", +("7211130100", +("7211140301", +("7211140302", +("7211140303", +("7211140399", +("7211199901", +("7211199902", +("7211199903", +("7211199904", +("7211199999", +("7211230301", +("7211230302", +("7211230399", +("7211299901", +("7211299902", +("7211299903", +("7211299999", +("7211909900", +("7212100301", +("7212100302", +("7212100399", +("7212200301", +("7212200302", +("7212200399", +("7212300301", +("7212300302", +("7212300399", +("7212400401", +("7212400402", +("7212400403", +("7212400499", +("7212500100", +("7212600401", +("7212600402", +("7212600403", +("7212600499", +("7213100100", +("7213200100", +("7213910301", +("7213910302", +("7213999901", +("7213999902", +("7213999999", +("7214100100", +("7214200100", +("7214209900", +("7214300100", +("7214910301", +("7214910302", +("7214910391", +("7214910399", +("7214999901", +("7214999902", +("7214999903", +("7214999904", +("7214999991", +("7214999992", +("7214999999", +("7215100100", +("7215500201", +("7215500299", +("7215909901", +("7215909999", +("7216100101", +("7216100199", +("7216210101", +("7216210199", +("7216220100", +("7216310301", +("7216310302", +("7216310399", +("7216320400", +("7216329901", +("7216329902", +("7216329999", +("7216330101", +("7216330102", +("7216330103", +("7216330104", +("7216330199", +("7216330201", +("7216330202", +("7216330203", +("7216330204", +("7216330299", +("7216400101", +("7216400102", +("7216400191", +("7216400199", +("7216500100", +("7216509900", +("7216610100", +("7216610200", +("7216619900", +("7216699901", +("7216699902", +("7216699999", +("7216910100", +("7216999900", +("7217100201", +("7217100202", +("7217100203", +("7217100204", +("7217100205", +("7217100206", +("7217100291", +("7217100292", +("7217100293", +("7217200201", +("7217200299", +("7217300201", +("7217300299", +("7217909901", +("7217909999", +("7218100100", +("7218910100", +("7218999900", +("7219110100", +("7219120201", +("7219120299", +("7219130100", +("7219140100", +("7219210100", +("7219220100", +("7219230100", +("7219240100", +("7219310101", +("7219310199", +("7219320201", +("7219320299", +("7219330100", +("7219340100", +("7219350201", +("7219350299", +("7219909900", +("7220110100", +("7220120100", +("7220200301", +("7220200302", +("7220200399", +("7220909900", +("7221000101", +("7221000199", +("7222110201", +("7222110299", +("7222199900", +("7222200100", +("7222300201", +("7222300299", +("7222400101", +("7222400199", +("7223000201", +("7223000299", +("7224100601", +("7224100602", +("7224100603", +("7224100604", +("7224100605", +("7224100691", +("7224100699", +("7224900200", +("7224909901", +("7224909902", +("7224909999", +("7225110100", +("7225199900", +("7225300701", +("7225300702", +("7225300703", +("7225300704", +("7225300705", +("7225300706", +("7225300707", +("7225300707", +("7225300707", +("7225300707", +("7225300791", +("7225300792", +("7225300799", +("7225400601", +("7225400602", +("7225400603", +("7225400604", +("7225400605", +("7225400606", +("7225400607", +("7225400608", +("7225400691", +("7225400699", +("7225400699", +("7225500701", +("7225500702", +("7225500703", +("7225500704", +("7225500705", +("7225500706", +("7225500707", +("7225500708", +("7225500709", +("7225500710", +("7225500710", +("7225500710", +("7225500710", +("7225500710", +("7225500710", +("7225500710", +("7225500710", +("7225500711", +("7225500791", +("7225500799", +("7225910100", +("7225920101", +("7225920199", +("7225999901", +("7225999902", +("7225999903", +("7225999999", +("7226110100", +("7226199900", +("7226200100", +("7226910701", +("7226910702", +("7226910703", +("7226910704", +("7226910705", +("7226910706", +("7226910707", +("7226910708", +("7226910791", +("7226910799", +("7226920601", +("7226920602", +("7226920603", +("7226920604", +("7226920605", +("7226920606", +("7226920699", +("7226999901", +("7226999902", +("7226999999", +("7227100100", +("7227200101", +("7227200199", +("7227909901", +("7227909902", +("7227909903", +("7227909904", +("7227909999", +("7228100201", +("7228100299", +("7228200201", +("7228200299", +("7228300100", +("7228309901", +("7228309999", +("7228400201", +("7228400299", +("7228500201", +("7228500299", +("7228600201", +("7228600202", +("7228600299", +("7228700101", +("7228700199", +("7228800100", +("7229200100", +("7229909901", +("7229909902", +("7229909903", +("7229909904", +("7229909999", +("7301100100", +("7301200100", +("7302100201", +("7302100202", +("7302100299", +("7302300100", +("7302400201", +("7302400299", +("7302909901", +("7302909902", +("7302909999", +("7303000201", +("7303000299", +("7304110100", +("7304110200", +("7304110300", +("7304110400", +("7304119901", +("7304119999", +("7304190101", +("7304190102", +("7304190103", +("7304190104", +("7304190201", +("7304190299", +("7304190301", +("7304190399", +("7304190401", +("7304190491", +("7304190499", +("7304190500", +("7304199901", +("7304199991", +("7304199999", +("7304220401", +("7304220402", +("7304220403", +("7304220499", +("7304230400", +("7304239901", +("7304239902", +("7304239999", +("7304240701", +("7304240702", +("7304240703", +("7304240704", +("7304240705", +("7304240706", +("7304240799", +("7304299901", +("7304299902", +("7304299903", +("7304299904", +("7304299905", +("7304299906", +("7304299991", +("7304299999", +("7304310101", +("7304310199", +("7304311001", +("7304311099", +("7304319901", +("7304319902", +("7304319903", +("7304319904", +("7304319905", +("7304319906", +("7304319907", +("7304319908", +("7304319909", +("7304319991", +("7304319999", +("7304390101", +("7304390199", +("7304390201", +("7304390299", +("7304390300", +("7304390400", +("7304390800", +("7304390900", +("7304391000", +("7304391100", +("7304391200", +("7304391300", +("7304391400", +("7304391500", +("7304391600", +("7304399100", +("7304399200", +("7304399901", +("7304399902", +("7304399991", +("7304399992", +("7304399999", +("7304410301", +("7304410302", +("7304410399", +("7304499901", +("7304499999", +("7304511201", +("7304511202", +("7304511203", +("7304511204", +("7304511205", +("7304511206", +("7304511207", +("7304511208", +("7304511209", +("7304511210", +("7304511211", +("7304511291", +("7304511299", +("7304590900", +("7304599901", +("7304599902", +("7304599903", +("7304599904", +("7304599905", +("7304599906", +("7304599907", +("7304599908", +("7304599909", +("7304599910", +("7304599911", +("7304599912", +("7304599913", +("7304599991", +("7304599992", +("7304599999", +("7304909900", +("7305110201", +("7305110202", +("7305110299", +("7305120201", +("7305120202", +("7305120299", +("7305199901", +("7305199999", +("7305200100", +("7305209900", +("7305310100", +("7305310200", +("7305310300", +("7305310400", +("7305310500", +("7305310600", +("7305319100", +("7305319900", +("7305390100", +("7305390200", +("7305390300", +("7305390400", +("7305390500", +("7305399900", +("7305909901", +("7305909999", +("7306110100", +("7306199901", +("7306199902", +("7306199999", +("7306210100", +("7306299900", +("7306300200", +("7306300300", +("7306300400", +("7306309901", +("7306309902", +("7306309903", +("7306309904", +("7306309905", +("7306309906", +("7306309991", +("7306309999", +("7306400100", +("7306409900", +("7306500100", +("7306509901", +("7306509902", +("7306509999", +("7306610101", +("7306610102", +("7306610103", +("7306610103", +("7306610103", +("7306610199", +("7306699901", +("7306699902", +("7306699999", +("7306909900", +("7307110200", +("7307110200", +("7307199901", +("7307199902", +("7307199903", +("7307199999", +("7307199999", +("7307199999", +("7307199999", +("7307210100", +("7307220200", +("7307220200", +("7307230100", +("7307239900", +("7307299900", +("7307910100", +("7307920200", +("7307920200", +("7307930101", +("7307930199", +("7307999901", +("7307999902", +("7307999903", +("7307999999", +("7307999999", +("7307999999", +("7308100100", +("7308200201", +("7308200299", +("7308300201", +("7308300299", +("7308400100", +("7308900100", +("7308900200", +("7308909901", +("7308909999", +("7309000401", +("7309000499", +("7309000499", +("7309000499", +("7310100501", +("7310100501", +("7310100502", +("7310100599", +("7310100599", +("7310210100", +("7310290100", +("7310290500", +("7310299901", +("7310299999", +("7310299999", +("7310299999", +("7311000501", +("7311000502", +("7311000599", +("7311000599", +("7311000599", +("7312100100", +("7312100501", +("7312100502", +("7312100599", +("7312100700", +("7312100801", +("7312100899", +("7312109901", +("7312109902", +("7312109903", +("7312109904", +("7312109905", +("7312109906", +("7312109907", +("7312109999", +("7312109999", +("7312109999", +("7312909900", +("7313000100", +("7314120100", +("7314140100", +("7314190301", +("7314190302", +("7314190399", +("7314199901", +("7314199902", +("7314199999", +("7314199999", +("7314200100", +("7314310101", +("7314310102", +("7314310103", +("7314310199", +("7314399900", +("7314410101", +("7314410102", +("7314410199", +("7314420100", +("7314499901", +("7314499999", +("7314500100", +("7315110601", +("7315110601", +("7315110602", +("7315110602", +("7315110603", +("7315110604", +("7315110604", +("7315110699", +("7315110699", +("7315120301", +("7315120399", +("7315120399", +("7315190401", +("7315190402", +("7315190403", +("7315190499", +("7315200100", +("7315810301", +("7315810399", +("7315810399", +("7315820301", +("7315820302", +("7315820399", +("7315899901", +("7315899999", +("7315899999", +("7315900100", +("7316000100", +("7317000100", +("7317000200", +("7317000300", +("7317000400", +("7317009901", +("7317009902", +("7317009903", +("7317009904", +("7317009905", +("7317009906", +("7317009991", +("7317009999", +("7318110100", +("7318120100", +("7318130100", +("7318140100", +("7318150400", +("7318159901", +("7318159902", +("7318159903", +("7318159904", +("7318159905", +("7318159906", +("7318159907", +("7318159908", +("7318159909", +("7318159999", +("7318160601", +("7318160602", +("7318160603", +("7318160604", +("7318160605", +("7318199901", +("7318199901", +("7318199999", +("7318199999", +("7318210200", +("7318210200", +("7318220201", +("7318220299", +("7318230201", +("7318230299", +("7318240301", +("7318240301", +("7318240399", +("7318240399", +("7318299901", +("7318299999", +("7319400100", +("7319900100", +("7319909900", +("7320100200", +("7320100200", +("7320200501", +("7320200502", +("7320200503", +("7320200599", +("7320200599", +("7320909901", +("7320909999", +("7320909999", +("7320909999", +("7321110100", +("7321110200", +("7321119900", +("7321120100", +("7321190100", +("7321810201", +("7321810299", +("7321820200", +("7321820200", +("7321890100", +("7321900100", +("7321900200", +("7321900300", +("7321900400", +("7321900500", +("7321900600", +("7321900700", +("7321909900", +("7322110200", +("7322110200", +("7322190100", +("7322199900", +("7322900100", +("7322909900", +("7323100100", +("7323910300", +("7323910300", +("7323910300", +("7323920401", +("7323920499", +("7323920499", +("7323920499", +("7323930500", +("7323930500", +("7323930500", +("7323930500", +("7323930500", +("7323940501", +("7323940502", +("7323940599", +("7323940599", +("7323940599", +("7323999900", +("7324100100", +("7324210100", +("7324299900", +("7324900401", +("7324900499", +("7324900499", +("7324900499", +("7325100501", +("7325100599", +("7325100599", +("7325100599", +("7325100599", +("7325910301", +("7325910399", +("7325910399", +("7325999901", +("7325999901", +("7325999902", +("7325999902", +("7325999999", +("7325999999", +("7325999999", +("7325999999", +("7325999999", +("7326110301", +("7326110399", +("7326110399", +("7326199901", +("7326199902", +("7326199903", +("7326199904", +("7326199905", +("7326199906", +("7326199907", +("7326199908", +("7326199909", +("7326199910", +("7326199999", +("7326199999", +("7326199999", +("7326199999", +("7326199999", +("7326200601", +("7326200602", +("7326200699", +("7326200699", +("7326200699", +("7326200699", +("7326909901", +("7326909902", +("7326909903", +("7326909904", +("7326909905", +("7326909906", +("7326909907", +("7326909908", +("7326909908", +("7326909909", +("7326909910", +("7326909999", +("7326909999", +("7326909999", +("7326909999", +("7326909999", +("7326909999", +("7326909999", +("7326909999", +("7401000301", +("7401000302", +("7402000100", +("7403110100", +("7403120100", +("7403130100", +("7403199900", +("7403210100", +("7403220100", +("7403290201", +("7403290299", +("7404000301", +("7404000302", +("7404000399", +("7405000100", +("7406100100", +("7406200100", +("7407100100", +("7407109901", +("7407109999", +("7407210200", +("7407219901", +("7407219999", +("7407299901", +("7407299902", +("7407299903", +("7407299999", +("7407299999", +("7407299999", +("7408110201", +("7408110299", +("7408190100", +("7408190200", +("7408199900", +("7408210100", +("7408220100", +("7408229900", +("7408299900", +("7409110100", +("7409199900", +("7409210100", +("7409299900", +("7409310100", +("7409399900", +("7409400100", +("7409900100", +("7410110100", +("7410120100", +("7410210400", +("7410210400", +("7410210400", +("7410210400", +("7410220100", +("7411100100", +("7411109901", +("7411109902", +("7411109903", +("7411109999", +("7411210100", +("7411210500", +("7411219901", +("7411219999", +("7411219999", +("7411219999", +("7411220100", +("7411220200", +("7411229900", +("7411229900", +("7411229900", +("7411290100", +("7411299900", +("7411299900", +("7411299900", +("7411299900", +("7412100100", +("7412200100", +("7413000200", +("7413000200", +("7415100200", +("7415100200", +("7415210100", +("7415299900", +("7415299900", +("7415330300", +("7415330300", +("7415330300", +("7415399900", +("7415399900", +("7418100100", +("7418200100", +("7419100100", +("7419910100", +("7419910200", +("7419910300", +("7419910400", +("7419910500", +("7419910600", +("7419919900", +("7419990100", +("7419990200", +("7419999901", +("7419999902", +("7419999903", +("7419999904", +("7419999905", +("7419999999", +("7419999999", +("7419999999", +("7419999999", +("7419999999", +("7419999999", +("7419999999", +("7419999999", +("7419999999", +("7501100100", +("7501200100", +("7502100100", +("7502200100", +("7503000100", +("7504000100", +("7505110100", +("7505120100", +("7505210100", +("7505220100", +("7506100201", +("7506100299", +("7506200200", +("7506200200", +("7507110100", +("7507120100", +("7507200100", +("7508100100", +("7508909901", +("7508909999", +("7508909999", +("7508909999", +("7601100201", +("7601100299", +("7601200201", +("7601200299", +("7602000201", +("7602000299", +("7603100100", +("7603200100", +("7604100100", +("7604100200", +("7604109900", +("7604210100", +("7604290100", +("7604290200", +("7604299900", +("7605110100", +("7605119900", +("7605199900", +("7605210100", +("7605210200", +("7605219900", +("7605290100", +("7605290200", +("7605299900", +("7606110100", +("7606119900", +("7606120100", +("7606120200", +("7606120300", +("7606129900", +("7606910100", +("7606919900", +("7606920100", +("7606929900", +("7607110100", +("7607190100", +("7607190200", +("7607190300", +("7607199900", +("7607200200", +("7607200200", +("7608100300", +("7608109901", +("7608109901", +("7608109999", +("7608200100", +("7608200200", +("7608200300", +("7608209900", +("7609000201", +("7609000299", +("7610100100", +("7610900100", +("7610909900", +("7611000100", +("7612100100", +("7612900100", +("7612909900", +("7613000100", +("7614100101", +("7614100191", +("7614100199", +("7614909901", +("7614909999", +("7615100201", +("7615100202", +("7615100299", +("7615200100", +("7616100100", +("7616100200", +("7616100300", +("7616109900", +("7616910100", +("7616990100", +("7616990200", +("7616990300", +("7616990400", +("7616990500", +("7616990600", +("7616990700", +("7616990800", +("7616990900", +("7616991000", +("7616991100", +("7616991200", +("7616991300", +("7616991400", +("7616991500", +("7616999991", +("7616999992", +("7616999999", +("7801100100", +("7801910100", +("7801999900", +("7802000100", +("7804110100", +("7804199900", +("7804200100", +("7806000301", +("7806000399", +("7806000399", +("7901110100", +("7901120100", +("7901200100", +("7902000100", +("7903100100", +("7903909900", +("7904000100", +("7905000100", +("7907000201", +("7907000299", +("8001100100", +("8001200100", +("8002000100", +("8003000100", +("8007000100", +("8007000200", +("8007000300", +("8007009900", +("8101100100", +("8101940100", +("8101960301", +("8101960399", +("8101960399", +("8101970100", +("8101999901", +("8101999999", +("8102100100", +("8102940100", +("8102950200", +("8102950200", +("8102960100", +("8102970100", +("8102999900", +("8103200100", +("8103300100", +("8103909900", +("8104110100", +("8104199900", +("8104200100", +("8104300100", +("8104909901", +("8104909902", +("8104909999", +("8105200100", +("8105300100", +("8105909900", +("8106000100", +("8107200100", +("8107300100", +("8107909900", +("8108200100", +("8108300100", +("8108900100", +("8108909900", +("8109200100", +("8109300100", +("8109909900", +("8110100100", +("8110200100", +("8110909900", +("8111000201", +("8111000299", +("8112120100", +("8112130100", +("8112199900", +("8112210100", +("8112220100", +("8112299900", +("8112510100", +("8112520100", +("8112599900", +("8112920100", +("8112999900", +("8113000201", +("8113000299", +("8201100200", +("8201100200", +("8201300201", +("8201300299", +("8201400100", +("8201500100", +("8201600100", +("8201600200", +("8201900200", +("8201900300", +("8201909901", +("8201909999", +("8201909999", +("8202100100", +("8202100400", +("8202100500", +("8202100500", +("8202109900", +("8202200100", +("8202310100", +("8202319900", +("8202390100", +("8202390200", +("8202390300", +("8202390400", +("8202390500", +("8202390600", +("8202390700", +("8202399900", +("8202400201", +("8202400299", +("8202910401", +("8202910499", +("8202910499", +("8202910499", +("8202990100", +("8202999900", +("8203100200", +("8203109901", +("8203109999", +("8203200100", +("8203209900", +("8203300100", +("8203400100", +("8203400300", +("8203409901", +("8203409999", +("8204110100", +("8204110200", +("8204119900", +("8204120100", +("8204129901", +("8204129999", +("8204200100", +("8204209900", +("8205100100", +("8205109901", +("8205109999", +("8205109999", +("8205200100", +("8205300100", +("8205309900", +("8205400100", +("8205409900", +("8205510200", +("8205519901", +("8205519999", +("8205519999", +("8205590500", +("8205590800", +("8205590900", +("8205591000", +("8205591300", +("8205591400", +("8205591500", +("8205591600", +("8205599901", +("8205599902", +("8205599903", +("8205599904", +("8205599905", +("8205599906", +("8205599907", +("8205599908", +("8205599909", +("8205599999", +("8205599999", +("8205599999", +("8205600200", +("8205600200", +("8205700300", +("8205709901", +("8205709902", +("8205709999", +("8205900500", +("8205900500", +("8205900500", +("8206000100", +("8207130801", +("8207130802", +("8207130803", +("8207130899", +("8207130899", +("8207130899", +("8207130899", +("8207130899", +("8207191001", +("8207191002", +("8207191003", +("8207191004", +("8207191005", +("8207191006", +("8207191007", +("8207191099", +("8207191099", +("8207191099", +("8207200100", +("8207300301", +("8207300302", +("8207400401", +("8207400499", +("8207400499", +("8207400499", +("8207500701", +("8207500702", +("8207500703", +("8207500704", +("8207500705", +("8207500799", +("8207500799", +("8207600601", +("8207600602", +("8207600603", +("8207600604", +("8207600699", +("8207600699", +("8207700301", +("8207700302", +("8207700399", +("8207800100", +("8207900100", +("8207909900", +("8208100201", +("8208100299", +("8208200200", +("8208200200", +("8208300201", +("8208300299", +("8208400301", +("8208400302", +("8208400399", +("8208909900", +("8209000100", +("8210000100", +("8211100100", +("8211910100", +("8211920100", +("8211929900", +("8211930100", +("8211940100", +("8211950100", +("8212100100", +("8212109900", +("8212200100", +("8212900100", +("8212909900", +("8213000100", +("8214100201", +("8214100299", +("8214200201", +("8214200299", +("8214900100", +("8214900500", +("8214900500", +("8214909900", +("8214909900", +("8215100100", +("8215200100", +("8215910100", +("8215999901", +("8215999999", +("8301100100", +("8301200201", +("8301200299", +("8301300100", +("8301400100", +("8301500100", +("8301509900", +("8301600201", +("8301600299", +("8301700201", +("8301700299", +("8302100100", +("8302100200", +("8302109900", +("8302200201", +("8302200299", +("8302300100", +("8302410601", +("8302410602", +("8302410603", +("8302410604", +("8302410699", +("8302410699", +("8302420301", +("8302420302", +("8302420303", +("8302420399", +("8302499900", +("8302500100", +("8302600100", +("8303000100", +("8304000300", +("8304000300", +("8304000300", +("8305100100", +("8305200100", +("8305900100", +("8305900200", +("8305909900", +("8306100100", +("8306210100", +("8306299900", +("8306300100", +("8307100100", +("8307109900", +("8307900100", +("8308100100", +("8308109900", +("8308200100", +("8308900100", +("8309100100", +("8309900100", +("8309900300", +("8309900600", +("8309900700", +("8309900800", +("8309909901", +("8309909902", +("8309909999", +("8309909999", +("8310000100", +("8310009900", +("8311100200", +("8311100300", +("8311100400", +("8311109901", +("8311109999", +("8311200501", +("8311200502", +("8311200503", +("8311200504", +("8311200599", +("8311300100", +("8311309901", +("8311309902", +("8311309999", +("8311309999", +("8311900100", +("8311900200", +("8311900300", +("8311900400", +("8311900500", +("8311909900", +("8401100100", +("8401200100", +("8401300100", +("8401400100", +("8402110100", +("8402120100", +("8402190100", +("8402199900", +("8402200100", +("8402900100", +("8403100100", +("8403900100", +("8404100100", +("8404200100", +("8404900100", +("8405100100", +("8405100200", +("8405109900", +("8405900100", +("8406100100", +("8406109900", +("8406810100", +("8406820100", +("8406829900", +("8406900100", +("8406900200", +("8406909900", +("8406909900", +("8407100100", +("8407210201", +("8407210299", +("8407290100", +("8407299900", +("8407310100", +("8407319900", +("8407320200", +("8407329901", +("8407329999", +("8407329999", +("8407330400", +("8407330400", +("8407330400", +("8407330400", +("8407340301", +("8407340399", +("8407340399", +("8407900201", +("8407900299", +("8408100100", +("8408109900", +("8408200100", +("8408900100", +("8408909900", +("8409100100", +("8409910500", +("8409911100", +("8409919901", +("8409919902", +("8409919903", +("8409919904", +("8409919905", +("8409919906", +("8409919907", +("8409919908", +("8409919909", +("8409919910", +("8409919911", +("8409919912", +("8409919913", +("8409919914", +("8409919915", +("8409919916", +("8409919999", +("8409919999", +("8409919999", +("8409990100", +("8409990200", +("8409990300", +("8409990300", +("8409990400", +("8409990500", +("8409990800", +("8409990900", +("8409991000", +("8409991100", +("8409991200", +("8409991300", +("8409991400", +("8409999900", +("8410110100", +("8410120200", +("8410120200", +("8410130200", +("8410130200", +("8410900100", +("8411110100", +("8411120100", +("8411210100", +("8411220100", +("8411810100", +("8411820100", +("8411910100", +("8411999900", +("8412100100", +("8412210100", +("8412299900", +("8412310100", +("8412319900", +("8412399900", +("8412399900", +("8412800100", +("8412809900", +("8412900100", +("8413110100", +("8413119900", +("8413190100", +("8413190300", +("8413199901", +("8413199999", +("8413199999", +("8413200100", +("8413300300", +("8413309901", +("8413309902", +("8413309903", +("8413309904", +("8413309905", +("8413309999", +("8413400200", +("8413400200", +("8413500200", +("8413509901", +("8413509999", +("8413600100", +("8413600400", +("8413600600", +("8413609901", +("8413609902", +("8413609903", +("8413609999", +("8413700100", +("8413700200", +("8413700500", +("8413700700", +("8413709901", +("8413709902", +("8413709903", +("8413709999", +("8413810100", +("8413810200", +("8413810300", +("8413819900", +("8413820100", +("8413911301", +("8413911302", +("8413911303", +("8413911304", +("8413911305", +("8413911306", +("8413911307", +("8413911308", +("8413911399", +("8413911399", +("8413911399", +("8413911399", +("8413911399", +("8413920100", +("8414100601", +("8414100602", +("8414100603", +("8414100699", +("8414100699", +("8414100699", +("8414200100", +("8414300100", +("8414300100", +("8414300200", +("8414300300", +("8414300400", +("8414300500", +("8414300600", +("8414300700", +("8414300800", +("8414301000", +("8414309900", +("8414400100", +("8414400200", +("8414409900", +("8414510100", +("8414510200", +("8414519900", +("8414590100", +("8414599900", +("8414600100", +("8414609900", +("8414800600", +("8414800700", +("8414800800", +("8414801000", +("8414809901", +("8414809902", +("8414809902", +("8414809903", +("8414809904", +("8414809905", +("8414809906", +("8414809907", +("8414809908", +("8414809909", +("8414809999", +("8414809999", +("8414809999", +("8414901001", +("8414901002", +("8414901003", +("8414901004", +("8414901005", +("8414901099", +("8414901099", +("8414901099", +("8414901099", +("8414901099", +("8415100101", +("8415100102", +("8415100199", +("8415200100", +("8415810100", +("8415820100", +("8415829900", +("8415830100", +("8415900201", +("8415900299", +("8416100100", +("8416109900", +("8416200100", +("8416209900", +("8416300100", +("8416309900", +("8416900201", +("8416900299", +("8417100300", +("8417109901", +("8417109902", +("8417109903", +("8417109999", +("8417109999", +("8417200200", +("8417200200", +("8417800100", +("8417800200", +("8417800300", +("8417800400", +("8417800500", +("8417809900", +("8417900100", +("8418100100", +("8418109900", +("8418210100", +("8418290100", +("8418299900", +("8418300100", +("8418300200", +("8418300400", +("8418309901", +("8418309999", +("8418400100", +("8418400200", +("8418400400", +("8418409901", +("8418409999", +("8418500100", +("8418500300", +("8418509901", +("8418509999", +("8418610100", +("8418619900", +("8418619900", +("8418690100", +("8418690100", +("8418690100", +("8418690400", +("8418690500", +("8418690600", +("8418690700", +("8418690800", +("8418690900", +("8418691000", +("8418691200", +("8418691300", +("8418691400", +("8418691400", +("8418691400", +("8418691500", +("8418699901", +("8418699902", +("8418699999", +("8418910100", +("8418990300", +("8418990400", +("8418999900", +("8418999900", +("8418999900", +("8419110100", +("8419190100", +("8419199901", +("8419199999", +("8419199999", +("8419200201", +("8419200299", +("8419310100", +("8419310200", +("8419310300", +("8419310400", +("8419310500", +("8419319900", +("8419320200", +("8419320200", +("8419399901", +("8419399902", +("8419399999", +("8419399999", +("8419399999", +("8419399999", +("8419400400", +("8419409901", +("8419409902", +("8419409903", +("8419409999", +("8419500300", +("8419509901", +("8419509902", +("8419509903", +("8419509999", +("8419509999", +("8419600100", +("8419810100", +("8419810300", +("8419819901", +("8419819999", +("8419890200", +("8419890300", +("8419890900", +("8419891000", +("8419891100", +("8419891500", +("8419891700", +("8419891800", +("8419891900", +("8419899901", +("8419899902", +("8419899903", +("8419899904", +("8419899905", +("8419899906", +("8419899907", +("8419899908", +("8419899999", +("8419899999", +("8419899999", +("8419899999", +("8419899999", +("8419900401", +("8419900402", +("8419900499", +("8419900499", +("8420100100", +("8420910201", +("8420910299", +("8420999900", +("8421110201", +("8421110299", +("8421120201", +("8421120299", +("8421190100", +("8421190300", +("8421199901", +("8421199902", +("8421199999", +("8421210100", +("8421210200", +("8421210400", +("8421219901", +("8421219999", +("8421220100", +("8421230100", +("8421290100", +("8421290200", +("8421290300", +("8421290600", +("8421290800", +("8421299901", +("8421299902", +("8421299999", +("8421299999", +("8421310100", +("8421310200", +("8421319900", +("8421390200", +("8421390300", +("8421390500", +("8421390600", +("8421390700", +("8421390800", +("8421399901", +("8421399902", +("8421399999", +("8421910401", +("8421910499", +("8421910499", +("8421910499", +("8421999901", +("8421999999", +("8421999999", +("8421999999", +("8422110100", +("8422199900", +("8422200100", +("8422200200", +("8422209901", +("8422209999", +("8422300800", +("8422309901", +("8422309902", +("8422309903", +("8422309904", +("8422309905", +("8422309906", +("8422309907", +("8422309908", +("8422309999", +("8422309999", +("8422400200", +("8422409901", +("8422409902", +("8422409903", +("8422409999", +("8422409999", +("8422409999", +("8422900501", +("8422900502", +("8422900599", +("8422900599", +("8422900599", +("8423100201", +("8423100299", +("8423200100", +("8423209900", +("8423300201", +("8423300299", +("8423810301", +("8423810302", +("8423820301", +("8423820302", +("8423899900", +("8423900200", +("8423900200", +("8424100301", +("8424100399", +("8424100399", +("8424200100", +("8424209901", +("8424209999", +("8424209999", +("8424300400", +("8424309901", +("8424309902", +("8424309999", +("8424309999", +("8424410201", +("8424410299", +("8424499901", +("8424499999", +("8424820701", +("8424820702", +("8424820703", +("8424820704", +("8424820705", +("8424820706", +("8424820799", +("8424899901", +("8424899999", +("8424899999", +("8424900100", +("8425110100", +("8425119900", +("8425199900", +("8425310100", +("8425310200", +("8425319900", +("8425390100", +("8425390200", +("8425390300", +("8425399900", +("8425410100", +("8425420100", +("8425420200", +("8425429900", +("8425499900", +("8426110100", +("8426120100", +("8426199900", +("8426200100", +("8426300100", +("8426410100", +("8426410200", +("8426419901", +("8426419902", +("8426419999", +("8426499901", +("8426499999", +("8426499999", +("8426910300", +("8426919901", +("8426919902", +("8426919999", +("8426990300", +("8426990400", +("8426999901", +("8426999902", +("8426999999", +("8427100100", +("8427109901", +("8427109999", +("8427200100", +("8427200200", +("8427200300", +("8427200400", +("8427200500", +("8427209900", +("8427900200", +("8427900200", +("8428100100", +("8428200200", +("8428200300", +("8428209900", +("8428209900", +("8428310100", +("8428329900", +("8428339900", +("8428399901", +("8428399902", +("8428399999", +("8428400200", +("8428409901", +("8428409999", +("8428600100", +("8428900100", +("8428900200", +("8428900300", +("8428900600", +("8428909901", +("8428909999", +("8429110100", +("8429199900", +("8429200100", +("8429300100", +("8429400201", +("8429400299", +("8429510300", +("8429519901", +("8429519902", +("8429519999", +("8429520301", +("8429520302", +("8429520399", +("8429590100", +("8429590200", +("8429590500", +("8429599901", +("8429599902", +("8429599999", +("8430100100", +("8430200100", +("8430310301", +("8430310302", +("8430310399", +("8430390100", +("8430399900", +("8430410301", +("8430410302", +("8430410399", +("8430499900", +("8430499900", +("8430499900", +("8430500100", +("8430500200", +("8430509900", +("8430610100", +("8430610200", +("8430619900", +("8430690100", +("8430690200", +("8430690300", +("8430690400", +("8430699900", +("8431100100", +("8431200201", +("8431200299", +("8431310201", +("8431310299", +("8431399900", +("8431410401", +("8431410402", +("8431410403", +("8431410499", +("8431420100", +("8431430301", +("8431430399", +("8431430399", +("8431499901", +("8431499902", +("8431499999", +("8431499999", +("8432100100", +("8432210100", +("8432299901", +("8432299999", +("8432310401", +("8432310402", +("8432310403", +("8432310499", +("8432399900", +("8432399900", +("8432399900", +("8432410100", +("8432420100", +("8432800401", +("8432800402", +("8432800499", +("8432800499", +("8432900100", +("8433110100", +("8433199900", +("8433200301", +("8433200302", +("8433200399", +("8433300100", +("8433400301", +("8433400399", +("8433400399", +("8433510100", +("8433520100", +("8433530100", +("8433599901", +("8433599902", +("8433599903", +("8433599904", +("8433599999", +("8433600401", +("8433600499", +("8433600499", +("8433600499", +("8433900401", +("8433900402", +("8433900499", +("8433900499", +("8434100100", +("8434200100", +("8434900100", +("8435100100", +("8435900100", +("8436100100", +("8436210100", +("8436299901", +("8436299999", +("8436800401", +("8436800402", +("8436800499", +("8436800499", +("8436910100", +("8436999900", +("8437100401", +("8437100499", +("8437100499", +("8437100499", +("8437800301", +("8437800399", +("8437800399", +("8437900201", +("8437900299", +("8438100100", +("8438100300", +("8438100400", +("8438109901", +("8438109902", +("8438109903", +("8438109904", +("8438109999", +("8438200301", +("8438200399", +("8438200399", +("8438300100", +("8438309900", +("8438400201", +("8438400299", +("8438500600", +("8438509901", +("8438509902", +("8438509903", +("8438509904", +("8438509905", +("8438509999", +("8438509999", +("8438509999", +("8438600400", +("8438609901", +("8438609902", +("8438609999", +("8438609999", +("8438609999", +("8438800401", +("8438800402", +("8438800499", +("8438800499", +("8438900601", +("8438900602", +("8438900603", +("8438900699", +("8438900699", +("8438900699", +("8439100600", +("8439100600", +("8439100600", +("8439100600", +("8439100600", +("8439100600", +("8439200100", +("8439300100", +("8439910100", +("8439999900", +("8440100201", +("8440100299", +("8440900100", +("8441100401", +("8441100402", +("8441100403", +("8441100499", +("8441200100", +("8441300100", +("8441400200", +("8441400200", +("8441800100", +("8441900100", +("8442300301", +("8442300302", +("8442300399", +("8442400100", +("8442500100", +("8442500300", +("8442509900", +("8442509900", +("8443110201", +("8443110299", +("8443120100", +("8443130100", +("8443139900", +("8443139900", +("8443140201", +("8443140299", +("8443150200", +("8443150200", +("8443160100", +("8443170100", +("8443199901", +("8443199902", +("8443199999", +("8443199999", +("8443310100", +("8443320901", +("8443320902", +("8443320903", +("8443320903", +("8443320904", +("8443320905", +("8443320991", +("8443320999", +("8443320999", +("8443390200", +("8443390500", +("8443390600", +("8443399901", +("8443399902", +("8443399991", +("8443399999", +("8443399999", +("8443399999", +("8443910200", +("8443919901", +("8443919999", +("8443990500", +("8443990600", +("8443991000", +("8443999901", +("8443999902", +("8443999903", +("8443999999", +("8443999999", +("8443999999", +("8443999999", +("8443999999", +("8444000100", +("8445110100", +("8445120100", +("8445130100", +("8445199901", +("8445199999", +("8445200100", +("8445300201", +("8445300299", +("8445400100", +("8445909901", +("8445909999", +("8446100100", +("8446210100", +("8446299900", +("8446300100", +("8447110100", +("8447120100", +("8447200201", +("8447200299", +("8447909901", +("8447909999", +("8448110100", +("8448199900", +("8448200100", +("8448310100", +("8448320100", +("8448330100", +("8448399900", +("8448420100", +("8448499900", +("8448499900", +("8448510100", +("8448599900", +("8449000100", +("8450110100", +("8450119900", +("8450120201", +("8450120299", +("8450199900", +("8450199900", +("8450200100", +("8450900301", +("8450900399", +("8450900399", +("8451100100", +("8451210201", +("8451210299", +("8451299901", +("8451299999", +("8451299999", +("8451299999", +("8451300100", +("8451400100", +("8451500100", +("8451800201", +("8451800299", +("8451900301", +("8451900399", +("8451900399", +("8452100100", +("8452210601", +("8452210602", +("8452210603", +("8452210604", +("8452210699", +("8452210699", +("8452299901", +("8452299902", +("8452299903", +("8452299904", +("8452299905", +("8452299906", +("8452299999", +("8452299999", +("8452300100", +("8452900100", +("8452909901", +("8452909999", +("8453100100", +("8453200100", +("8453800100", +("8453900100", +("8454100100", +("8454200200", +("8454200200", +("8454300201", +("8454300299", +("8454900201", +("8454900299", +("8455100100", +("8455210301", +("8455210399", +("8455210399", +("8455220301", +("8455220302", +("8455220399", +("8455300301", +("8455300302", +("8455300399", +("8455900100", +("8455909900", +("8456110201", +("8456110299", +("8456120201", +("8456120299", +("8456200200", +("8456200200", +("8456300100", +("8456400100", +("8456500100", +("8456909900", +("8457100100", +("8457200100", +("8457300200", +("8457300300", +("8457309901", +("8457309902", +("8457309999", +("8458110100", +("8458119901", +("8458119999", +("8458190100", +("8458199900", +("8458199900", +("8458910201", +("8458910299", +("8458999900", +("8458999900", +("8459100201", +("8459100299", +("8459210200", +("8459210200", +("8459299901", +("8459299999", +("8459310100", +("8459399900", +("8459410100", +("8459419900", +("8459490100", +("8459499900", +("8459510100", +("8459599900", +("8459610100", +("8459699900", +("8459700301", +("8459700302", +("8459700399", +("8460120201", +("8460120201", +("8460120299", +("8460120299", +("8460199900", +("8460199900", +("8460199900", +("8460220100", +("8460220100", +("8460230501", +("8460230502", +("8460230503", +("8460230599", +("8460240201", +("8460240299", +("8460240299", +("8460299900", +("8460299900", +("8460299900", +("8460299900", +("8460299900", +("8460299900", +("8460310200", +("8460310200", +("8460399900", +("8460399900", +("8460400301", +("8460400399", +("8460400399", +("8460909901", +("8460909902", +("8460909903", +("8460909999", +("8461200200", +("8461200200", +("8461300201", +("8461300299", +("8461400100", +("8461500200", +("8461500300", +("8461509901", +("8461509999", +("8461900300", +("8461909901", +("8461909999", +("8461909999", +("8461909999", +("8462100100", +("8462109900", +("8462210100", +("8462210600", +("8462210700", +("8462219901", +("8462219902", +("8462219903", +("8462219904", +("8462219999", +("8462290100", +("8462290300", +("8462290500", +("8462290600", +("8462290700", +("8462299901", +("8462299902", +("8462299999", +("8462310100", +("8462310300", +("8462319901", +("8462319999", +("8462390100", +("8462390300", +("8462399901", +("8462399999", +("8462410401", +("8462410402", +("8462410403", +("8462410499", +("8462490100", +("8462490200", +("8462499901", +("8462499999", +("8462910100", +("8462910200", +("8462910300", +("8462919900", +("8462990400", +("8462999901", +("8462999999", +("8462999999", +("8462999999", +("8463100100", +("8463200100", +("8463300401", +("8463300402", +("8463300499", +("8463300499", +("8463909900", +("8463909900", +("8464100100", +("8464200100", +("8464909901", +("8464909999", +("8465100100", +("8465200100", +("8465200100", +("8465200100", +("8465200100", +("8465200100", +("8465200100", +("8465200100", +("8465910100", +("8465919900", +("8465920401", +("8465920402", +("8465920499", +("8465920499", +("8465930201", +("8465930299", +("8465940300", +("8465940300", +("8465940300", +("8465950100", +("8465959900", +("8465960100", +("8465990200", +("8465999900", +("8465999900", +("8465999900", +("8466100300", +("8466109901", +("8466109902", +("8466109999", +("8466200201", +("8466200299", +("8466300301", +("8466300399", +("8466300399", +("8466910100", +("8466920100", +("8466930300", +("8466930400", +("8466939901", +("8466939902", +("8466939999", +("8466940100", +("8466949900", +("8466949900", +("8467110201", +("8467110299", +("8467199900", +("8467199900", +("8467210100", +("8467210200", +("8467210300", +("8467219900", +("8467220200", +("8467220300", +("8467229900", +("8467229900", +("8467290100", +("8467290200", +("8467290300", +("8467299900", +("8467810100", +("8467890200", +("8467890300", +("8467899901", +("8467899999", +("8467910201", +("8467910299", +("8467920100", +("8467999901", +("8467999991", +("8467999999", +("8468100100", +("8468200201", +("8468200299", +("8468809900", +("8468900100", +("8470100301", +("8470100302", +("8470100399", +("8470210100", +("8470299900", +("8470299900", +("8470300100", +("8470500100", +("8470900300", +("8470909901", +("8470909999", +("8470909999", +("8471300101", +("8471300199", +("8471410100", +("8471490100", +("8471500100", +("8471600401", +("8471600402", +("8471600403", +("8471600499", +("8471700100", +("8471800401", +("8471800402", +("8471800403", +("8471800499", +("8471909900", +("8472100100", +("8472109900", +("8472300100", +("8472300200", +("8472309900", +("8472900100", +("8472900500", +("8472901000", +("8472901200", +("8472901300", +("8472901400", +("8472901600", +("8472909901", +("8472909902", +("8472909903", +("8472909904", +("8472909991", +("8472909999", +("8472909999", +("8472909999", +("8472909999", +("8472909999", +("8472909999", +("8472909999", +("8472909999", +("8472909999", +("8473210100", +("8473299900", +("8473300401", +("8473300402", +("8473300499", +("8473400401", +("8473400402", +("8473400402", +("8473400499", +("8473400499", +("8473400499", +("8473400499", +("8473500301", +("8473500399", +("8473500399", +("8474100100", +("8474109900", +("8474109900", +("8474200400", +("8474200700", +("8474200800", +("8474209901", +("8474209902", +("8474209903", +("8474209904", +("8474209999", +("8474209999", +("8474310100", +("8474320100", +("8474399901", +("8474399999", +("8474399999", +("8474800100", +("8474800400", +("8474809901", +("8474809902", +("8474809903", +("8474809904", +("8474809999", +("8474809999", +("8474809999", +("8474809999", +("8474809999", +("8474900301", +("8474900302", +("8474900399", +("8475100100", +("8475210100", +("8475290100", +("8475299900", +("8475900100", +("8476210100", +("8476299900", +("8476810100", +("8476899900", +("8476900200", +("8476900200", +("8477100100", +("8477109900", +("8477200100", +("8477209901", +("8477209999", +("8477300100", +("8477400100", +("8477510100", +("8477599900", +("8477800600", +("8477809901", +("8477809902", +("8477809903", +("8477809904", +("8477809905", +("8477809999", +("8477809999", +("8477900401", +("8477900402", +("8477900499", +("8477900499", +("8478100100", +("8478100200", +("8478100300", +("8478100400", +("8478109900", +("8478109900", +("8478900100", +("8479100100", +("8479100300", +("8479100400", +("8479100700", +("8479109901", +("8479109902", +("8479109903", +("8479109999", +("8479109999", +("8479200100", +("8479300100", +("8479300200", +("8479309900", +("8479400201", +("8479400299", +("8479500100", +("8479600100", +("8479710100", +("8479799900", +("8479810200", +("8479810300", +("8479810400", +("8479810700", +("8479819901", +("8479819902", +("8479819903", +("8479819904", +("8479819999", +("8479819999", +("8479820100", +("8479820200", +("8479820400", +("8479820500", +("8479829900", +("8479829900", +("8479890300", +("8479890400", +("8479890600", +("8479890700", +("8479890800", +("8479891000", +("8479891200", +("8479891300", +("8479891400", +("8479891900", +("8479892000", +("8479892100", +("8479892200", +("8479892600", +("8479892700", +("8479899901", +("8479899902", +("8479899903", +("8479899904", +("8479899905", +("8479899906", +("8479899907", +("8479899908", +("8479899999", +("8479899999", +("8479899999", +("8479899999", +("8479899999", +("8479901801", +("8479901802", +("8479901803", +("8479901804", +("8479901805", +("8479901806", +("8479901899", +("8479901899", +("8479901899", +("8479901899", +("8479901899", +("8479901899", +("8479901899", +("8479901899", +("8479901899", +("8479901899", +("8479901899", +("8480100100", +("8480200100", +("8480300301", +("8480300399", +("8480300399", +("8480410201", +("8480410299", +("8480499901", +("8480499999", +("8480500301", +("8480500399", +("8480500399", +("8480600100", +("8480609900", +("8480710301", +("8480710302", +("8480710399", +("8480799901", +("8480799902", +("8480799999", +("8480799999", +("8480799999", +("8481100100", +("8481109901", +("8481109999", +("8481200700", +("8481201000", +("8481201200", +("8481209901", +("8481209902", +("8481209903", +("8481209904", +("8481209905", +("8481209906", +("8481209907", +("8481209999", +("8481209999", +("8481209999", +("8481300100", +("8481309901", +("8481309902", +("8481309999", +("8481400400", +("8481409901", +("8481409902", +("8481409999", +("8481409999", +("8481800100", +("8481800200", +("8481800300", +("8481800400", +("8481800500", +("8481800600", +("8481800700", +("8481800800", +("8481800900", +("8481801000", +("8481801100", +("8481801200", +("8481801300", +("8481801400", +("8481801500", +("8481801600", +("8481801700", +("8481801800", +("8481801900", +("8481802000", +("8481802100", +("8481802200", +("8481802300", +("8481802400", +("8481802500", +("8481809900", +("8481900501", +("8481900502", +("8481900503", +("8481900599", +("8481900599", +("8482100200", +("8482109901", +("8482109902", +("8482109999", +("8482200100", +("8482200300", +("8482209900", +("8482209900", +("8482300100", +("8482400100", +("8482500100", +("8482800100", +("8482910201", +("8482910299", +("8482990100", +("8482999901", +("8482999902", +("8482999999", +("8483100801", +("8483100802", +("8483100803", +("8483100804", +("8483100805", +("8483100806", +("8483100807", +("8483100899", +("8483200100", +("8483300401", +("8483300402", +("8483300403", +("8483300499", +("8483400901", +("8483400902", +("8483400903", +("8483400904", +("8483400905", +("8483400906", +("8483400907", +("8483400999", +("8483400999", +("8483500301", +("8483500399", +("8483500399", +("8483600100", +("8483600200", +("8483609900", +("8483900301", +("8483900302", +("8483900399", +("8484100100", +("8484200100", +("8484909901", +("8484909902", +("8484909999", +("8486100100", +("8486200300", +("8486200300", +("8486300100", +("8486400100", +("8486900501", +("8486900502", +("8486900503", +("8486900504", +("8487100201", +("8487100299", +("8487900100", +("8487900200", +("8487900300", +("8487900400", +("8487900500", +("8487900600", +("8487900700", +("8487909900", +("8501101001", +("8501101002", +("8501101003", +("8501101004", +("8501101005", +("8501101006", +("8501101007", +("8501101099", +("8501101099", +("8501101099", +("8501200501", +("8501200502", +("8501200599", +("8501200599", +("8501200599", +("8501310100", +("8501310200", +("8501310300", +("8501310400", +("8501310500", +("8501319900", +("8501320100", +("8501320200", +("8501320300", +("8501320400", +("8501320500", +("8501320600", +("8501329900", +("8501330100", +("8501330200", +("8501330300", +("8501330400", +("8501330500", +("8501339900", +("8501340100", +("8501340500", +("8501349900", +("8501349900", +("8501349900", +("8501349900", +("8501400500", +("8501400800", +("8501409901", +("8501409902", +("8501409999", +("8501409999", +("8501409999", +("8501409999", +("8501409999", +("8501510200", +("8501519901", +("8501519999", +("8501519999", +("8501520400", +("8501529901", +("8501529902", +("8501529999", +("8501529999", +("8501529999", +("8501530400", +("8501530500", +("8501539901", +("8501539902", +("8501539903", +("8501539999", +("8501539999", +("8501539999", +("8501610100", +("8501620100", +("8501630100", +("8501640100", +("8501640300", +("8501649901", +("8501649999", +("8502110100", +("8502120100", +("8502130100", +("8502130200", +("8502139900", +("8502200100", +("8502209901", +("8502209999", +("8502310100", +("8502319900", +("8502390100", +("8502390200", +("8502390300", +("8502390400", +("8502399900", +("8502400100", +("8503000500", +("8503009901", +("8503009902", +("8503009903", +("8503009904", +("8503009905", +("8503009999", +("8504100100", +("8504109900", +("8504210100", +("8504210200", +("8504210300", +("8504219901", +("8504219999", +("8504220100", +("8504230100", +("8504310300", +("8504310400", +("8504319901", +("8504319902", +("8504319903", +("8504319904", +("8504319999", +("8504320100", +("8504329901", +("8504329999", +("8504330201", +("8504330299", +("8504340100", +("8504400100", +("8504400200", +("8504400500", +("8504400600", +("8504400700", +("8504400800", +("8504400900", +("8504401100", +("8504401300", +("8504401400", +("8504401400", +("8504401500", +("8504401600", +("8504401700", +("8504401700", +("8504409900", +("8504500301", +("8504500302", +("8504500399", +("8504900200", +("8504900700", +("8504900800", +("8504909901", +("8504909902", +("8504909999", +("8504909999", +("8504909999", +("8504909999", +("8505110100", +("8505199900", +("8505200100", +("8505900601", +("8505900699", +("8505900699", +("8505900699", +("8505900699", +("8505900699", +("8506100301", +("8506100399", +("8506300100", +("8506400100", +("8506500100", +("8506600100", +("8506800100", +("8506900100", +("8507100100", +("8507109900", +("8507200100", +("8507200200", +("8507200400", +("8507209901", +("8507209999", +("8507300100", +("8507400100", +("8507500100", +("8507600100", +("8507800100", +("8507900100", +("8508110100", +("8508199901", +("8508199999", +("8508600100", +("8508700100", +("8508700200", +("8508709900", +("8509400200", +("8509400300", +("8509409901", +("8509409999", +("8509800300", +("8509800400", +("8509800700", +("8509800900", +("8509809901", +("8509809902", +("8509809999", +("8509809999", +("8509809999", +("8509809999", +("8509809999", +("8509809999", +("8509809999", +("8509900200", +("8509909901", +("8509909999", +("8509909999", +("8510100100", +("8510200100", +("8510300100", +("8510900100", +("8510900200", +("8510900300", +("8510900400", +("8510909900", +("8511100300", +("8511109901", +("8511109999", +("8511109999", +("8511200401", +("8511200499", +("8511200499", +("8511200499", +("8511300501", +("8511300502", +("8511300599", +("8511300599", +("8511300599", +("8511400401", +("8511400402", +("8511400403", +("8511400499", +("8511500501", +("8511500502", +("8511500503", +("8511500504", +("8511500599", +("8511800100", +("8511800200", +("8511800300", +("8511800400", +("8511809900", +("8511900601", +("8511900602", +("8511900603", +("8511900699", +("8511900699", +("8511900699", +("8512100300", +("8512100300", +("8512100300", +("8512200100", +("8512200200", +("8512209900", +("8512300100", +("8512309900", +("8512400100", +("8512900701", +("8512900702", +("8512900703", +("8512900704", +("8512900705", +("8512900799", +("8512900799", +("8513100100", +("8513109900", +("8513900100", +("8514100100", +("8514100200", +("8514100300", +("8514100400", +("8514109900", +("8514200100", +("8514200200", +("8514200300", +("8514200400", +("8514200500", +("8514209900", +("8514300100", +("8514309901", +("8514309902", +("8514309903", +("8514309904", +("8514309905", +("8514309999", +("8514400201", +("8514400299", +("8514900401", +("8514900402", +("8514900499", +("8514900499", +("8515110100", +("8515119900", +("8515199900", +("8515210100", +("8515219900", +("8515299901", +("8515299999", +("8515310100", +("8515310200", +("8515319900", +("8515390100", +("8515390200", +("8515399900", +("8515800301", +("8515800302", +("8515800399", +("8515900100", +("8515909900", +("8516100200", +("8516210100", +("8516299901", +("8516299999", +("8516310100", +("8516320100", +("8516330100", +("8516400100", +("8516500100", +("8516600100", +("8516600300", +("8516609901", +("8516609999", +("8516710100", +("8516720100", +("8516790100", +("8516799900", +("8516800401", +("8516800402", +("8516800499", +("8516800499", +("8516900700", +("8516900900", +("8516909900", +("8516909900", +("8516909900", +("8516909900", +("8516909900", +("8516909900", +("8516909900", +("8516909900", +("8516909900", +("8517110100", +("8517120201", +("8517120299", +("8517180200", +("8517189901", +("8517189999", +("8517610100", +("8517621701", +("8517621702", +("8517621703", +("8517621704", +("8517621705", +("8517621706", +("8517621707", +("8517621708", +("8517621709", +("8517621710", +("8517621711", +("8517621791", +("8517621799", +("8517621799", +("8517621799", +("8517621799", +("8517621799", +("8517621799", +("8517690500", +("8517690700", +("8517691300", +("8517691400", +("8517691500", +("8517691600", +("8517691700", +("8517691900", +("8517699901", +("8517699902", +("8517699903", +("8517699904", +("8517699999", +("8517699999", +("8517699999", +("8517699999", +("8517699999", +("8517699999", +("8517699999", +("8517699999", +("8517699999", +("8517699999", +("8517700900", +("8517701000", +("8517701100", +("8517701200", +("8517709901", +("8517709902", +("8517709991", +("8517709999", +("8517709999", +("8517709999", +("8517709999", +("8517709999", +("8517709999", +("8517709999", +("8518100401", +("8518100402", +("8518100499", +("8518100499", +("8518210201", +("8518210202", +("8518210299", +("8518220201", +("8518220202", +("8518220299", +("8518299900", +("8518299900", +("8518300300", +("8518300400", +("8518309901", +("8518309902", +("8518309999", +("8518400100", +("8518400200", +("8518400400", +("8518409901", +("8518409999", +("8518409999", +("8518409999", +("8518500100", +("8518900100", +("8518900200", +("8518909901", +("8518909999", +("8519200100", +("8519300200", +("8519300200", +("8519500100", +("8519810300", +("8519810400", +("8519810500", +("8519810600", +("8519810700", +("8519810800", +("8519810900", +("8519811000", +("8519811200", +("8519811200", +("8519819900", +("8519819900", +("8519890100", +("8519899900", +("8519899900", +("8519899900", +("8519899900", +("8521100201", +("8521100299", +("8521900100", +("8521900200", +("8521900300", +("8521900400", +("8521900500", +("8521909900", +("8522100100", +("8522900700", +("8522909901", +("8522909902", +("8522909903", +("8522909999", +("8522909999", +("8522909999", +("8522909999", +("8522909999", +("8522909999", +("8522909999", +("8522909999", +("8522909999", +("8522909999", +("8522909999", +("8523210201", +("8523210299", +("8523290500", +("8523290700", +("8523290800", +("8523290900", +("8523290900", +("8523299901", +("8523299902", +("8523299903", +("8523299904", +("8523299999", +("8523410100", +("8523419900", +("8523499901", +("8523499999", +("8523510100", +("8523519900", +("8523520301", +("8523520302", +("8523590100", +("8523599900", +("8523809900", +("8525500501", +("8525500502", +("8525500503", +("8525500599", +("8525500599", +("8525600500", +("8525609901", +("8525609902", +("8525609903", +("8525609904", +("8525609905", +("8525609906", +("8525609999", +("8525609999", +("8525609999", +("8525800501", +("8525800502", +("8525800503", +("8525800504", +("8525800599", +("8526100100", +("8526109900", +("8526910100", +("8526919900", +("8526920100", +("8526929900", +("8527120100", +("8527130100", +("8527130200", +("8527190100", +("8527199900", +("8527210100", +("8527219900", +("8527290100", +("8527299900", +("8527910201", +("8527910202", +("8527910299", +("8527920100", +("8527999901", +("8527999999", +("8528420201", +("8528420201", +("8528420201", +("8528420201", +("8528420201", +("8528420201", +("8528420201", +("8528420299", +("8528420299", +("8528420299", +("8528490600", +("8528490700", +("8528491000", +("8528491000", +("8528491000", +("8528491000", +("8528491000", +("8528491100", +("8528491100", +("8528499900", +("8528520201", +("8528520299", +("8528590100", +("8528590200", +("8528590300", +("8528590400", +("8528599900", +("8528620100", +("8528699901", +("8528699902", +("8528699999", +("8528699999", +("8528699999", +("8528710100", +("8528710200", +("8528710300", +("8528710400", +("8528719900", +("8528720100", +("8528720200", +("8528720300", +("8528720400", +("8528720500", +("8528720600", +("8528720700", +("8528729900", +("8528730100", +("8529100901", +("8529100902", +("8529100903", +("8529100904", +("8529100905", +("8529100906", +("8529100907", +("8529100999", +("8529100999", +("8529900900", +("8529901300", +("8529901500", +("8529901600", +("8529901800", +("8529901900", +("8529902000", +("8529902100", +("8529909901", +("8529909902", +("8529909903", +("8529909904", +("8529909905", +("8529909906", +("8529909907", +("8529909908", +("8529909909", +("8529909991", +("8529909999", +("8529909999", +("8529909999", +("8529909999", +("8529909999", +("8529909999", +("8529909999", +("8530100100", +("8530800200", +("8530809900", +("8530809900", +("8530900100", +("8531100100", +("8531100200", +("8531100300", +("8531100400", +("8531109901", +("8531109999", +("8531200100", +("8531800100", +("8531800300", +("8531809901", +("8531809999", +("8531900200", +("8531909900", +("8531909900", +("8532100100", +("8532109900", +("8532210100", +("8532220401", +("8532220402", +("8532220499", +("8532220499", +("8532230601", +("8532230602", +("8532230699", +("8532230699", +("8532230699", +("8532230699", +("8532240400", +("8532240400", +("8532240400", +("8532240400", +("8532250200", +("8532259901", +("8532259902", +("8532259999", +("8532259999", +("8532299901", +("8532299999", +("8532299999", +("8532299999", +("8532299999", +("8532299999", +("8532300500", +("8532300500", +("8532300500", +("8532300500", +("8532300500", +("8532900100", +("8533100301", +("8533100302", +("8533210100", +("8533299900", +("8533299900", +("8533310200", +("8533310200", +("8533399900", +("8533399900", +("8533399900", +("8533400801", +("8533400802", +("8533400803", +("8533400804", +("8533400805", +("8533400899", +("8533400899", +("8533400899", +("8533900301", +("8533900399", +("8533900399", +("8534000401", +("8534000402", +("8534000403", +("8534000499", +("8535100100", +("8535100200", +("8535100300", +("8535109900", +("8535210100", +("8535299900", +("8535300701", +("8535300702", +("8535300703", +("8535300704", +("8535300799", +("8535300799", +("8535300799", +("8535400100", +("8535409901", +("8535409999", +("8535900800", +("8535902000", +("8535909901", +("8535909902", +("8535909903", +("8535909904", +("8535909905", +("8535909906", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8535909999", +("8536100300", +("8536100400", +("8536109901", +("8536109902", +("8536109999", +("8536109999", +("8536200100", +("8536200200", +("8536209900", +("8536300500", +("8536309901", +("8536309902", +("8536309999", +("8536309999", +("8536309999", +("8536410300", +("8536419901", +("8536419902", +("8536419903", +("8536419904", +("8536419905", +("8536419906", +("8536419999", +("8536419999", +("8536419999", +("8536419999", +("8536419999", +("8536499901", +("8536499902", +("8536499903", +("8536499904", +("8536499999", +("8536499999", +("8536500700", +("8536509901", +("8536509902", +("8536509903", +("8536509904", +("8536509905", +("8536509906", +("8536509907", +("8536509908", +("8536509909", +("8536509910", +("8536509999", +("8536509999", +("8536509999", +("8536509999", +("8536509999", +("8536509999", +("8536509999", +("8536610400", +("8536610400", +("8536610400", +("8536610400", +("8536690200", +("8536699901", +("8536699999", +("8536700100", +("8536902800", +("8536909901", +("8536909902", +("8536909903", +("8536909904", +("8536909905", +("8536909906", +("8536909907", +("8536909908", +("8536909909", +("8536909910", +("8536909911", +("8536909912", +("8536909913", +("8536909914", +("8536909915", +("8536909916", +("8536909917", +("8536909918", +("8536909919", +("8536909920", +("8536909921", +("8536909999", +("8536909999", +("8536909999", +("8536909999", +("8536909999", +("8536909999", +("8536909999", +("8537100300", +("8537100400", +("8537100500", +("8537100600", +("8537109901", +("8537109902", +("8537109999", +("8537200200", +("8537209901", +("8537209999", +("8538100100", +("8538900100", +("8538900500", +("8538909901", +("8538909902", +("8538909999", +("8538909999", +("8539109901", +("8539109902", +("8539109999", +("8539109999", +("8539210100", +("8539219900", +("8539220100", +("8539220200", +("8539220300", +("8539220400", +("8539220500", +("8539229900", +("8539299901", +("8539299999", +("8539299999", +("8539299999", +("8539299999", +("8539299999", +("8539299999", +("8539299999", +("8539299999", +("8539310100", +("8539319900", +("8539320401", +("8539320402", +("8539320403", +("8539320499", +("8539390100", +("8539390200", +("8539390300", +("8539390400", +("8539390500", +("8539390600", +("8539399900", +("8539410100", +("8539499901", +("8539499999", +("8539500100", +("8539900701", +("8539900702", +("8539900703", +("8539900704", +("8539900799", +("8539900799", +("8539900799", +("8540110601", +("8540110602", +("8540110699", +("8540110699", +("8540110699", +("8540110699", +("8540120200", +("8540120200", +("8540200200", +("8540200200", +("8540400200", +("8540600200", +("8540600200", +("8540710100", +("8540799900", +("8540810300", +("8540810300", +("8540810300", +("8540899901", +("8540899999", +("8540899999", +("8540899999", +("8540910500", +("8540910500", +("8540910500", +("8540910500", +("8540910500", +("8540999900", +("8540999900", +("8540999900", +("8540999900", +("8540999900", +("8541100101", +("8541100199", +("8541210100", +("8541299900", +("8541300101", +("8541300199", +("8541400401", +("8541400402", +("8541400403", +("8541500100", +("8541600100", +("8541900201", +("8541900299", +("8542310301", +("8542310302", +("8542310399", +("8542320201", +("8542320299", +("8542330201", +("8542330299", +("8542399901", +("8542399999", +("8542900100", +("8543100200", +("8543200601", +("8543200699", +("8543200699", +("8543200699", +("8543200699", +("8543200699", +("8543300100", +("8543700100", +("8543700800", +("8543701700", +("8543709901", +("8543709902", +("8543709903", +("8543709904", +("8543709905", +("8543709906", +("8543709907", +("8543709908", +("8543709909", +("8543709910", +("8543709999", +("8543709999", +("8543709999", +("8543709999", +("8543709999", +("8543900100", +("8543900200", +("8543909900", +("8544110100", +("8544199901", +("8544199999", +("8544200100", +("8544200200", +("8544200300", +("8544209900", +("8544300100", +("8544309901", +("8544309999", +("8544420500", +("8544429901", +("8544429902", +("8544429903", +("8544429904", +("8544429905", +("8544429906", +("8544429999", +("8544490500", +("8544499901", +("8544499902", +("8544499903", +("8544499904", +("8544499905", +("8544499905", +("8544499905", +("8544499991", +("8544499991", +("8544499991", +("8544499992", +("8544499992", +("8544499992", +("8544499999", +("8544499999", +("8544600201", +("8544600202", +("8544600299", +("8544700100", +("8545110100", +("8545199900", +("8545200100", +("8545909900", +("8545909900", +("8545909900", +("8546100100", +("8546100200", +("8546100300", +("8546109900", +("8546200100", +("8546200200", +("8546200300", +("8546200400", +("8546200500", +("8546209900", +("8546900100", +("8546900200", +("8546900300", +("8546909900", +("8547100600", +("8547109901", +("8547109902", +("8547109999", +("8547109999", +("8547109999", +("8547109999", +("8547200400", +("8547200400", +("8547200400", +("8547200400", +("8547909901", +("8547909902", +("8547909999", +("8547909999", +("8547909999", +("8547909999", +("8547909999", +("8547909999", +("8547909999", +("8547909999", +("8547909999", +("8547909999", +("8547909999", +("8548100100", +("8548900400", +("8548909901", +("8548909902", +("8548909903", +("8548909999", +("8601100100", +("8601200100", +("8602100100", +("8602909900", +("8603100100", +("8603909900", +("8604000301", +("8604000399", +("8604000399", +("8605000100", +("8605009900", +("8606100100", +("8606300100", +("8606910200", +("8606910200", +("8606920100", +("8606999900", +("8607110100", +("8607129900", +("8607190200", +("8607190300", +("8607199901", +("8607199999", +("8607199999", +("8607199999", +("8607199999", +("8607210200", +("8607210200", +("8607299900", +("8607300100", +("8607910201", +("8607910299", +("8607999900", +("8608000401", +("8608000402", +("8608000499", +("8608000499", +("8609000100", +("8701100100", +("8701200100", +("8701200200", +("8701300100", +("8701309900", +("8701910100", +("8701910200", +("8701919901", +("8701919902", +("8701919903", +("8701919999", +("8701920100", +("8701920200", +("8701920300", +("8701929901", +("8701929902", +("8701929903", +("8701929999", +("8701930100", +("8701930200", +("8701939901", +("8701939902", +("8701939903", +("8701939999", +("8701940100", +("8701940200", +("8701940300", +("8701940400", +("8701940500", +("8701949901", +("8701949902", +("8701949999", +("8701950100", +("8701950200", +("8701959901", +("8701959902", +("8701959903", +("8701959999", +("8702100500", +("8702109901", +("8702109902", +("8702109903", +("8702109904", +("8702200500", +("8702200500", +("8702209901", +("8702209901", +("8702209902", +("8702209902", +("8702209903", +("8702209903", +("8702209904", +("8702209904", +("8702300500", +("8702309901", +("8702309902", +("8702309903", +("8702309904", +("8702400100", +("8702400201", +("8702400202", +("8702400203", +("8702400204", +("8702400600", +("8702400700", +("8702900100", +("8702900600", +("8702900800", +("8702909901", +("8702909902", +("8702909903", +("8702909904", +("8703100401", +("8703100402", +("8703100499", +("8703210100", +("8703210200", +("8703219900", +("8703220100", +("8703220200", +("8703230100", +("8703230200", +("8703240100", +("8703240200", +("8703310100", +("8703310200", +("8703320100", +("8703320200", +("8703330100", +("8703330200", +("8703400100", +("8703400100", +("8703400100", +("8703400100", +("8703400100", +("8703400200", +("8703400200", +("8703400200", +("8703400200", +("8703400200", +("8703400300", +("8703500100", +("8703500100", +("8703500100", +("8703500100", +("8703500200", +("8703500200", +("8703500200", +("8703500200", +("8703600100", +("8703600100", +("8703600100", +("8703600100", +("8703600100", +("8703600200", +("8703600200", +("8703600200", +("8703600200", +("8703600200", +("8703600300", +("8703700100", +("8703700100", +("8703700100", +("8703700100", +("8703700200", +("8703700200", +("8703700200", +("8703700200", +("8703800100", +("8703800200", +("8703900200", +("8703909900", +("8704100201", +("8704100299", +("8704210100", +("8704210400", +("8704219901", +("8704219902", +("8704219999", +("8704220100", +("8704220700", +("8704229901", +("8704229902", +("8704229903", +("8704229904", +("8704229905", +("8704229999", +("8704230100", +("8704230200", +("8704239900", +("8704310100", +("8704310200", +("8704310500", +("8704319901", +("8704319999", +("8704320100", +("8704320700", +("8704329901", +("8704329902", +("8704329903", +("8704329904", +("8704329999", +("8704329999", +("8704900100", +("8704909900", +("8705100100", +("8705200100", +("8705209900", +("8705300100", +("8705400100", +("8705400200", +("8705900100", +("8705900200", +("8705909900", +("8706000100", +("8706009900", +("8706009900", +("8707100200", +("8707100200", +("8707900200", +("8707909901", +("8707909902", +("8707909999", +("8707909999", +("8708100100", +("8708100200", +("8708100300", +("8708109900", +("8708210100", +("8708290100", +("8708290200", +("8708290300", +("8708290400", +("8708290500", +("8708290600", +("8708290700", +("8708290800", +("8708290900", +("8708291000", +("8708291100", +("8708291200", +("8708291300", +("8708291600", +("8708291700", +("8708291800", +("8708291900", +("8708292000", +("8708292200", +("8708292300", +("8708292400", +("8708299901", +("8708299902", +("8708299903", +("8708299904", +("8708299905", +("8708299906", +("8708299907", +("8708299908", +("8708299999", +("8708300100", +("8708300200", +("8708300400", +("8708300600", +("8708300800", +("8708300900", +("8708301000", +("8708301100", +("8708309901", +("8708309902", +("8708309903", +("8708309904", +("8708309999", +("8708309999", +("8708309999", +("8708400100", +("8708400200", +("8708400300", +("8708400400", +("8708400500", +("8708400700", +("8708400800", +("8708409901", +("8708409999", +("8708500100", +("8708500200", +("8708500300", +("8708500400", +("8708500500", +("8708500600", +("8708500700", +("8708500800", +("8708500900", +("8708501000", +("8708501300", +("8708501400", +("8708501500", +("8708501600", +("8708501800", +("8708502000", +("8708502200", +("8708502300", +("8708502400", +("8708502500", +("8708502600", +("8708502700", +("8708502800", +("8708502900", +("8708503000", +("8708509901", +("8708509902", +("8708509903", +("8708509904", +("8708509999", +("8708509999", +("8708700600", +("8708709901", +("8708709902", +("8708709903", +("8708709904", +("8708709999", +("8708709999", +("8708709999", +("8708800100", +("8708800200", +("8708800300", +("8708800400", +("8708800500", +("8708800600", +("8708800700", +("8708800800", +("8708800900", +("8708801000", +("8708801100", +("8708801200", +("8708809900", +("8708910100", +("8708910200", +("8708910300", +("8708919900", +("8708920301", +("8708920399", +("8708920399", +("8708930501", +("8708930502", +("8708930599", +("8708930599", +("8708930599", +("8708941201", +("8708941202", +("8708941202", +("8708941202", +("8708941203", +("8708941203", +("8708941203", +("8708941204", +("8708941204", +("8708941204", +("8708941205", +("8708941205", +("8708941205", +("8708941206", +("8708941206", +("8708941206", +("8708941207", +("8708941207", +("8708941207", +("8708941291", +("8708941291", +("8708941291", +("8708941299", +("8708941299", +("8708941299", +("8708941299", +("8708950201", +("8708950202", +("8708950299", +("8708990400", +("8708990700", +("8708990800", +("8708990900", +("8708999901", +("8708999901", +("8708999901", +("8708999902", +("8708999903", +("8708999904", +("8708999904", +("8708999904", +("8708999905", +("8708999905", +("8708999905", +("8708999906", +("8708999906", +("8708999906", +("8708999907", +("8708999907", +("8708999907", +("8708999908", +("8708999908", +("8708999908", +("8708999999", +("8708999999", +("8708999999", +("8709110100", +("8709199900", +("8709199900", +("8709199900", +("8709900100", +("8710000100", +("8711100300", +("8711100300", +("8711100300", +("8711200501", +("8711200502", +("8711200599", +("8711200599", +("8711300401", +("8711300499", +("8711300499", +("8711300499", +("8711400100", +("8711400200", +("8711409901", +("8711409999", +("8711500301", +("8711500302", +("8711500399", +("8711600100", +("8711900100", +("8711909900", +("8712000501", +("8712000502", +("8712000503", +("8712000599", +("8712000599", +("8713100100", +("8713909900", +("8714100100", +("8714100200", +("8714100300", +("8714109900", +("8714200100", +("8714910101", +("8714910102", +("8714910103", +("8714920100", +("8714930100", +("8714940100", +("8714949900", +("8714950100", +("8714960100", +("8714999900", +("8715000100", +("8715000200", +("8716100100", +("8716200401", +("8716200402", +("8716200499", +("8716200499", +("8716310301", +("8716310302", +("8716310399", +("8716390300", +("8716390400", +("8716390800", +("8716399901", +("8716399902", +("8716399903", +("8716399904", +("8716399905", +("8716399999", +("8716409900", +("8716800300", +("8716809901", +("8716809902", +("8716809999", +("8716900300", +("8716909901", +("8716909902", +("8716909999", +("8801000200", +("8801000200", +("8802110100", +("8802119900", +("8802120100", +("8802129900", +("8802200100", +("8802209900", +("8802300100", +("8802300200", +("8802309900", +("8802400100", +("8802600100", +("8803100100", +("8803200100", +("8803309900", +("8803909900", +("8804000100", +("8805100100", +("8805210100", +("8805290100", +("8901100100", +("8901109900", +("8901200100", +("8901209900", +("8901300100", +("8901309900", +("8901900100", +("8901900200", +("8901900300", +("8901909900", +("8902000301", +("8902000399", +("8902000399", +("8903100100", +("8903910100", +("8903920100", +("8903999900", +("8904000100", +("8905100100", +("8905200100", +("8905900100", +("8905909900", +("8906100100", +("8906909900", +("8907100100", +("8907909900", +("8908000100", +("9001100201", +("9001100299", +("9001200100", +("9001300200", +("9001309901", +("9001309999", +("9001400300", +("9001400300", +("9001400300", +("9001500201", +("9001500299", +("9001909900", +("9001909900", +("9002110100", +("9002199900", +("9002200100", +("9002909900", +("9003110100", +("9003190100", +("9003900200", +("9003900200", +("9004100100", +("9004909900", +("9005100100", +("9005809900", +("9005900100", +("9005900200", +("9005909900", +("9006300100", +("9006400100", +("9006510100", +("9006520100", +("9006529900", +("9006530100", +("9006539900", +("9006599901", +("9006599999", +("9006599999", +("9006599999", +("9006610100", +("9006699900", +("9006699900", +("9006910300", +("9006910300", +("9006999900", +("9007100100", +("9007100200", +("9007109900", +("9007200100", +("9007910100", +("9007920100", +("9008500100", +("9008900200", +("9008900200", +("9010100100", +("9010500100", +("9010600100", +("9010900100", +("9011100100", +("9011109900", +("9011209900", +("9011800100", +("9011900100", +("9012100100", +("9012900100", +("9013100100", +("9013200100", +("9013800200", +("9013800200", +("9013900100", +("9014100100", +("9014100200", +("9014100300", +("9014109900", +("9014200100", +("9014800301", +("9014800399", +("9014800399", +("9014900201", +("9014900299", +("9015100100", +("9015200100", +("9015209900", +("9015300100", +("9015400100", +("9015800100", +("9015800300", +("9015800400", +("9015800500", +("9015809901", +("9015809999", +("9015809999", +("9015809999", +("9015900100", +("9016000201", +("9016000299", +("9017100100", +("9017109900", +("9017109900", +("9017200100", +("9017209900", +("9017300201", +("9017300299", +("9017800300", +("9017800400", +("9017809901", +("9017809991", +("9017809999", +("9017900200", +("9017900200", +("9018110100", +("9018110200", +("9018120100", +("9018130100", +("9018140100", +("9018190200", +("9018190500", +("9018190600", +("9018199901", +("9018199902", +("9018199999", +("9018199999", +("9018199999", +("9018199999", +("9018199999", +("9018199999", +("9018200100", +("9018310100", +("9018319900", +("9018320200", +("9018320300", +("9018320400", +("9018329901", +("9018329999", +("9018390200", +("9018390300", +("9018390400", +("9018390600", +("9018399901", +("9018399902", +("9018399999", +("9018410100", +("9018419900", +("9018490200", +("9018490400", +("9018490500", +("9018490600", +("9018499901", +("9018499902", +("9018499999", +("9018500100", +("9018900100", +("9018900200", +("9018900300", +("9018900400", +("9018900500", +("9018900600", +("9018900700", +("9018900800", +("9018900900", +("9018901000", +("9018901100", +("9018901200", +("9018901300", +("9018901400", +("9018901500", +("9018901600", +("9018901700", +("9018901800", +("9018901900", +("9018902000", +("9018902500", +("9018902700", +("9018902800", +("9018903100", +("9018909901", +("9018909902", +("9018909999", +("9018909999", +("9018909999", +("9018909999", +("9018909999", +("9018909999", +("9019100200", +("9019109901", +("9019109999", +("9019200100", +("9020000200", +("9020000300", +("9020009901", +("9020009999", +("9021100601", +("9021100602", +("9021100603", +("9021100604", +("9021100699", +("9021100699", +("9021210201", +("9021210299", +("9021299900", +("9021310100", +("9021390100", +("9021390200", +("9021390400", +("9021399900", +("9021399900", +("9021400100", +("9021500100", +("9021909900", +("9022120100", +("9022130100", +("9022140201", +("9022140299", +("9022190100", +("9022210200", +("9022210200", +("9022290100", +("9022300100", +("9022900300", +("9022909901", +("9022909999", +("9022909999", +("9023000100", +("9024100100", +("9024800100", +("9024900100", +("9025110100", +("9025119900", +("9025190100", +("9025190200", +("9025190300", +("9025190400", +("9025199900", +("9025800100", +("9025809901", +("9025809902", +("9025809999", +("9025900100", +("9026100701", +("9026100702", +("9026100703", +("9026100704", +("9026100799", +("9026100799", +("9026100799", +("9026200300", +("9026200400", +("9026209901", +("9026209902", +("9026209903", +("9026209904", +("9026209999", +("9026800301", +("9026800399", +("9026800399", +("9026900100", +("9027100100", +("9027200100", +("9027300100", +("9027509900", +("9027800401", +("9027800402", +("9027800499", +("9027800499", +("9027900100", +("9027900200", +("9027900300", +("9027909900", +("9028100100", +("9028200200", +("9028200300", +("9028209901", +("9028209999", +("9028300100", +("9028309900", +("9028900301", +("9028900302", +("9028900399", +("9029100300", +("9029109901", +("9029109999", +("9029109999", +("9029109999", +("9029200601", +("9029200602", +("9029200603", +("9029200699", +("9029200699", +("9029200699", +("9029900100", +("9030100100", +("9030200200", +("9030200200", +("9030310100", +("9030320100", +("9030330701", +("9030330702", +("9030330703", +("9030330799", +("9030330799", +("9030330799", +("9030330799", +("9030390100", +("9030400201", +("9030400299", +("9030820100", +("9030840100", +("9030890501", +("9030890599", +("9030890599", +("9030890599", +("9030890599", +("9030900501", +("9030900502", +("9030900599", +("9030900599", +("9030900599", +("9031100100", +("9031200200", +("9031200200", +("9031410100", +("9031499901", +("9031499902", +("9031499999", +("9031800100", +("9031800200", +("9031800700", +("9031809901", +("9031809902", +("9031809903", +("9031809999", +("9031809999", +("9031900100", +("9031909900", +("9031909900", +("9032100100", +("9032100300", +("9032100400", +("9032109901", +("9032109999", +("9032200100", +("9032810200", +("9032810200", +("9032890100", +("9032890200", +("9032890300", +("9032890400", +("9032890500", +("9032890600", +("9032899900", +("9032900201", +("9032900299", +("9033000100", +("9101110100", +("9101199900", +("9101199900", +("9101210100", +("9101299900", +("9101910100", +("9101999900", +("9102110100", +("9102120100", +("9102199900", +("9102210100", +("9102299900", +("9102910100", +("9102999900", +("9103100100", +("9103909900", +("9104000401", +("9104000499", +("9104000499", +("9104000499", +("9105110201", +("9105110299", +("9105199900", +("9105210100", +("9105299900", +("9105910200", +("9105910200", +("9105999900", +("9105999900", +("9106100200", +("9106100200", +("9106909901", +("9106909999", +("9107000100", +("9108110100", +("9108120100", +("9108199900", +("9108200100", +("9108909900", +("9109100100", +("9109909900", +("9110110100", +("9110120100", +("9110190100", +("9110909900", +("9111100200", +("9111100200", +("9111200100", +("9111809900", +("9111900100", +("9112200201", +("9112200299", +("9112900100", +("9113100200", +("9113100200", +("9113200200", +("9113200200", +("9113900100", +("9113909900", +("9114100100", +("9114300100", +("9114400100", +("9114909900", +("9114909900", +("9114909900", +("9201100100", +("9201200100", +("9201900100", +("9201909900", +("9201909900", +("9202100100", +("9202900100", +("9202900200", +("9202909900", +("9205100100", +("9205900200", +("9205900300", +("9205900400", +("9205909900", +("9205909900", +("9206000100", +("9207100100", +("9207100200", +("9207109900", +("9207909900", +("9208100100", +("9208909900", +("9209300100", +("9209910100", +("9209919900", +("9209920100", +("9209940100", +("9209949900", +("9209999900", +("9209999900", +("9209999900", +("9209999900", +("9301100200", +("9301100200", +("9301200100", +("9301909900", +("9302000200", +("9302000200", +("9303100100", +("9303109900", +("9303200100", +("9303300100", +("9303900100", +("9303909900", +("9304000100", +("9304009900", +("9305100100", +("9305109900", +("9305200200", +("9305200200", +("9305910100", +("9305999900", +("9306210100", +("9306219900", +("9306299900", +("9306299900", +("9306300400", +("9306309901", +("9306309902", +("9306309999", +("9306309999", +("9306900301", +("9306900302", +("9306909900", +("9307000100", +("9401100100", +("9401200100", +("9401300100", +("9401400100", +("9401520100", +("9401530100", +("9401599900", +("9401610100", +("9401699900", +("9401710100", +("9401799901", +("9401799999", +("9401800100", +("9401900200", +("9401909901", +("9401909999", +("9402100100", +("9402109900", +("9402900100", +("9402900200", +("9402909900", +("9403100301", +("9403100302", +("9403100303", +("9403100399", +("9403100399", +("9403200501", +("9403200502", +("9403200503", +("9403200504", +("9403200505", +("9403200599", +("9403200599", +("9403200599", +("9403300100", +("9403300200", +("9403400100", +("9403500100", +("9403600100", +("9403600200", +("9403600300", +("9403609900", +("9403700300", +("9403700300", +("9403700300", +("9403820100", +("9403830100", +("9403899900", +("9403900101", +("9403900199", +("9404100100", +("9404210201", +("9404210299", +("9404299900", +("9404300100", +("9404909901", +("9404909902", +("9404909903", +("9404909904", +("9404909905", +("9404909906", +("9404909999", +("9405100401", +("9405100402", +("9405100403", +("9405100499", +("9405200201", +("9405200299", +("9405300100", +("9405400100", +("9405500200", +("9405500200", +("9405600100", +("9405910100", +("9405910200", +("9405910300", +("9405910400", +("9405919900", +("9405920100", +("9405999900", +("9406100100", +("9406909900", +("9503000100", +("9503000200", +("9503000300", +("9503000400", +("9503000500", +("9503000600", +("9503000700", +("9503000800", +("9503000900", +("9503001000", +("9503001100", +("9503001200", +("9503001300", +("9503001400", +("9503001500", +("9503001600", +("9503001700", +("9503001800", +("9503002000", +("9503002100", +("9503002200", +("9503002300", +("9503002400", +("9503002500", +("9503002600", +("9503002700", +("9503002800", +("9503002900", +("9503003000", +("9503003100", +("9503003200", +("9503003300", +("9503003400", +("9503003500", +("9503009901", +("9503009991", +("9503009999", +("9504200100", +("9504209900", +("9504300100", +("9504300200", +("9504309900", +("9504400100", +("9504500300", +("9504500401", +("9504500402", +("9504900100", +("9504900200", +("9504900300", +("9504900400", +("9504900500", +("9504909900", +("9505100100", +("9505109900", +("9505909900", +("9506110100", +("9506120100", +("9506199900", +("9506210100", +("9506299901", +("9506299999", +("9506310100", +("9506319900", +("9506320100", +("9506390100", +("9506399900", +("9506400100", +("9506510100", +("9506519900", +("9506599900", +("9506610100", +("9506620100", +("9506699900", +("9506700100", +("9506910301", +("9506910399", +("9506910399", +("9506990100", +("9506990200", +("9506990300", +("9506990400", +("9506990500", +("9506990600", +("9506999900", +("9507100100", +("9507200100", +("9507300100", +("9507909900", +("9508100100", +("9508900200", +("9508909900", +("9508909900", +("9601100100", +("9601909900", +("9602000100", +("9602009900", +("9603100100", +("9603210100", +("9603299900", +("9603300100", +("9603400100", +("9603500100", +("9603900100", +("9603909900", +("9604000100", +("9605000100", +("9606100100", +("9606210100", +("9606220100", +("9606299900", +("9606299900", +("9606300100", +("9607110100", +("9607199900", +("9607200100", +("9608100201", +("9608100299", +("9608200100", +("9608300100", +("9608309900", +("9608400200", +("9608409901", +("9608409999", +("9608500201", +("9608500299", +("9608600100", +("9608910200", +("9608910200", +("9608990300", +("9608990600", +("9608990700", +("9608990800", +("9608990900", +("9608991000", +("9608991100", +("9608991200", +("9608991200", +("9608999900", +("9608999900", +("9608999900", +("9609100100", +("9609200100", +("9609209900", +("9609900100", +("9609909900", +("9610000100", +("9611000100", +("9611009900", +("9612100300", +("9612109901", +("9612109902", +("9612109999", +("9612200100", +("9613100100", +("9613200100", +("9613800200", +("9613809900", +("9613809900", +("9613900100", +("9613900200", +("9613909900", +("9614000100", +("9614000300", +("9614009900", +("9614009900", +("9615110100", +("9615199900", +("9615909900", +("9616100100", +("9616200100", +("9617000100", +("9618000100", +("9618009900", +("9619000100", +("9619000200", +("9619000300", +("9619000400", +("9619009900", +("9620000100", +("9620000200", +("9620000200", +("9620000300", +("9620000400", +("9620009900", +("9620009900", +("9620009900", +("9620009900", +("9620009900", +("9620009900", +("9620009900", +("9620009900", +("9620009900", +("9620009900", +("9620009900", +("9620009900", +("9620009900", +("9701100100", +("9701909900", +("9702000100", +("9703000100", +("9704000200", +("9704000200", +("9705000500", +("9705000600", +("9705009900", +("9705009900", +("9705009900", +("9705009900", +("9705009900", +("9706000100", +("9801000100", +("9802000100", +("9802000200", +("9802000300", +("9802000400", +("9802000500", +("9802000600", +("9802000700", +("9802000800", +("9802000900", +("9802001000", +("9802001100", +("9802001200", +("9802001300", +("9802001400", +("9802001500", +("9802001600", +("9802001700", +("9802001800", +("9802001900", +("9802002000", +("9802002100", +("9802002200", +("9802002300", +("9802002400", +("9802002500", +("9802002600", +("9802002700", +("9802002800", +("9802002900", +("9802003000", +("9802003100", +("9802003200", +("9802003300", +("9802003400", +("9802003500", +("9802003600", +("9802003700", +("9802003800", +("9803000100", +("9803000200", +("9804000100", +("9804009900", +("9805000100", +("9806000100", +("9806000200", +("9806000300", +("9806000400", +("9806000500", +("9806000600", +("9806000700", +("9806000800", +("9806000900", +("9806001000", +("9807000100", +] \ No newline at end of file diff --git a/backend/api/v1/modules/a76/general_catalogs/units_of_measure/models.py b/backend/api/v1/modules/a76/general_catalogs/units_of_measure/models.py index b32ae812..3335753e 100644 --- a/backend/api/v1/modules/a76/general_catalogs/units_of_measure/models.py +++ b/backend/api/v1/modules/a76/general_catalogs/units_of_measure/models.py @@ -65,7 +65,8 @@ class UnitOfMeasureCustoms(Base, TimestampMixin): id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) code: Mapped[str] = mapped_column(String(10), nullable=False) # CLAVE - description: Mapped[Optional[str]] = mapped_column(String(20), nullable=True) + description: Mapped[Optional[str]] = mapped_column(String(20), nullable=True) + a76_unit_code: Mapped[Optional[str]] = mapped_column(String(5), nullable=True) # UnidadSCAII # 5. GUniMedida (Main) diff --git a/backend/api/v1/modules/a76/invoices/exports/validators/create.py b/backend/api/v1/modules/a76/invoices/exports/validators/create.py deleted file mode 100644 index 9afedbc2..00000000 --- a/backend/api/v1/modules/a76/invoices/exports/validators/create.py +++ /dev/null @@ -1,95 +0,0 @@ -from sqlalchemy.orm import Session - -from api.v1.modules.a76.general_catalogs.exchange_rate.models import ExchangeRate -from core.exceptions import ErrorCollector -from ...schemas import InvoiceHeaderCreate -from ...common.common_validators import validate_common, validate_required_fields_by_operation - -def validate_create(db: Session, invoice: InvoiceHeaderCreate, tenant_id: int, company_id: int, errors: ErrorCollector) -> None: - """ Valida la creación de una nueva factura de importe temporal """ - - if not invoice.operation_type: - errors.add_required_error("operation_type") - - if not invoice.invoice_type: - errors.add_required_error("invoice_type") - - if not invoice.document_type and invoice.invoice_type != "MEX": - errors.add_required_error("document_type") - - if not invoice.invoice_number: - errors.add_required_error("invoice_number") - - if not invoice.invoice_date: - errors.add_required_error("invoice_date") - - # Validar campos obligatorios según tipo de operación - invoice_data = { - 'provider_header': invoice.compliance_mx.provider_header if invoice.compliance_mx else None, - 'provider_id': invoice.compliance_mx.provider_id if invoice.compliance_mx else None, - 'sold_to_header': invoice.compliance_mx.sold_to_header if invoice.compliance_mx else None, - 'sold_to_id': invoice.compliance_mx.sold_to_id if invoice.compliance_mx else None, - 'shipped_to_header': invoice.compliance_mx.shipped_to_header if invoice.compliance_mx else None, - 'shipped_to_id': invoice.compliance_mx.shipped_to_id if invoice.compliance_mx else None, - 'customs_broker_id': invoice.compliance_mx.customs_broker_id if invoice.compliance_mx else None, - 'pedimento_id': invoice.compliance_mx.pedimento_id if invoice.compliance_mx else None, - } - - validate_required_fields_by_operation( - invoice_data=invoice_data, - operation_type=invoice.operation_type, - errors=errors - ) - - if errors.has_errors(): - """Se retorna porque hay campos obligatorios según el tipo de operación que deben ser llenados""" - return - - validate_common(db, invoice, tenant_id, company_id, errors) - - if errors.has_errors(): - """Se retorna por que fallaron las validaciones generales""" - return - - if invoice.compliance_mx: - if not invoice.compliance_mx.pedimento_id: - invoice.compliance_mx.remesa = None - - if invoice.financials: - if not invoice.financials.exchange_rate: - invoice.financials.exchange_rate = db.query(ExchangeRate.value).filter(ExchangeRate.date == invoice.invoice_date).scalar() - - invoice.document_type = (invoice.document_type or "").upper() - - if invoice.logistics: - if not invoice.logistics.transport_type: - invoice.logistics.transport_type = "none" - - if invoice.logistics.transport_type == "none" and invoice.logistics.transport_num: - invoice.logistics.transport_num = None - - invoice.logistics.incoterm = (invoice.logistics.incoterm or "").upper() - - if not invoice.logistics.weight_type: - invoice.logistics.weight_type = "kgs" - - if invoice.financials: - if not invoice.financials.currency: - invoice.financials.currency = "foreign" - - if invoice.financials.currency == "local": - invoice.financials.currency_type = "MXN" - elif invoice.financials.currency == "foreign": - invoice.financials.currency_type = "USD" - elif invoice.financials.currency == "manual": - invoice.financials.currency_type = (invoice.financials.currency_type or "").upper() - - - - - - - - - - \ No newline at end of file diff --git a/backend/api/v1/modules/a76/invoices/exports/validators/update.py b/backend/api/v1/modules/a76/invoices/exports/validators/update.py deleted file mode 100644 index 9a2ceec2..00000000 --- a/backend/api/v1/modules/a76/invoices/exports/validators/update.py +++ /dev/null @@ -1,284 +0,0 @@ -from typing import Optional -from datetime import date -from decimal import Decimal - -from sqlalchemy.orm import Session - -from ...common.common_validators import validate_common, validate_required_fields_by_operation -from core.exceptions import ErrorCollector -from ...schemas import InvoiceHeaderUpdate -from ...models import InvoiceHeader - -# Helper function para limpiar strings (equivalente a Clip()) -def clean_str(value: Optional[str]) -> Optional[str]: - if value is None or value == "": - return None - return value.strip() - -def validate_update( - db: Session, - invoice: InvoiceHeaderUpdate, - existing_invoice: InvoiceHeader, - tenant_id: int, - company_id: int, - errors: ErrorCollector, -) -> None: - """ - Valida y procesa la actualización parcial de una factura de importación temporal. - - Lógica: Si un campo viene con valor, se limpia/valida. - Si no, se mantiene el valor existente de la factura. - - Args: - invoice: Datos de la factura a validar/actualizar (modificado in-place) - existing_invoice: Factura existente en la base de datos - errors: Colector de errores - - Returns: - None (modifica invoice in-place y acumula errores en errors) - """ - - # Validar campos requeridos según el tipo de operación - invoice_dict = { - 'provider_id': invoice.compliance_mx.provider_id if invoice.compliance_mx else (existing_invoice.compliance_mx.provider_id if existing_invoice.compliance_mx else None), - 'sold_to_id': invoice.compliance_mx.sold_to_id if invoice.compliance_mx else (existing_invoice.compliance_mx.sold_to_id if existing_invoice.compliance_mx else None), - 'sold_to_header': invoice.compliance_mx.sold_to_header if invoice.compliance_mx else (existing_invoice.compliance_mx.sold_to_header if existing_invoice.compliance_mx else None), - 'shipped_to_id': invoice.compliance_mx.shipped_to_id if invoice.compliance_mx else (existing_invoice.compliance_mx.shipped_to_id if existing_invoice.compliance_mx else None), - 'customs_broker_id': invoice.compliance_mx.customs_broker_id if invoice.compliance_mx else (existing_invoice.compliance_mx.customs_broker_id if existing_invoice.compliance_mx else None), - 'pedimento_id': invoice.compliance_mx.pedimento_id if invoice.compliance_mx else (existing_invoice.compliance_mx.pedimento_id if existing_invoice.compliance_mx else None), - } - - validate_required_fields_by_operation( - invoice_data=invoice_dict, - operation_type=invoice.operation_type or (existing_invoice.operation_type or 'imp'), - errors=errors - ) - - # Primero ejecutar validaciones comunes - validate_common(db, invoice, tenant_id, company_id, errors) - - # Mapeo de columnas CSV a campos de la factura - # Siguiendo la lógica del código Clarion original - - # Columna A: Pedimento (si no viene en CSV, usar el existente) - if invoice.compliance_mx: - if invoice.compliance_mx.pedimento_id: - invoice.compliance_mx.pedimento_id = invoice.compliance_mx.pedimento_id - else: - invoice.compliance_mx.pedimento_id = existing_invoice.compliance_mx.pedimento_id if existing_invoice.compliance_mx else None - - # Columna B: Remesa - if invoice.compliance_mx: - if invoice.compliance_mx.remesa: - invoice.compliance_mx.remesa = invoice.compliance_mx.remesa - else: - invoice.compliance_mx.remesa = existing_invoice.compliance_mx.remesa if existing_invoice.compliance_mx else None - - # Columna C: Factura (OBLIGATORIO) - if invoice.invoice_number is not None: - invoice.invoice_number = clean_str(invoice.invoice_number) - if not invoice.invoice_number: - errors.add_required_error("invoice_number") - else: - invoice.invoice_number = existing_invoice.invoice_number - - # Columna D: Fecha - if not invoice.invoice_date: - invoice.invoice_date = existing_invoice.invoice_date - - # Columna E: Tipo Cambio - if invoice.financials: - if invoice.financials.exchange_rate is None: - if existing_invoice.financials: - invoice.financials.exchange_rate = existing_invoice.financials.exchange_rate - - # Columna F: Régimen - if invoice.document_type: - invoice.document_type = clean_str(invoice.document_type).upper() - else: - invoice.document_type = existing_invoice.document_type - - # Columna G: Clave Proveedor - if invoice.compliance_mx: - if invoice.compliance_mx.provider_id is None: - invoice.compliance_mx.provider_id = existing_invoice.compliance_mx.provider_id if existing_invoice.compliance_mx else None - - # Columna H: Clave Vendido A - if invoice.compliance_mx: - if invoice.compliance_mx.sold_to_id is None: - invoice.compliance_mx.sold_to_id = existing_invoice.compliance_mx.sold_to_id if existing_invoice.compliance_mx else None - - # Columna I: Clave Enviado A - if invoice.compliance_mx: - if invoice.compliance_mx.shipped_to_id is None: - invoice.compliance_mx.shipped_to_id = existing_invoice.compliance_mx.shipped_to_id if existing_invoice.compliance_mx else None - - # Columna J: Clave A. Aduanal - if invoice.compliance_mx: - if invoice.compliance_mx.customs_broker_id is None: - invoice.compliance_mx.customs_broker_id = existing_invoice.compliance_mx.customs_broker_id if existing_invoice.compliance_mx else None - - # Columna K: Clave Transportista - if invoice.logistics: - # Note: logistics in update schema seems to be a single object, but in model it's a list. - # This validator seems to expect a single object (InvoiceLogisticsUpdate). - # We'll stick to the existing logic but make it safe. - if hasattr(invoice.logistics, 'carrier_id') and invoice.logistics.carrier_id is None: - invoice.logistics.carrier_id = existing_invoice.logistics.carrier_id if existing_invoice.logistics else None - - # Columna L: Nombre Conductor - if invoice.logistics: - if hasattr(invoice.logistics, 'driver_name') and not invoice.logistics.driver_name: - invoice.logistics.driver_name = existing_invoice.logistics.driver_name if existing_invoice.logistics else None - elif hasattr(invoice.logistics, 'driver_name'): - invoice.logistics.driver_name = clean_str(invoice.logistics.driver_name) - - # Columna M: Tipo Transporte - if invoice.logistics: - if hasattr(invoice.logistics, 'transport_type') and not invoice.logistics.transport_type: - invoice.logistics.transport_type = existing_invoice.logistics.transport_type if existing_invoice.logistics else None - elif hasattr(invoice.logistics, 'transport_type'): - invoice.logistics.transport_type = clean_str(invoice.logistics.transport_type) - - # Columna N: Número de Transporte - if invoice.logistics: - if hasattr(invoice.logistics, 'transport_num') and not invoice.logistics.transport_num: - invoice.logistics.transport_num = existing_invoice.logistics.transport_num if existing_invoice.logistics else None - elif hasattr(invoice.logistics, 'transport_num'): - invoice.logistics.transport_num = clean_str(invoice.logistics.transport_num) - - # Columna O: Tipo de Moneda - if invoice.financials: - if not invoice.financials.currency: - invoice.financials.currency = existing_invoice.financials.currency if existing_invoice.financials else None - else: - invoice.financials.currency = clean_str(invoice.financials.currency).lower() - - # Columna P: Clave Moneda - if invoice.financials: - if not invoice.financials.currency_type: - invoice.financials.currency_type = existing_invoice.financials.currency_type if existing_invoice.financials else None - else: - invoice.financials.currency_type = clean_str(invoice.financials.currency_type).upper() - - # Columna Q: Flete - if invoice.financials: - if invoice.financials.freight is None: - invoice.financials.freight = existing_invoice.financials.freight if existing_invoice.financials else None - - # Columna R: Val Seguros - if invoice.financials: - if invoice.financials.insurance_value is None: - invoice.financials.insurance_value = existing_invoice.financials.insurance_value if existing_invoice.financials else None - - # Columna S: Seguros - if invoice.financials: - if invoice.financials.insurance is None: - invoice.financials.insurance = existing_invoice.financials.insurance if existing_invoice.financials else None - - # Columna T: Embalaje - if invoice.financials: - if invoice.financials.packaging is None: - invoice.financials.packaging = existing_invoice.financials.packaging if existing_invoice.financials else None - - # Columna U: Otros Incrementables - if invoice.financials: - if invoice.financials.other_increments is None: - invoice.financials.other_increments = existing_invoice.financials.other_increments if existing_invoice.financials else None - - # Columna V: Incoterms - if invoice.logistics: - if hasattr(invoice.logistics, 'incoterm') and not invoice.logistics.incoterm: - invoice.logistics.incoterm = existing_invoice.logistics.incoterm if existing_invoice.logistics else None - elif hasattr(invoice.logistics, 'incoterm'): - invoice.logistics.incoterm = clean_str(invoice.logistics.incoterm).upper() - - # Columna W: Precinto - if invoice.logistics: - if hasattr(invoice.logistics, 'seal_number') and not invoice.logistics.seal_number: - invoice.logistics.seal_number = existing_invoice.logistics.seal_number if existing_invoice.logistics else None - elif hasattr(invoice.logistics, 'seal_number'): - invoice.logistics.seal_number = clean_str(invoice.logistics.seal_number) - - # Columna X: Fecha de Emisión - if not invoice.emission_date: - invoice.emission_date = existing_invoice.emission_date - - # Columna Y: Tipo de Peso (Opcional) - if invoice.logistics: - if hasattr(invoice.logistics, 'weight_type') and not invoice.logistics.weight_type: - invoice.logistics.weight_type = existing_invoice.logistics.weight_type if existing_invoice.logistics else None - elif hasattr(invoice.logistics, 'weight_type'): - invoice.logistics.weight_type = clean_str(invoice.logistics.weight_type).upper() - - # Columna Z: Número de Manifiesto (Opcional) - if invoice.compliance_mx.manifest_number: - if not invoice.compliance_mx.manifest_number: - invoice.compliance_mx.manifest_number = existing_invoice.compliance_mx.manifest_number if existing_invoice.compliance_mx else None - else: - invoice.compliance_mx.manifest_number = clean_str(invoice.compliance_mx.manifest_number) - - # Columna AA: E-Document (Opcional) - if invoice.compliance_mx: - if not invoice.compliance_mx.edocument: - invoice.compliance_mx.edocument = existing_invoice.compliance_mx.edocument if existing_invoice.compliance_mx else None - else: - invoice.compliance_mx.edocument = clean_str(invoice.compliance_mx.edocument) - - # Columna AB: Num. Operación (Opcional) - if invoice.compliance_mx: - if not invoice.compliance_mx.vucem_operation_num: - invoice.compliance_mx.vucem_operation_num = existing_invoice.compliance_mx.vucem_operation_num if existing_invoice.compliance_mx else None - else: - invoice.compliance_mx.vucem_operation_num = clean_str(invoice.compliance_mx.vucem_operation_num) - - # Columna AB: Aduana (OBLIGATORIO) - if invoice.compliance_mx: - if not invoice.compliance_mx.aduana: - invoice.compliance_mx.aduana = existing_invoice.compliance_mx.aduana if existing_invoice.compliance_mx else None - else: - invoice.compliance_mx.aduana = clean_str(invoice.compliance_mx.aduana) - - # Columna AC: Enviado Por (Obligatorio) - if invoice.compliance_mx: - if not invoice.compliance_mx.shipped_by_id: - invoice.compliance_mx.shipped_by_id = existing_invoice.compliance_mx.shipped_by_id if existing_invoice.compliance_mx else None - else: - invoice.compliance_mx.shipped_by_id = clean_str(invoice.compliance_mx.shipped_by_id) - - # Columna AD: Aduana_Cruce (Obligatorio) - current_aduana = invoice.compliance_mx.aduana if invoice.compliance_mx else (existing_invoice.compliance_mx.aduana if existing_invoice.compliance_mx else None) - if not current_aduana: - errors.add_required_error("aduana") - - # Columna AC: Sección de Despacho / Puerto de Entrada (Opcional) - if invoice.compliance_mx: - if not invoice.compliance_mx.port_of_entry: - invoice.compliance_mx.port_of_entry = existing_invoice.compliance_mx.port_of_entry if existing_invoice.compliance_mx else None - else: - invoice.compliance_mx.port_of_entry = clean_str(invoice.compliance_mx.port_of_entry) - - # Columna AE: Observación en Español (Opcional) - if not invoice.observation_es: - invoice.observation_es = existing_invoice.observation_es - else: - invoice.observation_es = clean_str(invoice.observation_es) - - # Columna AF: Observación en Inglés (Opcional) - if not invoice.observation_en: - invoice.observation_en = existing_invoice.observation_en - else: - invoice.observation_en = clean_str(invoice.observation_en) - - # Columna AG: cfdi_uuid (Opcional) - if not invoice.cfdi_uuid: - invoice.cfdi_uuid = existing_invoice.cfdi_uuid if existing_invoice.compliance_mx else None - else: - invoice.cfdi_uuid = clean_str(invoice.cfdi_uuid) - - # Columna AH: Localizacion (Opcional) - if invoice.compliance_mx.location: - if not invoice.compliance_mx.location: - invoice.compliance_mx.location = existing_invoice.compliance_mx.location if existing_invoice.compliance_mx.location else None - else: - invoice.compliance_mx.location = clean_str(invoice.compliance_mx.location) diff --git a/backend/api/v1/modules/a76/invoices/imports/process/main_process.py b/backend/api/v1/modules/a76/invoices/imports/process/main_process.py new file mode 100644 index 00000000..cfadf0dd --- /dev/null +++ b/backend/api/v1/modules/a76/invoices/imports/process/main_process.py @@ -0,0 +1,285 @@ + +from datetime import date, datetime +from decimal import Decimal +from typing import List + +from sqlalchemy.orm import Session + +from api.v1.modules.a76.parts.models import Part +from api.v1.modules.a76.classes.models import Class +from api.v1.modules.a76.invoices.models import Currency, InvoiceHeader, InvoiceStatus +from api.v1.modules.a76.items.models import LineItem +from api.v1.modules.a76.items.common.fractions import search_fraction_preference +from api.v1.modules.a76.general_catalogs.company.models import Company +from core.exceptions import ErrorCollector +from .pre_validators import pre_validators +from .sub_process.review_classes import review_classes +from .sub_process.review_exchange_rate import review_exchange_rate +from .sub_process.review_weights import review_weights_kgs, review_weights_lbs +from .sub_process.review_series import review_series +from .sub_process.review_rule_octave import ( + llena_impo_permiso_regla_octava, + revpermiso_regla_octava, + valida_imp_regla_octava, + descuenta_cupo_r_octava, +) +from .sub_process.review_uma import revisa_uma +from .sub_process.assing_values import assign_values_lines, assign_values_invoice + + + +def _validate_lines( + db: Session, + invoice: InvoiceHeader, + lines: List[LineItem], + tenant_id: str, + company_id: str, + errors: ErrorCollector, +) -> tuple[list, dict]: + """Recorre cada partida y ejecuta las validaciones individuales.""" + company = db.get(Company, invoice.company_id) + company_rfc = (company.rfc or "").strip().upper() if company else "" + # Deduplicación de cupos disponibles: (permiso, ro_line, pais) → OctaveAvailableEntry + octave_available: dict = {} + # Partidas a descargar: se pasa a valida_imp_regla_octava + octave_desc: list = [] + for line in lines: + # Validar costo unitario capturado en partidas principales + if (line.financial and line.fa_data) and not line.fa_data.is_subitem and (line.financial.unit_cost_capture or Decimal(0)) == 0: + errors.add_error( + field=f"line[{line.line_number}].unit_cost_capture", + message="No existe el costo unitario para la Partida.", + solution=[ + f"Entrar a la partida: {line.line_number} y capturar el Costo Unitario." + ], + code="UNIT_COST_REQUIRED", + ) + + # Validar clase habilitada/deshabilitada + if line.class_id is not None: + cls: Class | None = db.get(Class, line.class_id) + if cls and cls.is_active is False: + errors.add_error( + field=f"line[{line.line_number}].class", + message=( + f"El número de parte: {cls.class_code} esta desactivado, no se pueden hacer movimientos." + ), + solution=["Seleccionar un número de parte activo."], + code="CLASS_DISABLED", + ) + + # Validar número de parte habilitado/deshabilitado + if line.part_number_id is not None: + part: Part | None = db.get(Part, line.part_number_id) + if part and part.is_active is False: + errors.add_error( + field=f"line[{line.line_number}].part_number", + message=( + f"El número de parte: {part.part_number} esta desactivado, no se pueden hacer movimientos." + ), + solution=["Seleccionar un número de parte activo."], + code="PART_DISABLED", + ) + + search_fraction_preference( + db=db, + country=line.customs.origin_country or "", + fraccion=line.customs.fraction if line.customs else "", + fraction_type=line.customs.fraction_type if line.customs else "", + sector=line.customs.sector if line.customs else "", + invoice_date=invoice.invoice_date, + errors=errors, + ) + + review_series(db, line, company_rfc, errors) + + # Validación de la Regla Octava + if line.octave_permit: + if not company.prosec: + errors.add_error( + field=f"line[{line.line_number}].octave_permit", + message="No se puede hacer uso de la Regla Octava, ...", + solution=["Borrar el permiso o dar de alta el permiso PROSEC..."], + code="OCTAVA_SIN_PROSEC", + ) + else: + desc_entry = llena_impo_permiso_regla_octava( + db=db, + invoice=invoice, + line=line, + company_rfc=company_rfc, + tenant_id=tenant_id, + company_id=company_id, + errors=errors, + ) + if desc_entry is not None: + octave_desc.append(desc_entry) + available = revpermiso_regla_octava( + db=db, + invoice=invoice, + line=line, + company_rfc=company_rfc, + tenant_id=tenant_id, + company_id=company_id, + errors=errors, + ) + if available is not None: + key = (available.octave_permit, available.ro_line, available.country_code) + octave_available.setdefault(key, available) + + revisa_uma(db=db, line=line, tenant_id=tenant_id, company_id=company_id, errors=errors) + + return octave_desc, octave_available + + +def _validate_sisimp_limits( + invoice: InvoiceHeader, + errors: ErrorCollector, +) -> None: + """ + Valida los límites de cantidad, peso y valor configurados en SisImp. + + TODO: Leer los parámetros SisImp desde la configuración del sistema: + - SisImp:CantLimiteMin / SisImp:CantLimite + - SisImp:PesoLimiteMin / SisImp:PesoLimite + - SisImp:ValorLimiteMin / SisImp:ValorLimite + Una vez disponibles, usar invoice.financials.total_quantity, net_weight y value_mc. + """ + # TODO: Implementar cuando SisImp esté disponible en la configuración del tenant + pass + + +def _update_invoice_totals(invoice: InvoiceHeader) -> None: + """ + Copia los totales calculados de financials/logistics al encabezado de la factura + y calcula IVA, incrementables y valores de aduanas. + + TODO: Validar SSisGen:ActSeguridad para asignar el usuario que actualizó. + TODO: Validar SSisGen:CalValBaseTCPed para registrar el mensaje de procesamiento. + """ + tc = Decimal(str(invoice.financials.exchange_rate or 0)) + tc_mm = Decimal(str(invoice.financials.exchange_rate_mm or 0)) + + # Calcular IVA sólo para facturas con fecha posterior al corte (78165 en Clarion = 2004-06-01 aprox.) + iva_factor = Decimal(str(invoice.financials.iva_factor or 0)) if invoice.financials.iva_factor else Decimal(0) + if invoice.invoice_date and invoice.invoice_date >= date(2014, 12, 31): + invoice.financials.iva_mn = float(Decimal(str(invoice.financials.value_mn or 0)) * iva_factor / 100) + invoice.financials.iva_me = float(Decimal(str(invoice.financials.value_me or 0)) * iva_factor / 100) + else: + invoice.financials.iva_mn = 0.0 + invoice.financials.iva_me = 0.0 + + # Calcular total de incrementables por tipo de moneda + freight = Decimal(str(invoice.financials.freight or 0)) + insurance = Decimal(str(invoice.financials.insurance or 0)) + packaging = Decimal(str(invoice.financials.packaging or 0)) + other = Decimal(str(invoice.financials.other_increments or 0)) + base_increm = freight + insurance + packaging + other + + if invoice.financials.currency == Currency.FOREIGN: # ME + val_seguro = Decimal(str(invoice.financials.total_increments_me or 0)) - base_increm + invoice.financials.total_increments_me = float(base_increm + val_seguro) + invoice.financials.total_increments_mn = float(Decimal(str(invoice.financials.total_increments_me)) * tc) + + elif invoice.financials.currency == Currency.LOCAL: # MN + val_seguro = Decimal(str(invoice.financials.total_increments_mn or 0)) - base_increm + invoice.financials.total_increments_mn = float(base_increm + val_seguro) + invoice.financials.total_increments_me = float( + (Decimal(str(invoice.financials.total_increments_mn)) / tc) if tc else Decimal(0) + ) + + elif invoice.financials.currency == Currency.MANUAL: # MC + val_seguro = ( + (Decimal(str(invoice.financials.total_increments_me or 0)) / tc_mm) if tc_mm else Decimal(0) + ) - base_increm + invoice.financials.total_increments_me = float((base_increm + val_seguro) * tc_mm) + invoice.financials.total_increments_mn = float(Decimal(str(invoice.financials.total_increments_me)) * tc) + + # Marcar la factura como procesada + invoice.status = InvoiceStatus.PROCESSED + invoice.party_count = len(invoice.financials.__dict__) # se sobreescribirá con el conteo real + + # TODO: SSisGen:ActSeguridad = 1 → invoice.updated_by = current_user + # TODO: SSisGen:CalValBaseTCPed = 1 → + # invoice.process_log = "Se Actualizó con el Tipo de Cambio de la Fecha de Pago de Pedimento." + + +def main_process(db: Session, invoice: InvoiceHeader, tenant_id: str, company_id: str) -> dict: + """ + Proceso principal para importar facturas. + + Flujo (porta la rutina principal del legacy SCAII): + 1. Validación previa de datos (pre_validators) + 2. Tipo de cambio del pedimento (TODO: SSisGen:CalValBaseTCPed) + 3. Revisión de clases, tipo de cambio y pesos + 4. Asignación de valores por partida y totalización + 5. Validaciones per-línea (costo, clase, número de parte, Regla Octava, UMA) + 6. Validación de límites SisImp (TODO) + 7. Si no hay errores: actualizar totales e incrementables en la factura y hacer commit + 8. Si hay errores: rollback (SQLAlchemy lo maneja con la excepción) + """ + errors = ErrorCollector() + + # Paso 1: Validación previa + lines = pre_validators(db, invoice, tenant_id, company_id, errors) + if not lines: + errors.add_error( + field="line_items", + message="La factura debe contener al menos una partida para ser importada", + solution=["Agregue partidas a la factura antes de intentar importarla"], + code="NO_LINE_ITEMS", + ) + errors.raise_if_errors() + + # TODO: SSisGen:CalValBaseTCPed = 1 → obtener tipo de cambio de la fecha de pago del pedimento + # y asignarlo a invoice.financials.exchange_rate antes de continuar. + # invoice.which_exchange_rate = 'TCPED' (o 'TCFAC' si CalValBaseTCPed = 0) + + # Paso 2: Revisión de clases y fracciones + review_classes(db, invoice, lines, tenant_id, company_id, errors) + review_exchange_rate(db, invoice, errors) + + if invoice.logistics and invoice.logistics.weight_type == "kgs": + review_weights_kgs(db, lines, tenant_id, company_id, errors) + elif invoice.logistics and invoice.logistics.weight_type == "lbs": + review_weights_lbs(db, lines, tenant_id, company_id, errors) + + # Paso 3: Asignación de valores por partida y totalización de factura + assign_values_lines(invoice, lines) + assign_values_invoice(invoice, lines) + + # Paso 4: Validaciones per-línea + octave_desc, octave_available = _validate_lines(db, invoice, lines, tenant_id, company_id, errors) + + company = db.get(Company, invoice.company_id) + + if company.prosec and octave_desc: + valida_imp_regla_octava( + db=db, + desc_list=octave_desc, + dis_dict=octave_available, + tenant_id=tenant_id, + company_id=company_id, + errors=errors, + ) + + # Paso 5: Límites de SisImp + _validate_sisimp_limits(invoice, errors) + + errors.raise_if_errors() + + # Paso 6: Descontar cupos de Regla Octava + sql_errors: list = [] + if octave_desc: + descuenta_cupo_r_octava( + db=db, + desc_list=octave_desc, + tenant_id=tenant_id, + company_id=company_id, + sql_errors=sql_errors, + ) + + # Paso 7: Actualizar totales, IVA e incrementables y marcar como procesada + _update_invoice_totals(invoice) + + db.flush() \ No newline at end of file diff --git a/backend/api/v1/modules/a76/invoices/imports/process/pre_validators.py b/backend/api/v1/modules/a76/invoices/imports/process/pre_validators.py new file mode 100644 index 00000000..c69039ab --- /dev/null +++ b/backend/api/v1/modules/a76/invoices/imports/process/pre_validators.py @@ -0,0 +1,107 @@ +from sqlalchemy import func +from sqlalchemy.orm import Session +from api.v1.modules.a76.invoices.models import InvoiceHeader, InvoiceStatus +from api.v1.modules.a76.items.models import LineItem +from api.v1.modules.a76.general_catalogs.fractions.warning_fractions.models import WarningFraction +from core.exceptions import ErrorCollector + +def pre_validators(db: Session, invoice: InvoiceHeader, tenant_id: str, company_id: str, errors: ErrorCollector): + if invoice.status == InvoiceStatus.PROCESSED: + errors.add( + "status", + "La factura ya fue procesada y no puede ser exportada", + solution=["Verifique el estatus de la factura antes de intentar exportarla"], + code="ALREADY_PROCESSED", + value=invoice.status, + ) + + if not invoice.invoice_date: + errors.add_required_error("invoice_date") + + if not invoice.document_type: + errors.add_required_error("document_type") + + if not invoice.compliance_mx.provider_id: + errors.add_required_error("compliance_mx.provider_id") + + if not invoice.compliance_mx.sold_to_id: + errors.add_required_error("compliance_mx.sold_to_id") + + if not invoice.compliance_mx.shipped_to_id: + errors.add_required_error("compliance_mx.shipped_by_id") + + if not invoice.compliance_mx.customs_broker_id: + errors.add_required_error("compliance_mx.customs_broker_id") + + #TODO: SSISGEN: Seguridad Ejemplo en: BrowseQFacImp + + # 2.- Existe tipo de cambio para la factura seleccionada + #TODO: SSISGEN: VALIDACION DEL TIPO DE CAMBIO EN BASE A LA FECHA DE PAGO DEL PEDIMENTO. + + + if not invoice.financials.exchange_rate or invoice.financials.exchange_rate <= 0: + errors.add_range_error( + "financials.exchange_rate", + min_value=0.0001, + ) + + if not invoice.financials.currency: + errors.add_required_error("El Tipo de Moneda esta vacio no se puede actualizar") + elif invoice.financials.currency == "manual" and not invoice.financials.currency_type: + errors.add_required_error("financials.currency_type") + + # 3.- Validacion que deber de existir un pedimento cuando es requerido + if not invoice.compliance_mx.is_pedimento_pending and not invoice.compliance_mx.pedimento_id: + errors.add_required_error("compliance_mx.pedimento_number") + + # 4.- Verificacion de que existan partidas para la factura, si no hay partidas no se puede procesar + item_count = ( + db.query(func.count(LineItem.id)) + .filter( + LineItem.invoice_id == invoice.id, + LineItem.tenant_id == invoice.tenant_id, + LineItem.company_id == invoice.company_id, + ) + .scalar() + ) + if item_count == 0: + errors.add_error( + field="items", + message="La factura no tiene partidas capturadas.", + solution=["Capture al menos una partida antes de procesar la factura."], + code="NO_ITEMS_FOUND", + ) + + # Advertencias para las fracciones y su horario + lines = db.query(LineItem).filter( + LineItem.invoice_id == invoice.id, + LineItem.tenant_id == tenant_id, + LineItem.company_id == company_id, + ).all() + + fractions = {line.fraction for line in lines if line.fraction} + if fractions: + warned_fractions = { + row.fraction + for row in db.query(WarningFraction.fraction) + .filter(WarningFraction.fraction.in_(fractions), WarningFraction.tenant_id == tenant_id) + .all() + } + for line in lines: + if line.fraction in warned_fractions: + errors.add_warning( + field="fraction", + message="Advertencia: Esta mercancía, sólo podrá entrar al territorio nacional por las aduanas del país, de lunes a sábado de 8:00 a 13:00 hrs. Ley 10, 18, LIGIE 1, Capítulo 87, RGCE 4.5.31., Anexo 4.", + solution=[""], + code="WARNING_FRACTION", + ) + + return lines + + + + + + + + \ No newline at end of file diff --git a/backend/api/v1/modules/a76/invoices/imports/process/routes.py b/backend/api/v1/modules/a76/invoices/imports/process/routes.py new file mode 100644 index 00000000..cc65bc06 --- /dev/null +++ b/backend/api/v1/modules/a76/invoices/imports/process/routes.py @@ -0,0 +1,75 @@ +from typing import Any, Dict + +from fastapi import APIRouter, Depends, HTTPException, Query +from sqlalchemy.orm import Session + +from core.celery_app import celery_app +from core.database import get_core_db +from core.security import get_current_user, validate_access_to_resource + +from .task import process_invoice_task + +router = APIRouter() + + +@router.post("/invoices/{invoice_id}/process") +def trigger_invoice_process( + invoice_id: int, + company_id: int = Query(..., description="Company ID"), + db: Session = Depends(get_core_db), + current_user: Dict[str, Any] = Depends(get_current_user), +): + """ + Inicia el procesamiento de una factura de importación como tarea Celery. + Retorna el task_id para hacer polling del progreso. + """ + tenant_id = validate_access_to_resource(db, company_id, current_user) + + task = process_invoice_task.apply_async( + args=[invoice_id, str(tenant_id), str(company_id)] + ) + + return {"task_id": task.id} + + +@router.get("/invoices/process/{task_id}/status") +def get_invoice_process_status(task_id: str): + """ + Consulta el estado de progreso de una tarea de procesamiento de factura. + + Retorna: + - state: 'PROCESSING' | 'SUCCESS' | 'FAILURE' + - info: { current: int, status: str } (cuando state == 'PROCESSING') + - result: dict (cuando state == 'SUCCESS' o 'FAILURE') + """ + task_result = celery_app.AsyncResult(task_id) + + if task_result.state in ("PENDING", "STARTED"): + return { + "state": "PROCESSING", + "info": {"current": 0, "status": "Iniciando..."}, + } + + if task_result.state == "PROGRESS": + return { + "state": "PROCESSING", + "info": task_result.info or {"current": 0, "status": "Procesando..."}, + } + + if task_result.state == "SUCCESS": + return { + "state": "SUCCESS", + "result": task_result.result, + } + + # FAILURE u otro estado de error + error_info = task_result.result + if isinstance(error_info, Exception): + error_msg = str(error_info) + else: + error_msg = str(error_info) if error_info else "Error desconocido" + + return { + "state": "FAILURE", + "result": error_msg, + } diff --git a/backend/api/v1/modules/a76/invoices/imports/process/sub_process/assing_values.py b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/assing_values.py new file mode 100644 index 00000000..b4983497 --- /dev/null +++ b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/assing_values.py @@ -0,0 +1,99 @@ +from decimal import Decimal +from typing import List + +from sqlalchemy.orm import Session + +from api.v1.modules.a76.invoices.models import Currency, InvoiceHeader +from api.v1.modules.a76.items.models import LineItem + + +def assign_values_lines( + invoice: InvoiceHeader, + lines: List[LineItem], +) -> None: + """ + Calculates and assigns unit costs and values in all currency types for every + line item, based on the invoice currency and exchange rates. + + Also resets inventory counters (quantity_returned, quantity_returned_temp, + quantity_existence) to zero, as done in the legacy ASIGNAVALORES_PARTIDA routine. + + Currency mapping (legacy -> current enum): + ME (moneda extranjera / foreign) -> Currency.FOREIGN + MN (moneda nacional / local) -> Currency.LOCAL + MC (moneda de cuenta / manual) -> Currency.MANUAL + """ + currency = invoice.financials.currency + tc = Decimal(str(invoice.financials.exchange_rate or 0)) + tc_mm = Decimal(str(invoice.financials.exchange_rate_mm or 0)) + + for line in lines: + if line.financial is None: + continue + + capture = line.financial.unit_cost_capture or Decimal(0) + qty = (line.quantity.quantity or Decimal(0)) if line.quantity else Decimal(0) + + if currency == Currency.FOREIGN: # ME + line.financial.unit_cost_usd = capture + line.financial.value_usd = capture * qty + line.financial.unit_cost_mxn = capture * tc + line.financial.value_mxn = capture * tc * qty + line.financial.value_mc = capture * qty + elif currency == Currency.LOCAL: # MN + line.financial.unit_cost_mxn = capture + line.financial.value_mxn = capture * qty + line.financial.unit_cost_usd = (capture / tc) if tc else Decimal(0) + line.financial.value_usd = (capture / tc * qty) if tc else Decimal(0) + line.financial.value_mc = capture * qty + elif currency == Currency.MANUAL: # MC + line.financial.unit_cost_usd = capture * tc_mm + line.financial.value_usd = capture * tc_mm * qty + line.financial.unit_cost_mxn = capture * tc_mm * tc + line.financial.value_mxn = capture * tc_mm * tc * qty + line.financial.value_mc = capture * qty + + # Reset inventory counters + if line.quantity is not None: + line.quantity.quantity_returned = Decimal(0) + line.quantity.quantity_returned_temp = Decimal(0) + line.quantity.quantity_existence = Decimal(0) + + +def assign_values_invoice( + invoice: InvoiceHeader, + lines: List[LineItem], +) -> None: + """ + Totals quantity, weight, and value fields from all line items and writes the + aggregated results to invoice.financials. + + Ported from legacy ASIGNAVALORES_FACTURA routine. + """ + total_quantity = Decimal(0) + total_net_weight = Decimal(0) + total_gross_weight = Decimal(0) + total_packages = 0 + total_value_mxn = Decimal(0) + total_value_usd = Decimal(0) + total_value_mc = Decimal(0) + + for line in lines: + if line.quantity: + total_quantity += line.quantity.quantity or Decimal(0) + total_net_weight += line.quantity.net_weight or Decimal(0) + total_gross_weight += line.quantity.gross_weight or Decimal(0) + total_packages += line.quantity.package_quantity or 0 + if line.financial: + total_value_mxn += line.financial.value_mxn or Decimal(0) + total_value_usd += line.financial.value_usd or Decimal(0) + total_value_mc += line.financial.value_mc or Decimal(0) + + if invoice.financials is not None: + invoice.financials.value_mn = float(total_value_mxn) + invoice.financials.value_me = float(total_value_usd) + invoice.financials.value_mc = float(total_value_mc) + invoice.financials.total_quantity = float(total_quantity) + invoice.financials.net_weight = float(total_net_weight) + invoice.financials.gross_weight = float(total_gross_weight) + invoice.financials.total_packages = total_packages diff --git a/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_classes.py b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_classes.py new file mode 100644 index 00000000..bdd60853 --- /dev/null +++ b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_classes.py @@ -0,0 +1,163 @@ + +from typing import List + +from sqlalchemy import func, or_ +from sqlalchemy.orm import Session + +from api.v1.modules.a76.classes.models import Class +from api.v1.modules.a76.general_catalogs.fractions.historical_tariff_fractions.models import HistoricalTariffFraction +from api.v1.modules.a76.general_catalogs.fractions.tariff_fractions.models import TariffFraction +from api.v1.modules.a76.invoices.models import InvoiceHeader +from api.v1.modules.a76.items.models import LineItem +from core.exceptions import ErrorCollector + + +def _fraction_exists_in_catalog(db: Session, fraction_code: str) -> bool: + """Returns True if the fraction exists in TariffFraction (SFracciones) or + HistoricalTariffFraction (GFraccionesHistorico). + + Fraction format: first 8 chars = base fraction, chars 9-10 = NICO/country (optional). + """ + if not fraction_code: + return True + + base_frac = fraction_code[:8] + nico = fraction_code[8:10] if len(fraction_code) > 8 else "" + + # Check SFracciones (TariffFraction) + tariff_q = db.query(TariffFraction).filter( + func.left(TariffFraction.code, 8) == base_frac + ) + if nico: + tariff_q = tariff_q.filter(TariffFraction.nico == nico) + else: + tariff_q = tariff_q.filter( + or_(TariffFraction.nico.is_(None), TariffFraction.nico == "") + ) + if tariff_q.first() is not None: + return True + + # Check GFraccionesHistorico (HistoricalTariffFraction) + hist_q = db.query(HistoricalTariffFraction).filter( + HistoricalTariffFraction.historical_fraction == base_frac + ) + if nico: + hist_q = hist_q.filter(HistoricalTariffFraction.country == nico) + else: + hist_q = hist_q.filter( + or_( + HistoricalTariffFraction.country.is_(None), + HistoricalTariffFraction.country == "", + ) + ) + return hist_q.first() is not None + + +def _validate_line_fraction( + db: Session, line: LineItem, errors: ErrorCollector +) -> None: + """Adds a FRACCION error if the line's fraction does not exist in either catalog.""" + fraction = line.customs.fraction if line.customs else None + if not fraction: + return + + if _fraction_exists_in_catalog(db, fraction): + return + + class_code = line.class_info.class_code if line.class_info else "" + errors.add_error( + field="fraction", + message=( + f"La Factura contiene la fraccion: {fraction} asociada al Clase {class_code} " + "que no existe en el catálogo de fracciones" + ), + solution=["Agregar la fracción a fracciones históricas."], + code="FRACCION", + ) + + +def review_classes( + db: Session, + invoice: InvoiceHeader, + lines: List[LineItem], + tenant_id: str, + company_id: str, + errors: ErrorCollector, +) -> None: + """ + Validates class and fraction integrity for all line items of an invoice. + + Logic ported from legacy REVISA_CLASE routine: + 1. Identify line items with no assigned class (class_id IS NULL). + 2. If rule_3121_parties_ii: validate that every line has container_parts_ii set. + 3a. If no class errors: validate fractions for ALL lines. + 3b. If class errors exist: add a CLASE error per invalid line and validate + fractions only for those lines. + 4. If the invoice has not been reviewed by the company, flag lines whose + class requires physical review (Class.physical_review == 1). + """ + # 1. Lines whose class is not assigned / not found in the catalog + invalid_class_lines = [line for line in lines if line.class_id is None] + has_class_errors = bool(invalid_class_lines) + + # 2. Container validation (Regla 3.1.21 Partes II) + if invoice.compliance_mx.rule_3121_parties_ii: + for line in lines: + if not line.container_parts_ii: + class_code = line.class_info.class_code if line.class_info else "" + errors.add_error( + field="container_parts_ii", + message=f"La clase: {class_code} no tiene contenedor asignado", + solution=[f"Capturar el contenedor en la partida: {line.line_number}"], + code="CONTENEDOR", + ) + + # 3. Fraction and class validation + if not has_class_errors: + # All classes are valid — validate fractions for every line + for line in lines: + _validate_line_fraction(db, line, errors) + else: + # Some classes are missing — report CLASE errors and validate + # fractions only for the affected lines + for line in invalid_class_lines: + errors.add_error( + field="class", + message=f"La clase no existe en catálogo de clases (línea: {line.line_number})", + solution=[ + f"Borrar la partida: {line.line_number}, " + "o dar de alta la clase en el catálogo de Clases" + ], + code="CLASE", + ) + _validate_line_fraction(db, line, errors) + + # 4. Physical review check + if not invoice.compliance_mx.was_reviewed_by_company: + review_required_lines = ( + db.query(LineItem) + .join(Class, LineItem.class_id == Class.id) + .filter( + LineItem.invoice_id == invoice.id, + LineItem.tenant_id == tenant_id, + LineItem.company_id == company_id, + Class.physical_review == 1, + ) + .all() + ) + for line in review_required_lines: + cls = db.get(Class, line.class_id) + class_code = cls.class_code if cls else "" + errors.add_error( + field="physical_review", + message=( + f"La Clase: {class_code} en la Linea: {line.line_number} " + "No ha sido Revisada." + ), + solution=[ + f"Revisar el Equipo de la Partida: {line.line_number} " + "y Asignar Como Revisado a Nivel Factura." + ], + code="CLASE", + ) + \ No newline at end of file diff --git a/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_exchange_rate.py b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_exchange_rate.py new file mode 100644 index 00000000..892fa2d7 --- /dev/null +++ b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_exchange_rate.py @@ -0,0 +1,67 @@ +from decimal import Decimal + +from sqlalchemy import func +from sqlalchemy.orm import Session + +from api.v1.modules.a76.general_catalogs.exchange_rate.models import ExchangeRate +from api.v1.modules.a76.invoices.models import InvoiceHeader +from core.exceptions import ErrorCollector + + +def review_exchange_rate( + db: Session, + invoice: InvoiceHeader, + errors: ErrorCollector, +) -> None: + """ + Validates that the invoice's exchange rate matches the one registered in the + catalog for the invoice date (gtipocambio / ExchangeRate table). + + Ported from legacy REVISA_TIPOCAMBIO routine. + Only runs when the system is NOT configured to use the pedimento's exchange + rate (SisGen:CalValBaseTCPed = 0), which corresponds to the TODO comment in + main_process: the caller is responsible for skipping this call when that flag + is active. + """ + if not invoice.invoice_date: + return + + catalog_rate: ExchangeRate | None = ( + db.query(ExchangeRate) + .filter( + ExchangeRate.tenant_id == invoice.tenant_id, + ExchangeRate.company_id == invoice.company_id, + func.date(ExchangeRate.date) == invoice.invoice_date, + ) + .first() + ) + + if catalog_rate is None: + errors.add_error( + field="exchange_rate", + message="No existe tipo de cambio registrado para la fecha de la factura", + solution=[ + "Capture el tipo de cambio correspondiente a la fecha de la factura " + "en el catálogo de Tipo de Cambio" + ], + code="TIPO_DE_CAMBIO", + ) + return + + invoice_tc = ( + Decimal(str(invoice.financials.exchange_rate)) + if invoice.financials and invoice.financials.exchange_rate is not None + else None + ) + catalog_tc = catalog_rate.value + + if invoice_tc is None or catalog_tc is None or invoice_tc != catalog_tc: + errors.add_error( + field="exchange_rate", + message="No esta capturado correctamente el Tipo de Cambio", + solution=[ + "Capture o modifique el tipo de cambio que corresponda a la factura " + "en el catálogo de Tipo de Cambio" + ], + code="TIPO_DE_CAMBIO", + ) diff --git a/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_rule_octave.py b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_rule_octave.py new file mode 100644 index 00000000..3f19cd68 --- /dev/null +++ b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_rule_octave.py @@ -0,0 +1,944 @@ +from dataclasses import dataclass +from datetime import date +from decimal import Decimal +from typing import Optional, List + +from sqlalchemy.orm import Session + +from api.v1.modules.a76.general_catalogs.fractions.previous_fractions.models import PreviousFraction +from api.v1.modules.a76.general_catalogs.unit_conversions.models import UnitConversion +from api.v1.modules.a76.invoices.models import InvoiceHeader +from api.v1.modules.a76.items.models import LineItem +from api.v1.modules.a76.rule_octave.balances.models import OctaveBalance +from api.v1.modules.a76.rule_octave.country.models import CountryRuleOct +from api.v1.modules.a76.rule_octave.fractions.models import FractionRuleOctave +from api.v1.modules.a76.rule_octave.permissions.models import OctavePermission +from core.exceptions import ErrorCollector + +# Clarion date 80354 ≈ 2010-05-31 (see previous_fractions/models.py) +_CLARION_DATE_CUTOFF = date(2010, 5, 31) + +# RFCs where fraction comparison uses only the first 8 characters +_RFC_FRACTION_8_CHARS = {"CLA940831AZ5", "CTE9801305I8"} + + +@dataclass +class OctavePermitEntry: + """ + Entrada de permiso de Regla Octava para importación. + Paridad: registro en QueuePermReglaOctDesc / QROImp (Clarion SCAII). + """ + + invoice_import: str # FacturaImpo — encabezado de la factura + import_line: int # LineaImpo + part_number: str # NumParte (número de parte o clase) + octave_permit: str # PermisoROctava + ro_line: int # LineaRO + origin_country: str # PaisOrigen + fraction_type: str # TipoFracImpo + import_fraction: str # FraccionImpo + sector: str # Sector + class_code: str # Clase + unit_of_measure: str # UniMed — se resuelve en _revisa_um + quantity: Decimal # Cantidad + value: Decimal # Valor + quantity_used: Decimal # CantUsada (inicia en 0) + value_used: Decimal # ValorUsado (inicia en 0) + + +# ───────────────────────────────────────────────────────────────────────────── +# Helpers +# ───────────────────────────────────────────────────────────────────────────── + +def _get_unit_equivalence( + db: Session, + from_unit: str, + to_unit: str, + tenant_id: str, + company_id: str, +) -> tuple[str, Decimal]: + """ + Busca una conversión entre dos unidades de medida. + Paridad: REVEQUIVALENCIA (Clarion SCAII). + + Retorna (multi_divide, factor_conv): + - ('M', factor) → multiplicar cantidad por factor + - ('D', factor) → dividir cantidad por factor + - ('', 0) → no existe equivalencia + """ + conv = ( + db.query(UnitConversion) + .filter( + UnitConversion.tenant_id == tenant_id, + UnitConversion.company_id == company_id, + UnitConversion.from_unit_code == from_unit, + UnitConversion.to_unit_code == to_unit, + ) + .first() + ) + if conv and conv.conversion_factor: + return "M", conv.conversion_factor + + conv_inv = ( + db.query(UnitConversion) + .filter( + UnitConversion.tenant_id == tenant_id, + UnitConversion.company_id == company_id, + UnitConversion.from_unit_code == to_unit, + UnitConversion.to_unit_code == from_unit, + ) + .first() + ) + if conv_inv and conv_inv.conversion_factor: + return "D", conv_inv.conversion_factor + + return "", Decimal(0) + + +def _previous_fraction_exists( + db: Session, + tenant_id: str, + company_id: str, + previous_fraction: str, + current_fraction: str, +) -> bool: + """ + Verifica si existe un mapeo fracción-anterior → fracción-actual. + Paridad: consulta a SFraccionesAnterioresN (Clarion SCAII). + """ + return ( + db.query(PreviousFraction) + .filter( + PreviousFraction.tenant_id == tenant_id, + PreviousFraction.company_id == company_id, + PreviousFraction.previous_fraction == previous_fraction, + PreviousFraction.current_fraction == current_fraction, + ) + .count() + ) > 0 + + +# ───────────────────────────────────────────────────────────────────────────── +# REVISA_UM_REGLA_OCTAVA +# ───────────────────────────────────────────────────────────────────────────── + +def _revisa_um_regla_octava( + db: Session, + line: LineItem, + permission: OctavePermission, + entry: OctavePermitEntry, + company_rfc: str, + tenant_id: str, + company_id: str, + errors: ErrorCollector, +) -> None: + """ + Revisión de unidades de medida para Regla Octava. + Paridad: REVISA_UM_REGLA_OCTAVA (Clarion SCAII). + + - Busca la fracción del permiso RO a nivel de línea. + - Valida que la fracción de la partida coincida con la del permiso. + - Determina la cantidad y UM a registrar en el entry, usando conversión si aplica. + """ + ro_line = line.reference.ro_line if line.reference else 0 + if not ro_line: + return + + line_fraction = ( + db.query(FractionRuleOctave) + .filter( + FractionRuleOctave.tenant_id == tenant_id, + FractionRuleOctave.company_id == company_id, + FractionRuleOctave.permission == line.octave_permit, + FractionRuleOctave.line == ro_line, + ) + .first() + ) + + if line_fraction is None: + errors.add_error( + field=f"line[{line.line_number}].octave_permit", + message=( + f"El Permiso de Regla Octava: {line.octave_permit}" + f" con línea: {ro_line} no existe." + ), + solution=["Revisar el Permiso de Regla Octava en la Partida de Importación."], + code="RO_FRACTION_NOT_FOUND", + ) + return + + # ── Validar fracción ───────────────────────────────────────────────────── + line_fraccion = (line.customs.fraction or "") if line.customs else "" + ro_fraccion = line_fraction.fraction or "" + + use_8_chars = company_rfc.upper() in _RFC_FRACTION_8_CHARS + frac_line = line_fraccion[:8] if use_8_chars else line_fraccion + frac_ro = ro_fraccion[:8] if use_8_chars else ro_fraccion + + if frac_line != frac_ro: + start_date = permission.start_date + if start_date and hasattr(start_date, "date"): + start_date = start_date.date() + allow_previous = start_date is not None and start_date <= _CLARION_DATE_CUTOFF + + fraction_ok = False + if allow_previous: + fraction_ok = _previous_fraction_exists( + db, + tenant_id, + company_id, + previous_fraction=ro_fraccion[:8], + current_fraction=line_fraccion[:8], + ) + + if not fraction_ok: + errors.add_error( + field=f"line[{line.line_number}].customs.fraction", + message=f"La fracción: {frac_line} es diferente a la Fraccion: {frac_ro}", + solution=["Revisar la Partida de Importación y el Permiso de Regla Octava."], + code="RO_FRACTION_MISMATCH", + ) + return + + # ── Determinar cantidad y valor según unidad de medida ─────────────────── + entry.unit_of_measure = line_fraction.unit_of_measure or "" + line_um = line.unit_of_measure_info.code if line.unit_of_measure_info else "" + quantity = Decimal(str(line.quantity.quantity or 0)) if line.quantity else Decimal(0) + value_me = Decimal(str(line.financial.value_usd or 0)) if line.financial else Decimal(0) + + if line_fraction.unit_of_measure == line_um: + entry.quantity = quantity + entry.value = value_me + return + + multi_divide, factor_conv = _get_unit_equivalence( + db, line_um, line_fraction.unit_of_measure or "", tenant_id, company_id + ) + + if multi_divide == "M": + entry.quantity = quantity * factor_conv + entry.value = value_me + elif multi_divide == "D": + entry.quantity = quantity / factor_conv if factor_conv else Decimal(0) + entry.value = value_me + else: + if line_fraction.unit_of_measure == "KGS": + net_weight = ( + Decimal(str(line.quantity.net_weight or 0)) if line.quantity else Decimal(0) + ) + entry.quantity = net_weight + entry.value = value_me + else: + errors.add_error( + field=f"line[{line.line_number}].unit_of_measure", + message=( + f"Regla Octava: No hay equivalencia entre la U.M. del Permiso de RO: " + f"{line_fraction.unit_of_measure} y la U.M. de captura {line_um}." + ), + solution=["Capturar su equivalencia en el Catálogo de Equivalencias."], + code="EQUIVALENCIA", + ) + + +# ───────────────────────────────────────────────────────────────────────────── +# LLENA_IMPO_PERMISO_REGLA_OCTAVA +# ───────────────────────────────────────────────────────────────────────────── + +def llena_impo_permiso_regla_octava( + db: Session, + invoice: InvoiceHeader, + line: LineItem, + company_rfc: str, + tenant_id: str, + company_id: str, + errors: ErrorCollector, +) -> Optional[OctavePermitEntry]: + """ + Llena lo que se quiere importar con los permisos de Regla Octava. + Paridad: LLENA_IMPO_PERMISO_REGLA_OCTAVA (Clarion SCAII). + + Retorna un OctavePermitEntry listo para agregar a la cola de permisos RO, + o None si el permiso indicado en la partida no existe en el catálogo. + """ + octave_permit_code = line.octave_permit or "" + + permission = ( + db.query(OctavePermission) + .filter( + OctavePermission.tenant_id == tenant_id, + OctavePermission.company_id == company_id, + OctavePermission.permission == octave_permit_code, + ) + .first() + ) + + if permission is None: + return None + + # NumParte: preferir número de parte, caer en código de clase + part_number = "" + if line.part_info and line.part_info.part_number: + part_number = line.part_info.part_number + elif line.class_info and line.class_info.class_code: + part_number = line.class_info.class_code + + class_code = (line.class_info.class_code or "") if line.class_info else "" + + # Sector: preferir el de la partida, caer en el del permiso + if line.customs and line.customs.sector: + sector = line.customs.sector + else: + sector = permission.sector or "" + + ro_line = line.reference.ro_line if line.reference else 0 + + entry = OctavePermitEntry( + invoice_import=invoice.invoice_number or "", + import_line=line.line_number, + part_number=part_number, + octave_permit=octave_permit_code, + ro_line=ro_line or 0, + origin_country=(line.customs.origin_country or "") if line.customs else "", + fraction_type=(line.customs.fraction_type or "") if line.customs else "", + import_fraction=(line.customs.fraction or "") if line.customs else "", + sector=sector, + class_code=class_code, + unit_of_measure="", # resuelto en _revisa_um_regla_octava + quantity=Decimal(0), + value=Decimal(0), + quantity_used=Decimal(0), + value_used=Decimal(0), + ) + + _revisa_um_regla_octava( + db=db, + line=line, + permission=permission, + entry=entry, + company_rfc=company_rfc, + tenant_id=tenant_id, + company_id=company_id, + errors=errors, + ) + + return entry + + +# ───────────────────────────────────────────────────────────────────────────── +# REVPERMISO_REGLA_OCTAVA +# ───────────────────────────────────────────────────────────────────────────── + +@dataclass +class OctaveAvailableEntry: + """ + Cupo disponible de una línea de permiso de Regla Octava. + Paridad: registro en QueuePermReglaOctDis / QRODis (Clarion SCAII). + """ + + octave_permit: str # Permiso + fraction: str # Fraccion + ro_line: int # LineaRO + country_code: str # ClaveM3 (PaisOrigen) + sector: str # Sector (del permiso) + available_quantity: Decimal # CantidadDisponible = CantidadCupo - CantUsada + quantity_used: Decimal # CantUsada (inicia en 0) + available_value: Decimal # ValorDisponible = ValorCupo - ValorUsada + value_used: Decimal # ValorUsado (inicia en 0) + + +def _validate_fraction_ro( + db: Session, + line: LineItem, + permission: OctavePermission, + line_fraction: FractionRuleOctave, + company_rfc: str, + tenant_id: str, + company_id: str, + errors: ErrorCollector, + octave_permit_code: str, +) -> bool: + """ + Valida que la fracción de la partida coincida con la del permiso de RO. + Reutilizada por REVPERMISO_REGLA_OCTAVA. + Retorna True si es válida, False si se añadió un error. + """ + line_fraccion = (line.customs.fraction or "") if line.customs else "" + ro_fraccion = line_fraction.fraction or "" + + use_8_chars = company_rfc.upper() in _RFC_FRACTION_8_CHARS + frac_line = line_fraccion[:8] if use_8_chars else line_fraccion + frac_ro = ro_fraccion[:8] if use_8_chars else ro_fraccion + + if frac_line == frac_ro: + return True + + start_date = permission.start_date + if start_date and hasattr(start_date, "date"): + start_date = start_date.date() + allow_previous = start_date is not None and start_date <= _CLARION_DATE_CUTOFF + + if allow_previous and _previous_fraction_exists( + db, tenant_id, company_id, + previous_fraction=ro_fraccion[:8], + current_fraction=line_fraccion[:8], + ): + return True + + errors.add_error( + field=f"line[{line.line_number}].customs.fraction", + message=f"La fracción: {frac_line} es diferente a la Fraccion: {frac_ro}.", + solution=[f"Agregarla al Número de Permiso de Regla Octava: {octave_permit_code}."], + code="PERMISO_REG_8VA", + ) + return False + + +def revpermiso_regla_octava( + db: Session, + invoice: InvoiceHeader, + line: LineItem, + company_rfc: str, + tenant_id: str, + company_id: str, + errors: ErrorCollector, +) -> Optional[OctaveAvailableEntry]: + """ + Revisión del Permiso de Regla Octava. + Paridad: REVPERMISO_REGLA_OCTAVA (Clarion SCAII). + + Valida: + - Existencia del permiso en el catálogo. + - Coherencia de sector (cuando fracción es PROSEC). + - Rango de fechas del permiso vs fecha de la factura. + - Existencia de la línea/fracción dentro del permiso. + - Concordancia de fracción arancelaria. + - Cupo disponible no agotado. + - Existencia del país de origen dentro de la línea del permiso. + + Retorna un OctaveAvailableEntry si no hay errores (para ser agregado a la + cola QueuePermReglaOctDis del proceso principal), o None en caso contrario. + """ + octave_permit_code = (line.octave_permit or "").strip() + ro_line = line.reference.ro_line if line.reference else 0 + origin_country = (line.customs.origin_country or "") if line.customs else "" + fraction_type = (line.customs.fraction_type or "") if line.customs else "" + line_sector = (line.customs.sector or "") if line.customs else "" + invoice_date = invoice.invoice_date + + has_error = False + + if ro_line: + if not octave_permit_code: + # Tiene LineaRO pero no hay permiso capturado + errors.add_error( + field=f"line[{line.line_number}].octave_permit", + message=( + "No existe capturado un Permiso de Regla Octava " + "y si una Línea de algún permiso de Regla Octava" + ), + solution=[ + "Capturar un Permiso de Regla Octava para la Linea " + "correspondiente del Permiso de Regla Octava." + ], + code="PERMISO_REG_8VA", + ) + return None + + # ── Buscar el permiso ───────────────────────────────────────────── + permission = ( + db.query(OctavePermission) + .filter( + OctavePermission.tenant_id == tenant_id, + OctavePermission.company_id == company_id, + OctavePermission.permission == octave_permit_code, + ) + .first() + ) + + if permission is None: + errors.add_error( + field=f"line[{line.line_number}].octave_permit", + message=( + f"La Partida: {line.line_number} tiene el permiso " + f"{octave_permit_code} de Regla Octava y no esta dado de alta." + ), + solution=[ + f"Dar de alta el permiso de Regla Octava o Borrar " + f"la partida: {line.line_number}." + ], + code="PERMISO_REG_8VA", + ) + return None + + # ── Validar sector cuando la preferencia es PROSEC ──────────────── + if fraction_type == "PROSEC" and line_sector != (permission.sector or ""): + errors.add_error( + field=f"line[{line.line_number}].customs.sector", + message=( + f"El sector: {line_sector} de la partida es diferente al sector: " + f"{permission.sector} del permiso de Regla Octava." + ), + solution=[ + f"Cambiar de sector en la Partida o en el Permiso: {octave_permit_code}." + ], + code="PERMISO_REG_8VA", + ) + has_error = True + + # ── Validar rango de fechas del permiso ─────────────────────────── + perm_start = permission.start_date + perm_end = permission.end_date + if perm_start and hasattr(perm_start, "date"): + perm_start = perm_start.date() + if perm_end and hasattr(perm_end, "date"): + perm_end = perm_end.date() + + inv_date = invoice_date + if inv_date and hasattr(inv_date, "date"): + inv_date = inv_date.date() + + if inv_date and perm_start and perm_end: + if inv_date < perm_start or inv_date > perm_end: + errors.add_error( + field=f"line[{line.line_number}].octave_permit", + message=( + f"La fecha de la factura no corresponde al rango de fechas " + f"del Permiso: {octave_permit_code} de Regla Octava." + ), + solution=[ + "Modificar el Rango de fechas del Permiso de Regla Octava " + "o seleccionar uno que en su rango entre la fecha de la Factura." + ], + code="PERMISO_REG_8VA", + ) + has_error = True + + # ── Buscar línea/fracción dentro del permiso ────────────────────── + line_fraction = ( + db.query(FractionRuleOctave) + .filter( + FractionRuleOctave.tenant_id == tenant_id, + FractionRuleOctave.company_id == company_id, + FractionRuleOctave.permission == octave_permit_code, + FractionRuleOctave.line == ro_line, + ) + .first() + ) + + if line_fraction is None: + errors.add_error( + field=f"line[{line.line_number}].octave_permit", + message=( + f"No existe la Línea: {ro_line} amparada en el permiso " + f"seleccionado {octave_permit_code} de Regla Octava." + ), + solution=["Verificar los Permisos de Regla Octava"], + code="PERMISO_REG_8VA", + ) + return None + + # ── Validar fracción arancelaria ────────────────────────────────── + if not _validate_fraction_ro( + db, line, permission, line_fraction, company_rfc, + tenant_id, company_id, errors, octave_permit_code, + ): + has_error = True + + # ── Validar cupo disponible ─────────────────────────────────────── + quota_qty = line_fraction.quota_quantity or Decimal(0) + qty_used = line_fraction.quantity_used or Decimal(0) + available_qty = quota_qty - qty_used + + if available_qty == 0: + errors.add_error( + field=f"line[{line.line_number}].octave_permit", + message=( + "La Cantidad Cupo ya esta agotada, no se puede importar " + "más para este permiso de Regla Octava." + ), + solution=["Tramitar otro permiso o seleccione otro Permiso."], + code="PERMISO_REG_8VA", + ) + has_error = True + + # ── Validar país de origen dentro de la línea del permiso ───────── + country = ( + db.query(CountryRuleOct) + .filter( + CountryRuleOct.tenant_id == tenant_id, + CountryRuleOct.company_id == company_id, + CountryRuleOct.permission == octave_permit_code, + CountryRuleOct.line == ro_line, + CountryRuleOct.fraction == (line_fraction.fraction or ""), + CountryRuleOct.country_code == origin_country, + ) + .first() + ) + + if country is None: + errors.add_error( + field=f"line[{line.line_number}].customs.origin_country", + message=( + f"No existe la Línea: {ro_line} con país: {origin_country} " + f"amparada en el permiso seleccionado" + ), + solution=[ + f"Agregar el País: {origin_country} al Número de Permiso " + f"de Regla Octava: {octave_permit_code}." + ], + code="PERMISO_REG_8VA", + ) + has_error = True + + if has_error: + return None + + # ── Construir entry de cupo disponible ──────────────────────────── + quota_val = line_fraction.quota_value or Decimal(0) + val_used = line_fraction.value_used or Decimal(0) + + return OctaveAvailableEntry( + octave_permit=octave_permit_code, + fraction=line_fraction.fraction or "", + ro_line=ro_line, + country_code=origin_country, + sector=permission.sector or "", + available_quantity=available_qty, + quantity_used=Decimal(0), + available_value=quota_val - val_used, + value_used=Decimal(0), + ) + + else: + # ro_line == 0: si hay permiso capturado es un error + if octave_permit_code: + errors.add_error( + field=f"line[{line.line_number}].octave_permit", + message=( + f"No existe una Línea capturada para esta partida de importación " + f"y se tiene el Permiso de Regla Octava: {octave_permit_code}." + ), + solution=["Capturar una Linea de Permiso de Regla Octava."], + code="PERMISO_REG_8VA", + ) + + return None + + +# ───────────────────────────────────────────────────────────────────────────── +# VALIDA_IMP_REGLA_OCTAVA +# ───────────────────────────────────────────────────────────────────────────── + +def valida_imp_regla_octava( + db: Session, + desc_list: List[OctavePermitEntry], + dis_dict: dict, + tenant_id: str, + company_id: str, + errors: ErrorCollector, +) -> None: + """ + Valida lo que se quiere importar contra los cupos disponibles de Regla Octava. + Paridad: VALIDA_IMP_REGLA_OCTAVA (Clarion SCAII). + + Fase 1 — Asignación de saldos: + Itera QueuePermReglaOctDesc (qué se quiere importar) contra + QueuePermReglaOctDis (cupo disponible) y distribuye la cantidad/valor + disponible entre las partidas, acumulando lo "usado" en cada lista. + + Fase 2 — Validación final: + - Cantidad == 0: error (sin conversión de U.M.). + - Cantidad – CantUsada != 0: error (cupo insuficiente). + + Parámetros: + desc_list Lista de OctavePermitEntry construida por llena_impo_permiso_regla_octava. + dis_dict Diccionario {(permiso, ro_line, country_code): OctaveAvailableEntry} + construido por revpermiso_regla_octava. + """ + # ── Fase 1: Balancear saldos ────────────────────────────────────────────── + desc_sorted = sorted( + desc_list, + key=lambda e: (e.octave_permit, e.ro_line, e.origin_country), + ) + + for desc in desc_sorted: + key = (desc.octave_permit, desc.ro_line, desc.origin_country) + dis = dis_dict.get(key) + if dis is None: + continue + + # BREAK: la partida ya está completamente consumida + if ( + desc.quantity - desc.quantity_used == 0 + or desc.value - desc.value_used == 0 + ): + continue + + # CYCLE: el cupo disponible ya está agotado + if ( + dis.available_quantity - dis.quantity_used == 0 + or dis.available_value - dis.value_used == 0 + ): + continue + + # ── Cantidad ────────────────────────────────────────────────────── + qty_needed = desc.quantity - desc.quantity_used + qty_avail = dis.available_quantity - dis.quantity_used + + if qty_needed <= qty_avail: + desc.quantity_used += qty_needed + dis.quantity_used += qty_needed + else: + desc.quantity_used += qty_avail + dis.quantity_used += qty_avail + + # ── Valor ───────────────────────────────────────────────────────── + val_needed = desc.value - desc.value_used + val_avail = dis.available_value - dis.value_used + + if val_needed <= val_avail: + # Asignación directa al total (no acumulativa) — paridad Clarion + desc.value_used = desc.value + dis.value_used += val_needed + else: + # Asignación directa al disponible — paridad Clarion + desc.value_used = dis.available_value + dis.value_used += val_avail + + # ── Fase 2: Validación final ────────────────────────────────────────────── + for desc in desc_list: + line_fraction = ( + db.query(FractionRuleOctave) + .filter( + FractionRuleOctave.tenant_id == tenant_id, + FractionRuleOctave.company_id == company_id, + FractionRuleOctave.permission == desc.octave_permit, + FractionRuleOctave.line == desc.ro_line, + ) + .first() + ) + # line_fraction reservado para validación de costo unitario (comentada en Clarion) + _ = line_fraction + + if desc.quantity == 0: + errors.add_error( + field=f"line[{desc.import_line}].octave_permit", + message=( + "La Cantidad a Descargar del Permiso de Regla Octava es Cero " + "debido a que No hay conversión entre la U.M. de la Partida " + "vs la del Permiso" + ), + solution=[ + "Revisar las U.M. de la Partida de Importación " + "y del Permiso de Regla Octava." + ], + code="PERMISO_REG_8VA", + ) + elif desc.quantity - desc.quantity_used != 0: + errors.add_error( + field=f"line[{desc.import_line}].octave_permit", + message=( + "No se puede importar más de este material " + "bajo el amparo de Regla Octava." + ), + solution=[ + "Revisar la cantidad a Importar de la línea " + "o solicitar otro permiso." + ], + code="PERMISO_REG_8VA", + ) + + +# ───────────────────────────────────────────────────────────────────────────── +# LLENASALDOS_REGLA_OCTAVA +# ───────────────────────────────────────────────────────────────────────────── + +def _llena_fraccion_regla_oct(sector: str) -> str: + """ + Devuelve la fracción arancelaria de Regla Octava según el sector. + Paridad: LLENA_FRACCION_REGLA_OCT (Clarion SCAII). + + El orden de comparación es deliberado: los prefijos más largos (XIX, XXIII) + se evalúan antes que los más cortos (XX, II) para evitar falsos positivos, + exactamente como advierte el comentario original del Clarion. + """ + s = (sector or "").strip() + + if s == "I": return "98020001" + if s[:2] == "II": return "98020002" + if s == "III": return "98020003" + if s == "IV": return "98020004" + if s == "V": return "98020005" + if s == "VI": return "98020006" + if s == "VII": return "98020007" + if s == "VIII": return "98020008" + if s == "IX": return "98020009" + if s == "X": return "98020010" + if s == "XI": return "98020011" + if s == "XII": return "98020012" + if s == "XIII": return "98020013" + if s == "XIV": return "98020014" + if s == "XV": return "98020015" + if s == "XVI": return "98020016" + if s == "XVII": return "98020017" + if s == "XVIII": return "98020018" + if s[:3] == "XIX": return "98020019" # antes de XX + if s == "XXI": return "98020021" + if s == "XXII": return "98020022" + if s[:5] == "XXIII": return "98020023" # antes de XX + if s == "XXIV": return "98020024" + if s == "XXV": return "98020025" + if s[:2] == "XX": return "98020020" # al último — paridad comentario Clarion + return "" + + +def llenasaldos_regla_octava( + db: Session, + entry: "OctavePermitEntry", + unit_cost_me: Decimal, + tenant_id: str, + company_id: str, + sql_errors: list, + consecutive_ref: list, +) -> None: + """ + Llena / actualiza el saldo de Regla Octava en SSaldosReglaOctava. + Paridad: LLENASALDOS_REGLA_OCTAVA (Clarion SCAII). + + - Si el registro no existe (ERRORCODE = 35 en Clarion → no encontrado): + inserta uno nuevo con CantExitencia = quantity_used y + ValorME = quantity_used * unit_cost_me. + - Si ya existe: acumula CantExitencia y ValorME. + + consecutive_ref es una lista de un elemento [int] que actúa como + contador mutable compartido con descuenta_cupo_r_octava. + """ + fraction = _llena_fraccion_regla_oct(entry.sector) + valor_me = entry.quantity_used * unit_cost_me + + existing = ( + db.query(OctaveBalance) + .filter( + OctaveBalance.tenant_id == tenant_id, + OctaveBalance.company_id == company_id, + OctaveBalance.invoice_import == entry.invoice_import, + OctaveBalance.part_number == entry.part_number, + OctaveBalance.origin_country == entry.origin_country, + OctaveBalance.fraction_type == entry.fraction_type, + OctaveBalance.sector == entry.sector, + OctaveBalance.octave_permit == entry.octave_permit, + OctaveBalance.origin == "TEM", + OctaveBalance.system == "SCAF", + OctaveBalance.line == entry.ro_line, + ) + .first() + ) + + try: + if existing is None: + new_balance = OctaveBalance( + tenant_id=tenant_id, + company_id=company_id, + invoice_import=entry.invoice_import, + part_number=entry.part_number, + origin_country=entry.origin_country, + fraction_type=entry.fraction_type, + sector=entry.sector, + octave_permit=entry.octave_permit, + origin="TEM", + system="SCAF", + line=entry.ro_line, + ro_fraction=fraction, + class_code=entry.class_code, + import_fraction=entry.import_fraction, + unit_of_measure=entry.unit_of_measure, + quantity_stock=entry.quantity_used, + value_me=valor_me, + ) + db.add(new_balance) + db.flush([new_balance]) + else: + existing.quantity_stock = (existing.quantity_stock or Decimal(0)) + entry.quantity_used + existing.value_me = (existing.value_me or Decimal(0)) + valor_me + db.flush([existing]) + except Exception as exc: + consecutive_ref[0] += 1 + action = "Agregar" if existing is None else "Actualizar" + sql_errors.append({ + "consecutive": consecutive_ref[0], + "error": ( + f"Error al {action} en (SSaldosReglaOctava) {exc}" + ), + }) + + +# ───────────────────────────────────────────────────────────────────────────── +# DESCUENTA_CUPO_R_OCTAVA +# ───────────────────────────────────────────────────────────────────────────── + +def descuenta_cupo_r_octava( + db: Session, + desc_list: List[OctavePermitEntry], + tenant_id: str, + company_id: str, + sql_errors: list, +) -> None: + """ + Descuenta los cupos de la Regla Octava en GFracROctava. + Paridad: DESCUENTA_CUPO_R_OCTAVA (Clarion SCAII). + + Por cada entrada en desc_list que tenga cantidad y valor usados distintos + de cero: + 1. Llama a llenasaldos_regla_octava para registrar/actualizar SSaldosReglaOctava. + 2. Actualiza FractionRuleOctave acumulando: + - quantity_used += entry.quantity_used + - value_used += entry.quantity_used * unit_cost_me + + Los errores de actualización se acumulan en sql_errors como dicts con + las claves 'consecutive' y 'error'. + """ + consecutive_ref = [0] + + for entry in desc_list: + if entry.quantity_used == 0 or entry.value_used == 0: + continue + + fra_oct = ( + db.query(FractionRuleOctave) + .filter( + FractionRuleOctave.tenant_id == tenant_id, + FractionRuleOctave.company_id == company_id, + FractionRuleOctave.permission == entry.octave_permit, + FractionRuleOctave.line == entry.ro_line, + ) + .first() + ) + + if fra_oct is None: + continue + + unit_cost_me = fra_oct.unit_cost_me or Decimal(0) + + llenasaldos_regla_octava( + db=db, + entry=entry, + unit_cost_me=unit_cost_me, + tenant_id=tenant_id, + company_id=company_id, + sql_errors=sql_errors, + consecutive_ref=consecutive_ref, + ) + + fra_oct.quantity_used = (fra_oct.quantity_used or Decimal(0)) + entry.quantity_used + fra_oct.value_used = (fra_oct.value_used or Decimal(0)) + entry.quantity_used * unit_cost_me + + try: + db.flush([fra_oct]) + except Exception as exc: + consecutive_ref[0] += 1 + sql_errors.append({ + "consecutive": consecutive_ref[0], + "error": ( + f"Error al regresar el Cupo en (Permiso de Regla Octava) {exc}" + ), + }) diff --git a/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_series.py b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_series.py new file mode 100644 index 00000000..9ccdd84f --- /dev/null +++ b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_series.py @@ -0,0 +1,93 @@ +from typing import List + +from sqlalchemy.orm import Session + +from api.v1.modules.a76.general_catalogs.company.models import Company +from api.v1.modules.a76.general_catalogs.units_of_measure.models import UnitOfMeasure +from api.v1.modules.a76.items.models import LineItem +from api.v1.modules.a76.items.series.models import Serie +from core.exceptions import ErrorCollector + +# Clarion: SisGen:CantvsCantSeries +# TODO: leer desde configuración del tenant cuando SisGen esté disponible +_SISIMP_CANT_VS_CANT_SERIES: int = 0 # 0 = desactivado + +# RFCs donde la validación de cantidad vs series únicamente aplica a PZA (paridad Clarion) +_RFC_EXCEPCION_PZA = { + "IMS030409FZ0", + "TOP140430PB6", + "AMA7504258K2", + "BZG111091T9", +} + + +def review_series( + db: Session, + line: LineItem, + company_rfc: int, + errors: ErrorCollector, +) -> None: + """ + Revisa la cantidad de series vs la cantidad a importar, por partida. + + Paridad: REVISA_CANT_SERIES (Clarion SCAII). + + Reglas: + - Si la partida tiene LlevaSerie / has_serial activado: + 1. Si no existen registros de series → error SERIES_VACIAS. + 2. Si SisGen:CantvsCantSeries = 1: + - Para RFC excepcionales: solo valida la coincidencia si UnidadMedida = 'PZA'. + - Para el resto: valida siempre que count(series) != cantidad. + """ + # Resolver RFC de la empresa una sola vez + + + # Solo aplica a partidas que llevan serie + if not (line.description and line.description.has_serial): + return + + series_count = ( + db.query(Serie) + .filter(Serie.line_item_id == line.id) + .count() + ) + + if series_count == 0: + errors.add_error( + field=f"line[{line.line_number}].series", + message="La opción de contiene series esta activada y no existen registros de Series.", + solution=[ + "Desactivar la opción de Lleva series o registrar las series a esta partida." + ], + code="SERIES_VACIAS", + ) + return + + # GNiv:CantSerievsCant = 0 → el bloque series > cantidad estaba comentado en Clarion original + # TODO: leer SisGen:CantvsCantSeries desde la configuración del tenant + if _SISIMP_CANT_VS_CANT_SERIES != 1: + return + + qty = line.quantity.quantity if line.quantity else None + if qty is None: + return + + # Determinar si se debe validar series + validate_series = ( + series_count != qty and + (company_rfc not in _RFC_EXCEPCION_PZA or line.unit_of_measure == "PZA") + ) + + if validate_series: + errors.add_error( + field=f"line[{line.line_number}].series", + message="La Cantidad de Series No Coincide con la Cantidad de la Partida.", + solution=[f"Nivelar las series de la Partida {line.line_number}."], + code="SERIES_VS_CANT", + ) + + + + + + \ No newline at end of file diff --git a/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_uma.py b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_uma.py new file mode 100644 index 00000000..b4e104b9 --- /dev/null +++ b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_uma.py @@ -0,0 +1,129 @@ +from decimal import Decimal + +from sqlalchemy.orm import Session + +from api.v1.modules.a76.general_catalogs.units_of_measure.models import UnitOfMeasureCustoms +from api.v1.modules.a76.items.models import LineItem +from core.exceptions import ErrorCollector + +from .review_rule_octave import _get_unit_equivalence + + +def revisa_uma( + db: Session, + line: LineItem, + tenant_id: str, + company_id: str, + errors: ErrorCollector, +) -> None: + """ + Revisa la unidad de medida americana (UMA) de aduana para una partida. + Paridad: REVISA_UMA (Clarion SCAII). + + Flujo: + 1. Verifica que la UM de la partida exista en el catálogo GUnimedida. + 2. Verifica que esa UM tenga asignada una Clave_AMex (UM aduana mexicana). + 3. Verifica que la Clave_AMex exista en el catálogo GUMAduana. + 4. Verifica que el registro de aduana tenga una UnidadSCAII (a76_unit_code). + 5. Calcula la cantidad UMA: + - Si la UM de la partida coincide con UnidadSCAII → cantidad directa. + - Si no → busca conversión en el catálogo de equivalencias. + 6. Escribe CantImpoUMA y ClaveUMA de regreso en la partida. + """ + uom = line.unit_of_measure_info + line_um_code = uom.code if uom else "" + + # ── 1. Verificar existencia de la UM en el catálogo ────────────────────── + if uom is None: + errors.add_error( + field=f"line[{line.line_number}].unit_of_measure", + message=( + f"No existe la unidad de medida {line_um_code}" + " en el catálogo de Unidades de Medida." + ), + solution=["Capturarla en el catálogo de Unidades de Medida."], + code="UNIMEDIDA", + ) + return + + # ── 2. Verificar que tenga Clave_AMex asignada ─────────────────────────── + customs_code = uom.customs_code or "" + if not customs_code: + errors.add_error( + field=f"line[{line.line_number}].unit_of_measure", + message=( + f"No existe la unidad de medida de la aduana para la unidad de medida " + f"{line_um_code} en el catálogo de Unidades de Medida." + ), + solution=["Asignar la U.M.A en el catálogo de Unidades de Medida."], + code="UNIMEDIDA", + ) + return + + # ── 3. Buscar la UM en el catálogo de Aduana Mex (GUMAduana) ───────────── + customs_uom = ( + db.query(UnitOfMeasureCustoms) + .filter(UnitOfMeasureCustoms.code == customs_code) + .first() + ) + + if customs_uom is None: + errors.add_error( + field=f"line[{line.line_number}].unit_of_measure", + message=( + f"No existe la unidad de medida {customs_code}" + " en el catálogo de Unidades de Medida de la Aduana Mex." + ), + solution=["Actualizar sus Catálogos Fijos o llamar a su proveedor."], + code="UNIMEDIDA", + ) + return + + # ── 4. Verificar que tenga UnidadSCAII asignada ────────────────────────── + scaii_unit = customs_uom.a76_unit_code or "" + if not scaii_unit: + errors.add_error( + field=f"line[{line.line_number}].unit_of_measure", + message=( + f"No tiene asignada la U.M. Equivalente SCAII la unidad de medida " + f"{customs_code} en el catálogo de Unidades de Medida de la Aduana Mex." + ), + solution=["Actualizar sus Catálogos Fijos o llamar a su proveedor."], + code="UNIMEDIDA", + ) + return + + # ── 5. Calcular cantidad UMA ────────────────────────────────────────────── + line_qty = Decimal(str(line.quantity.quantity or 0)) if line.quantity else Decimal(0) + cant_uma = Decimal(0) + + if line_um_code == scaii_unit: + cant_uma = line_qty + else: + multi_divide, factor_conv = _get_unit_equivalence( + db, line_um_code, scaii_unit, tenant_id, company_id + ) + + if multi_divide == "M": + cant_uma = line_qty * factor_conv + elif multi_divide == "D": + cant_uma = line_qty / factor_conv if factor_conv else Decimal(0) + else: + errors.add_error( + field=f"line[{line.line_number}].unit_of_measure", + message=( + f"No hay equivalencia entre la U.M. Partida: {line_um_code}" + f" y la U.M. Aduana {scaii_unit}." + ), + solution=[ + "Capturar su equivalencia en el Catálogo de Conversiones " + "o configurar la U.M.Aduana correcta en la U.M. Comercial." + ], + code="EQUIVALENCIA", + ) + return + + # ── 6. Escribir resultados en la partida ────────────────────────────────── + if line.quantity: + line.quantity.quantity_uma = cant_uma + line.uma_key = customs_code diff --git a/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_weights.py b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_weights.py new file mode 100644 index 00000000..b757405e --- /dev/null +++ b/backend/api/v1/modules/a76/invoices/imports/process/sub_process/review_weights.py @@ -0,0 +1,102 @@ +from typing import List + +from sqlalchemy.orm import Session + +from api.v1.modules.a76.general_catalogs.units_of_measure.models import UnitOfMeasure +from api.v1.modules.a76.items.line_quantities.models import LineQuantity +from api.v1.modules.a76.items.models import LineItem +from core.exceptions import ErrorCollector + + +def review_weights_kgs( + db: Session, + lines: List[LineItem], + tenant_id: str, + company_id: str, + errors: ErrorCollector, +) -> None: + """ + Validates that, for lines whose unit of measure is KGS, the net weight + equals the import quantity. + + Ported from legacy REVISA_CANT_vs_PESONETO_KGS routine. + """ + # Resolve the id of the KGS unit of measure for this tenant/company + kgs_uom = ( + db.query(UnitOfMeasure) + .filter( + UnitOfMeasure.code == "KGS", + UnitOfMeasure.tenant_id == tenant_id, + UnitOfMeasure.company_id == company_id, + ) + .first() + ) + if kgs_uom is None: + # No KGS unit defined for this tenant — nothing to validate + return + + for line in lines: + if line.unit_of_measure != kgs_uom.id: + continue + if line.quantity is None: + continue + + net_weight = line.quantity.net_weight + qty = line.quantity.quantity + + if net_weight is None or qty is None or net_weight != qty: + errors.add_error( + field=f"line[{line.line_number}].net_weight", + message=( + f"Existe diferencia entre la cantidad y el Peso Neto, " + f"la cantidad es de {qty} KGS y el Peso Neto es de {net_weight} KGS." + ), + solution=["Igualar el Peso Neto con la cantidad a importar."], + code="PESO_NETO_KGS", + ) + + +def review_weights_lbs( + db: Session, + lines: List[LineItem], + tenant_id: str, + company_id: str, + errors: ErrorCollector, +) -> None: + """ + Validates that, for lines whose unit of measure is LBS, the net weight + equals the import quantity. + + Ported from legacy REVISA_CANT_vs_PESONETO_LBS routine. + """ + lbs_uom = ( + db.query(UnitOfMeasure) + .filter( + UnitOfMeasure.code == "LBS", + UnitOfMeasure.tenant_id == tenant_id, + UnitOfMeasure.company_id == company_id, + ) + .first() + ) + if lbs_uom is None: + return + + for line in lines: + if line.unit_of_measure != lbs_uom.id: + continue + if line.quantity is None: + continue + + net_weight = line.quantity.net_weight + qty = line.quantity.quantity + + if net_weight is None or qty is None or net_weight != qty: + errors.add_error( + field=f"line[{line.line_number}].net_weight", + message=( + f"Existe diferencia entre la cantidad y el Peso Neto, " + f"la cantidad es de {qty} LBS y el Peso Neto es de {net_weight} LBS." + ), + solution=["Igualar el Peso Neto con la cantidad a importar."], + code="PESO_NETO_LBS", + ) diff --git a/backend/api/v1/modules/a76/invoices/imports/process/task.py b/backend/api/v1/modules/a76/invoices/imports/process/task.py new file mode 100644 index 00000000..67c58de8 --- /dev/null +++ b/backend/api/v1/modules/a76/invoices/imports/process/task.py @@ -0,0 +1,122 @@ +from celery import Task + +from core.celery_app import celery_app +from core.database import CoreSessionLocal +from core.exceptions import ErrorCollector, ValidationException + +from api.v1.modules.a76.invoices.models import InvoiceHeader +from api.v1.modules.a76.general_catalogs.company.models import Company +from .pre_validators import pre_validators +from .sub_process.review_classes import review_classes +from .sub_process.review_exchange_rate import review_exchange_rate +from .sub_process.review_weights import review_weights_kgs, review_weights_lbs +from .sub_process.review_rule_octave import valida_imp_regla_octava, descuenta_cupo_r_octava +from .sub_process.assing_values import assign_values_lines, assign_values_invoice +from .main_process import _validate_sisimp_limits, _update_invoice_totals, _validate_lines + + +def _progress(task: Task, current: int, status: str) -> None: + task.update_state(state="PROGRESS", meta={"current": current, "status": status}) + + +@celery_app.task(bind=True, name="process_invoice_task") +def process_invoice_task(self: Task, invoice_id: int, tenant_id: str, company_id: str) -> dict: + """ + Procesa una factura de importación ejecutando todas las validaciones y + actualizaciones del proceso principal (main_process) con reporte de progreso. + """ + db = CoreSessionLocal() + try: + # ── Paso 1: Cargar factura ──────────────────────────────────────────── + _progress(self, 5, "Cargando factura...") + invoice: InvoiceHeader | None = db.get(InvoiceHeader, invoice_id) + if invoice is None: + return { + "status": "error", + "message": f"Factura con id {invoice_id} no encontrada.", + "errors": [], + } + + errors = ErrorCollector() + + # ── Paso 2: Pre-validaciones ────────────────────────────────────────── + _progress(self, 10, "Validando datos de la factura...") + lines = pre_validators(db, invoice, tenant_id, company_id, errors) + if not lines: + errors.add_error( + field="line_items", + message="La factura debe contener al menos una partida para ser importada", + solution=["Agregue partidas a la factura antes de intentar importarla"], + code="NO_LINE_ITEMS", + ) + errors.raise_if_errors() + + # ── Paso 3: Revisión clases, tipo de cambio y pesos ────────────────── + _progress(self, 30, "Revisando clases y tipo de cambio...") + review_classes(db, invoice, lines, tenant_id, company_id, errors) + review_exchange_rate(db, invoice, errors) + + if invoice.logistics and invoice.logistics.weight_type == "kgs": + review_weights_kgs(db, lines, tenant_id, company_id, errors) + elif invoice.logistics and invoice.logistics.weight_type == "lbs": + review_weights_lbs(db, lines, tenant_id, company_id, errors) + + # ── Paso 4: Asignación de valores ───────────────────────────────────── + _progress(self, 50, "Calculando valores por partida...") + assign_values_lines(invoice, lines) + assign_values_invoice(invoice, lines) + + # ── Paso 5: Validaciones por partida ────────────────────────────────── + _progress(self, 70, "Validando partidas...") + octave_desc, octave_available = _validate_lines( + db, invoice, lines, tenant_id, company_id, errors + ) + + # ── Paso 6: Regla Octava y límites SisImp ───────────────────────────── + _progress(self, 85, "Validando cupos de Regla Octava...") + company: Company | None = db.get(Company, invoice.company_id) + if company and company.prosec and octave_desc: + valida_imp_regla_octava( + db=db, + desc_list=octave_desc, + dis_dict=octave_available, + tenant_id=tenant_id, + company_id=company_id, + errors=errors, + ) + _validate_sisimp_limits(invoice, errors) + errors.raise_if_errors() + + # ── Paso 7: Descuento de cupos y actualización de totales ───────────── + _progress(self, 95, "Actualizando totales...") + sql_errors: list = [] + if octave_desc: + descuenta_cupo_r_octava( + db=db, + desc_list=octave_desc, + tenant_id=tenant_id, + company_id=company_id, + sql_errors=sql_errors, + ) + _update_invoice_totals(invoice) + db.flush() + db.commit() + + return { + "status": "success", + "invoice_id": invoice_id, + "sql_errors": sql_errors, + } + + except ValidationException as exc: + db.rollback() + return { + "status": "validation_error", + "message": exc.message, + "errors": exc.errors, + } + except Exception as exc: + db.rollback() + raise exc + finally: + db.close() diff --git a/backend/api/v1/modules/a76/invoices/models.py b/backend/api/v1/modules/a76/invoices/models.py index f3f9e0c7..2bda119c 100644 --- a/backend/api/v1/modules/a76/invoices/models.py +++ b/backend/api/v1/modules/a76/invoices/models.py @@ -63,6 +63,11 @@ class TransportType(str, Enum): AIRPLANE = "airplane" GONDOLA = "gondola" FLATBED = "flatbed" + +class InvoiceStatus(str, Enum): + PENDING = "pending" + PROCESSED = "processed" + REVERSED = "reversed" # --- 1. Invoice Header (invoice_header) --- @@ -108,17 +113,17 @@ class InvoiceHeader(Base, TenantScopedMixin, TimestampMixin): emission_date: Mapped[Optional[datetime]] = mapped_column(Date) # FECHAEMISION # Status & Control - is_updated: Mapped[bool] = mapped_column(Boolean) # ESTATUS - is_updated_rec: Mapped[Optional[bool]] = mapped_column( - Boolean + status: Mapped[InvoiceStatus] = mapped_column(String(10)) # ESTATUS + status_rec: Mapped[Optional[InvoiceStatus]] = mapped_column( + String(10) ) # ESTATUSREC / Estatus de recepción - is_updated_rep: Mapped[Optional[bool]] = mapped_column( - Boolean + status_rep: Mapped[Optional[InvoiceStatus]] = mapped_column( + String(10) ) # ESTATUSREP / Estatus de reporte - updated_date: Mapped[Optional[datetime]] = mapped_column( + processed_date: Mapped[Optional[datetime]] = mapped_column( TIMESTAMP(timezone=False) ) # FECHAACTUALIZACION / FECHAACTUAL - who_updated: Mapped[Optional[str]] = mapped_column( + who_processed: Mapped[Optional[str]] = mapped_column( String(20) ) # USUARIOACT / Quien actualizó capture_user: Mapped[Optional[str]] = mapped_column( @@ -526,6 +531,9 @@ class InvoiceFinancials(Base, TenantScopedMixin, TimestampMixin): total_quantity: Mapped[Optional[float]] = mapped_column( Numeric(19, 8) ) # CANTEXPO/CANTIMPO / Cantidad total + total_packages: Mapped[Optional[int]] = mapped_column( + Integer + ) # CANTBULTOS / Cantidad de bultos gross_weight: Mapped[Optional[float]] = mapped_column( Numeric(19, 8) ) # PESOBRUTO / Peso bruto diff --git a/backend/api/v1/modules/a76/invoices/schemas.py b/backend/api/v1/modules/a76/invoices/schemas.py index 5d05e82e..55cbdabe 100644 --- a/backend/api/v1/modules/a76/invoices/schemas.py +++ b/backend/api/v1/modules/a76/invoices/schemas.py @@ -275,6 +275,7 @@ class InvoiceFinancialsBase(BaseModel): ) seal_value_2500: Optional[bool] = Field(None, description="Seal value 2500") total_quantity: Optional[Decimal] = Field(0.00, description="Total quantity") + total_packages: Optional[int] = Field(0, description="Total packages") gross_weight: Optional[Decimal] = Field(0.00, description="Gross weight") net_weight: Optional[Decimal] = Field(0.00, description="Net weight") bundle_count: Optional[int] = Field(0, description="Bundle count") diff --git a/backend/api/v1/modules/a76/router.py b/backend/api/v1/modules/a76/router.py index 0c2dcab6..0b8283ae 100644 --- a/backend/api/v1/modules/a76/router.py +++ b/backend/api/v1/modules/a76/router.py @@ -10,6 +10,7 @@ from .customs_brokers.routes import router as customs_broker_router # Importar routers de módulos from .general_catalogs.router import router as general_catalogs_router from .invoices.routes import router as invoices_router +from .invoices.imports.process.routes import router as invoice_process_router from .items.routes import router as items_router from .classes.routes import router as classes_router @@ -57,6 +58,7 @@ router = APIRouter() # Registrar módulos router.include_router(general_catalogs_router, prefix="/a76", tags=["a76 / general_catalogs"]) router.include_router(invoices_router, prefix="/a76", tags=["a76 / invoices"]) +router.include_router(invoice_process_router, prefix="/a76", tags=["a76 / invoices"]) router.include_router(items_router, prefix="/a76", tags=["a76 / items"]) router.include_router(imports_router, prefix="/a76/imports", tags=["a76 / imports"]) router.include_router(exportacion_imports_router, prefix="/a76/imports/exportacion", tags=["a76 / imports / exportacion"]) diff --git a/backend/api/v1/modules/a76/rule_octave/balances/__init__.py b/backend/api/v1/modules/a76/rule_octave/balances/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/backend/api/v1/modules/a76/rule_octave/balances/models.py b/backend/api/v1/modules/a76/rule_octave/balances/models.py new file mode 100644 index 00000000..97aa262a --- /dev/null +++ b/backend/api/v1/modules/a76/rule_octave/balances/models.py @@ -0,0 +1,56 @@ +from decimal import Decimal +from typing import Optional + +from sqlalchemy import Integer, Numeric, PrimaryKeyConstraint, String +from sqlalchemy.orm import Mapped, mapped_column + +from api.v1.common.base_models import TenantScopedMixin, TimestampMixin +from core.database import Base + + +class OctaveBalance(Base, TenantScopedMixin, TimestampMixin): + """ + Saldos de Regla Octava por factura/partida. + Paridad: SSaldosReglaOctava (Clarion SCAII). + + La PK es compuesta natural, igual que ROctSal_PKFaParPaiTiSeROProSisLin. + Se agregan tenant_id y company_id al inicio para el scope multi-tenant. + """ + + __tablename__ = "octave_balance" + __table_args__ = ( + PrimaryKeyConstraint( + "tenant_id", + "company_id", + "invoice_import", + "part_number", + "origin_country", + "fraction_type", + "sector", + "octave_permit", + "origin", + "system", + "line", + name="pk_octave_balance", + ), + {"schema": "a76"}, + ) + + # ── PK compuesta ────────────────────────────────────────────────────────── + invoice_import: Mapped[str] = mapped_column(String(15)) # FACTURAIMPO + part_number: Mapped[str] = mapped_column(String(70)) # NUMPARTE + origin_country: Mapped[str] = mapped_column(String(3)) # PAISORIGEN + fraction_type: Mapped[str] = mapped_column(String(7)) # TIPOFRACIMPO + sector: Mapped[str] = mapped_column(String(8)) # SECTOR + octave_permit: Mapped[str] = mapped_column(String(20)) # PERMISOROCTAVA + origin: Mapped[str] = mapped_column(String(3)) # PROCEDENCIA ('TEM') + system: Mapped[str] = mapped_column(String(5)) # SISTEMA ('fixed_asset | inventory') + line: Mapped[int] = mapped_column(Integer) # LINEA + + # ── Datos ───────────────────────────────────────────────────────────────── + quantity_stock: Mapped[Optional[Decimal]] = mapped_column(Numeric(19, 8)) # CANTEXITENCIA + unit_of_measure: Mapped[Optional[str]] = mapped_column(String(5)) # UNIMED + class_code: Mapped[Optional[str]] = mapped_column(String(8)) # CLASE + import_fraction: Mapped[Optional[str]] = mapped_column(String(10)) # FRACCIONIMPO + ro_fraction: Mapped[Optional[str]] = mapped_column(String(10)) # FRACCIONROCTAVA + value_me: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # VALORME diff --git a/backend/api/v1/modules/a76/rule_octave/fractions/models.py b/backend/api/v1/modules/a76/rule_octave/fractions/models.py index 838bf5e3..0ee65a57 100644 --- a/backend/api/v1/modules/a76/rule_octave/fractions/models.py +++ b/backend/api/v1/modules/a76/rule_octave/fractions/models.py @@ -1,19 +1,21 @@ +from decimal import Decimal +from typing import Optional + from api.v1.common.base_models import TenantScopedMixin, TimestampMixin from core.database import Base -from sqlalchemy import ( - ForeignKeyConstraint, - Integer, - PrimaryKeyConstraint, - String, - UniqueConstraint, -) +from sqlalchemy import Integer, Numeric, String, UniqueConstraint from sqlalchemy.orm import Mapped, mapped_column class FractionRuleOctave(Base, TenantScopedMixin, TimestampMixin): + """ + Fracciones por permiso de Regla Octava. + Paridad: GFracROctava (Clarion SCAII). + PK natural: (permission, line, fraction) — se usa junto a tenant/company. + """ + __tablename__ = "fraction_rule_octave" __table_args__ = ( - PrimaryKeyConstraint("id", name="fraction_rule_octave_pkey"), UniqueConstraint( "tenant_id", "company_id", @@ -25,8 +27,14 @@ class FractionRuleOctave(Base, TenantScopedMixin, TimestampMixin): {"schema": "a76"}, ) - id: Mapped[int] = mapped_column(Integer, primary_key=True) + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) - permission: Mapped[str] = mapped_column(String(20)) - line: Mapped[int] = mapped_column(Integer) - fraction: Mapped[str] = mapped_column(String(10)) + permission: Mapped[str] = mapped_column(String(20)) # PERMISO + line: Mapped[int] = mapped_column(Integer) # LINEA + fraction: Mapped[str] = mapped_column(String(10)) # FRACCION + quota_quantity: Mapped[Optional[Decimal]] = mapped_column(Numeric(19, 8)) # CANTIDADCUPO + quantity_used: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # CANTUSADA + quota_value: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # VALORCUPO + value_used: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # VALORUSADA + unit_cost_me: Mapped[Optional[Decimal]] = mapped_column(Numeric(23, 8)) # COSTOUNITARIOME + unit_of_measure: Mapped[Optional[str]] = mapped_column(String(5)) # UNIMED diff --git a/backend/api/v1/modules/a76/rule_octave/permissions/models.py b/backend/api/v1/modules/a76/rule_octave/permissions/models.py index e69de29b..f2ffefc2 100644 --- a/backend/api/v1/modules/a76/rule_octave/permissions/models.py +++ b/backend/api/v1/modules/a76/rule_octave/permissions/models.py @@ -0,0 +1,32 @@ +from typing import Optional + +from sqlalchemy import DateTime, Integer, String, UniqueConstraint +from sqlalchemy.orm import Mapped, mapped_column + +from api.v1.common.base_models import TenantScopedMixin, TimestampMixin +from core.database import Base + +class OctavePermission(Base, TenantScopedMixin, TimestampMixin): + """ + Permisos para la Regla Octava. + Paridad: GPermisoReglaOct (Clarion SCAII). + """ + + __tablename__ = "permission_rule_octave" + __table_args__ = ( + UniqueConstraint( + "tenant_id", + "company_id", + "permission", + name="uq_permissions_rule_octave_permission", + ), + {"schema": "a76"}, + ) + + id: Mapped[int] = mapped_column(Integer, primary_key=True, autoincrement=True) + + permission: Mapped[str] = mapped_column(String(20), nullable=False) # PERMISO + start_date: Mapped[Optional[DateTime]] = mapped_column(DateTime()) # FECHAINICIO + end_date: Mapped[Optional[DateTime]] = mapped_column(DateTime()) # FECHAFINAL + sector: Mapped[Optional[str]] = mapped_column(String(8)) # SECTOR + system: Mapped[Optional[str]] = mapped_column(String(5)) # SISTEMA diff --git a/backend/core/celery_app.py b/backend/core/celery_app.py index 4e739e77..0066fbf8 100644 --- a/backend/core/celery_app.py +++ b/backend/core/celery_app.py @@ -54,7 +54,8 @@ celery_app.conf.update( "api.v1.modules.a76.reports.importacion.winsaai.invoices.task", "api.v1.modules.a76.reports.importacion.winsaai.pedimentos.task", "api.v1.modules.core.help_center.tasks", - "api.v1.modules.core.help_center.tasks" + "api.v1.modules.core.help_center.tasks", + "api.v1.modules.a76.invoices.imports.process.task", ] # Ruta al módulo donde están las tareas ) diff --git a/frontend/src/lib/api/dashboard/a76/invoices.ts b/frontend/src/lib/api/dashboard/a76/invoices.ts index 3e537e6d..039226ba 100644 --- a/frontend/src/lib/api/dashboard/a76/invoices.ts +++ b/frontend/src/lib/api/dashboard/a76/invoices.ts @@ -491,5 +491,29 @@ export const invoicesApi = { }); return api.delete(`/v1/a76/invoices/${invoiceId}/collections/${collectionId}/?${params.toString()}`); } + }, + + processInvoice: (invoiceId: number, companyId: number) => { + const params = new URLSearchParams({ + company_id: companyId.toString() + }); + return api.post<{ task_id: string }>( + `/v1/a76/invoices/${invoiceId}/process?${params.toString()}`, + {} + ); + }, + + getProcessStatus: (taskId: string) => { + return api.get<{ + state: 'PROCESSING' | 'SUCCESS' | 'FAILURE'; + info?: { current: number; status: string }; + result?: { + status: 'success' | 'validation_error' | 'error'; + invoice_id?: number; + message?: string; + errors?: Array<{ field: string; message: string; code?: string; solution?: string[] }>; + sql_errors?: Array<{ consecutive: number; error: string }>; + }; + }>(`/v1/a76/invoices/process/${taskId}/status`); } }; diff --git a/frontend/src/routes/dashboard/invoices/+page.svelte b/frontend/src/routes/dashboard/invoices/+page.svelte index 93f9f5fb..b5079dca 100644 --- a/frontend/src/routes/dashboard/invoices/+page.svelte +++ b/frontend/src/routes/dashboard/invoices/+page.svelte @@ -577,22 +577,37 @@ // Esta función se llama cuando el diálogo reporta SUCCESS try { if (result.status === 'success') { - const blob = base64ToBlob(result.content, result.media_type); - const url = window.URL.createObjectURL(blob); - const a = document.createElement('a'); - a.href = url; - a.download = result.file_name; - document.body.appendChild(a); - a.click(); - window.URL.revokeObjectURL(url); - document.body.removeChild(a); - toast.success('PDF Descargado exitosamente'); + if (result.content) { + // Resultado de generación de PDF: descargar archivo + const blob = base64ToBlob(result.content, result.media_type); + const url = window.URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = result.file_name; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + document.body.removeChild(a); + toast.success('PDF Descargado exitosamente'); + } else { + // Resultado de procesamiento de factura + toast.success('Factura procesada correctamente'); + reloadData(); + } + } else if (result.status === 'validation_error') { + const errors: any[] = result.errors || []; + const preview = errors + .slice(0, 3) + .map((e: any) => `• ${e.message}`) + .join('\n'); + const extra = errors.length > 3 ? `\n...y ${errors.length - 3} más` : ''; + toast.error(`${errors.length} error(es) de validación:\n${preview}${extra}`); } else { toast.error('El worker reportó un error: ' + (result.message || 'Desconocido')); } } catch (e) { - console.error('Error al procesar descarga:', e); - toast.error('Error al procesar el archivo descargado'); + console.error('Error al procesar resultado:', e); + toast.error('Error al procesar el resultado de la tarea'); } finally { // Cerrar diálogo después de un breve momento setTimeout(() => { @@ -683,6 +698,33 @@ } } + async function handleProcessInvoice() { + if (!selectedInvoice || !companyStore.activeCompany) { + toast.info('Selecciona una factura para procesar'); + return; + } + + try { + const response = await invoicesApi.processInvoice( + selectedInvoice.id, + companyStore.activeCompany.id + ); + + if (response.error) { + toast.error(`Error al iniciar el proceso: ${response.error}`); + return; + } + + currentTaskId = response.data!.task_id; + currentStatusFunction = invoicesApi.getProcessStatus; + progressDialogTitle = 'Procesando factura'; + showProgressDialog = true; + } catch (e) { + console.error('Error al iniciar proceso de factura:', e); + toast.error('No se pudo iniciar el proceso'); + } + } + // Opciones de tipo de operación para el filtro const operationTypeOptions = [ { value: '', label: 'Todas' }, @@ -1030,12 +1072,12 @@
{/if} - +