]> Pierre Choffet | Git repositories - banq_wikidata.git/commitdiff
First release of fully working import process
authorPierre Choffet <peuc@wanadoo.fr>
Fri, 20 Mar 2026 02:26:05 +0000 (22:26 -0400)
committerPierre Choffet <peuc@wanadoo.fr>
Fri, 20 Mar 2026 02:27:10 +0000 (22:27 -0400)
13 files changed:
README
banq2wd.sh
export_strings.xslt
filter_marcxml.xslt
fix_label_description_duplicates.xslt [new file with mode: 0644]
marc_banq2wdef.xslt [new file with mode: 0644]
matches.xml [new file with mode: 0644]
matches_occupations.xml [new file with mode: 0644]
matches_places.xml [new file with mode: 0644]
matches_roles.xml [new file with mode: 0644]
merge_fixes.xslt [deleted file]
merge_marcxml.xslt
property_with_no_qids.xslt [new file with mode: 0644]

diff --git a/README b/README
index 19ff4d9cca1fec1ca4288b523710ed6a93ec50e6..0ee7b31a134b22f021b503e437ed84274f21a941 100644 (file)
--- a/README
+++ b/README
@@ -5,6 +5,12 @@ Bibliothèque et Archives nationales du Québec (BAnQ) et les publier dans Wikid
 L’environnement d’utilisation nécessite la disponibilité des outils suivants :
   - Bash - https://www.gnu.org/software/bash/
     Interpréteur des scripts
+    
+  - jq - https://jqlang.org/
+    Interpréteur JSON utilisé au moment de l’envoi des données dans Wikidata
+
+  - wikibase-cli - https://github.com/maxlath/wikibase-cli
+    Envoi des données dans Wikidata
 
   - Xmlstarlet - http://xmlstar.sourceforge.net/
     Processeur XSD et XSLT
@@ -15,6 +21,10 @@ Les outils disponibles sont les suivants :
     Liste les zones des notices bibliographiques faisant référence à des notices
     d’autorité absentes du fichier MARCXML.
 
+  - fix_label_description_duplicates.xslt
+    Corrige les éléments ayant des labels et descriptions similaires, ce qui est
+    interdit dans Wikidata.
+
   - fix_marcxml.xslt
     Corrige les erreurs connues des fichiers MARCXML exportés de la base de
     données de BAnQ pour qu’ils soient valides au regard du schéma officiel.
@@ -30,5 +40,193 @@ Les outils disponibles sont les suivants :
     Exporte les chaînes de titres et sous titres pour les entrées
     bibliographiques vers un fichier TSV.
   
+  - marc_banq2wdef.xslt
+    Feuille de style pour convertir le fichier MARC contenant les données de
+    BAnQ vers un fichier wdef.
+  
+  - matches_occupations.xml, matches_places.xml, matches_roles.xml
+    Liste des équivalents connus dans Wikidata, maintenus manuellement.
+  
   - merge_fixes.xslt
     Importe le fichier TSV contenant les titres et sous-titres une fois corrigé.
+
+
+Le dépôt dépend de deux sous-modules hébergés sur un serveur tiers. Ils doivent
+être téléchargés via la commande suivante :
+
+  $ git submodule update
+
+
+Exemple d’usage :
+
+Le traitement est effectué par des fichiers XSLT, mais ils s’accompagnent d’un
+script Bash pour des raisons de convivialité. Ils sont conçus pour être exécutés
+par étapes successives, chacune reprenant la sortie de la précédente, ou une
+modification manuelle effectuée par un humain.
+
+Les fichiers source sont les exports au format MARCXML tels qu’extraits de la
+base de données interne de l’institution. Dans notre cas, l’export a produit
+quatre fichiers nommés EST_AUT.xml, EST_BIB.xml, ID_AUT.xml et ID_BIB.xml.
+
+0. La première étape consiste en la fusion de ces fichiers source.
+
+  $ ./banq2wd.sh --merge-marcxml EST_AUT.xml EST_BIB.xml ID_AUT.xml ID_BIB.xml > 1-merged.xml
+
+Les entrées présentes en plusieurs exemplaires sont dédoublonnées, la dernière
+occurrence étant la seule conservée. Le résultat est écrit dans un fichier nommé
+1-merged.xml.
+
+
+1. Ensuite, le fichier est validé et les données non voulues ou invalides sont
+filtrées. La liste des modifications appliquées est résumée en en-tête du
+fichier filter_marcxml.xslt.
+
+  $ ./banq2wd.sh --filter-marcxml 1-merged.xml > 2-filtered.xml 2>/tmp/filter.log
+
+La sortie se fait dans le fichier 2-filtered.xml et un journal d’exécution est
+généré dans le fichier /tmp/filter.log dans le but d’être consulté par un humain.
+Les traitements concernant les notices filtrées y sont détaillés ce qui permet
+une validation ou un correctif des données sources avant de continuer aux étapes
+suivantes.
+
+
+2. L’étape suivante regroupe la majeure partie du travail devant être conduit
+par un humain. Elle consiste à extraire les données textuelles qui ne peuvent
+pas être nettoyées automatiquement par une machine dans le contexte d’un import
+dans Wikidata.
+
+Pour assurer une continuité dans les modifications successives réalisées par des
+humains, le script fait appel à des fichiers externes au format XML. Ceux-ci
+conservent l’état des changements à appliquer, réplicables d’un import à l’autre.
+Les modifications à ces fichiers peuvent être effectuées directement via un
+logiciel de type bloc-notes mais d’autres outils sont fournis pour les gérer
+plus facilement.
+
+Pour les données bibliographiques, les données sont enregistrées dans le fichier
+records_fix.xml . L’extraction des titres et des données afférentes en tenant
+compte des modifications déjà connues se fait via la commande suivante :
+
+  $ xmlstarlet tr export_strings.xslt -s strings-fix-path=records_fix.xml -s target=bibliographic 2-filtered.xml > /tmp/titres.tsv 2>/tmp/titres.log
+
+Le fichier généré est un export des titres présent dans le fichier 2-filtered.xml,
+incluant les modifications apportées précédemment via le fichier records_fix.xml.
+Un journal du traitement est écrit dans le fichier /tmp/titres.log.
+
+Les modifications dans le fichier titres.tsv nouvellement généré devrait être
+fait par une personne qui connaisse les données de BAnQ et les règles de graphie
+pour les titres d’œuvres en vigueur sur Wikipédia.
+Une fois l’édition terminée, les correctifs sur les titres peuvent être
+réintégrés dans le fichier records_fix.xml via la commande suivante :
+
+  $ ./banq2wd.sh --merge-fixes records_fix.xml /tmp/titres.tsv
+
+  
+3. L’import vers Wikidata requiert que les données soient format dont la
+structure est similaire à l’organisation utilisée dans Wikidata.
+
+Les entités secondaires telles que les occupations ou les lieux ne sont pas
+créés automatiquement au moment de l’import. Ils doivent donc être réconciliés
+manuellement avec les entrées déjà existantes. Ils sont répertoriés et peuvent
+être maintenus via les fichiers matches_occupations.xml, matches_places.xml et
+matches_roles.xml.
+
+La conversion se fait avec la commande suivante :
+
+  $ xmlstarlet tr marc_banq2wdef.xslt -s strings-fix-path=records_fix.xml -s occupations-matches-path=matches_occupations.xml -s places-matches-path=matches_places.xml -s roles-matches-path=matches_roles.xml -s records-matches-path=matches.xml 2-filtered.xml > 3-wdef.xml 2>/tmp/wdef.log
+
+Le processus génère un journal d’exécution répertoriant dans /tmp/wdef.log le
+travail effectué. Il peut être lu en vue de vérifier la conversion et modifier
+les données source au besoin.
+
+  
+4. Recherche et enregistrement de nouveaux équivalents
+
+Le fichier matches.xml répertorie les identifiants connus pour les entrées
+d’autorité. Sa maintenance se fait de manière semi-automatisée via la commande
+suivante :
+
+  $ ./banq2wd.sh --check-matches 3-wdef.xml matches.xml > matches_new.xml
+
+En fonction des identifiants uniques répertoriés pour les différentes entrées,
+le script va chercher sur Wikidata les entrées déjà existantes. Le travail
+pourrait nécessiter d’être complété par un être humain.
+
+Si de nouveaux éléments préexistants sur Wikipédia ont été trouvés, il est
+nécessaire de supprimer le fichier 3-wdef.xml et de procéder à une nouvelle
+génération. On retourne alors à l’étape 3 en remplaçant le paramètre
+« records-matches-path » par l’emplacement du nouveau fichier matches_new.xml
+
+  
+5. Une fois le fichier wdef validé, il doit être confronté aux propriétés et
+valeurs connues dans les éléments déjà existants dans Wikidata. Ces données
+doivent être supprimées dans le fichier local avant l’import. Nous utilisons
+pour cela un script pré-existant gérant l’opération de manière automatique.
+
+  $ mkdir cache
+  $ ./merge_wd_properties.sh 4-wdef-matches.xml cache/ > 5-wdef-reduced.xml 2>/tmp/reduce.log
+
+
+6. Déduplication des labels et descriptions
+
+Wikidata n’autorise pas deux éléments avec un label et une description communs.
+Le projet contient un schema pour dédupliquer les éléments concernés en ajoutant
+l’identifiant BAnQ à la description. Il s’invoque de la manière suivante :
+
+  $ xmlstarlet tr fix_label_description_duplicates.xslt 5-wdef-reduced.xml > 6-wdef-dedup.xml
+
+
+8. Le fichier est converti vers sa version canonique. Le contenu est le même,
+seule la structure est purgée des entrées inutiles :
+
+  $ xmlstarlet tr wdef_tools/xslts/canonicalize.xslt 6-wdef-dedup.xml > 7-wdef-canonicalized.xml
+
+
+7. Dernière étape avant l’import, il s’agit de vérifier que le fichier utilisé
+pour l’opération est bien valide. Cette validation se fait au moyen d’un schéma
+XSD fourni dans le dépôt wdef_schemas :
+
+  $ xmlstarlet val wdef_schemas/wdef.xsd 7-wdef-canonicalized.xml
+
+  
+9. Cette dernière étape couvre l’import effectif vers Wikidata. L’opération se
+fait au moyen de « wikibase-cli ». Dans la mesure où il traite des opérations en
+écriture, la création d’un compte utilisateur sur Wikidata est obligatoire. Par
+la suite, le lien entre le compte et l’application est détaillé dans la
+documentation de l’outil à cette adresse :
+https://github.com/maxlath/wikibase-cli/blob/main/docs/write_operations.md .
+Il convient aussi d’adjoindre au compte le statut de bot, tel que décrit à cette
+adresse : https://www.wikidata.org/wiki/Wikidata:Bots . La configuration du
+statut de bot se fait enfin dans wikibase-cli via la commande suivante :
+
+  $ wd config bot true
+
+Le script d’import qui contrôle wikibase-cli est maintenu indépendamment et se
+trouve dans le dépôt wdef_tools. Plutôt que de tout importer en une étape, il
+est conçu de manière à fragmenter les étapes à réaliser pour conserver un
+historique de contribution aussi granulaire que possible sur les éléments Wikidata
+modifiés. Il fonctionne donc de manière générationnelle à partir d’un fichier
+wdef : à chaque étape, la première valeur importable est extraite, importée dans
+Wikidata et un nouveau fichier wdef complet mais sans cette donnée est généré.
+Le but de ce fonctionnement est de pouvoir reprendre à tout moment l’import à
+partir de la dernière génération en cas de nécessité de couper temporairement
+l’opération.
+
+S’il est validé que le fichier obtenu à l’étape précédente correspond
+parfaitement aux besoins de l’import, il peut être importé dans Wikidata via la
+commande suivante :
+
+  $ wdef_tools/scripts/import.sh 7-wdef-canonicalized.xml ids 2>>errors
+
+Le premier paramètre correspond au fichier wdef à importer. Dans le fichier
+choisi en second paramètre seront écrits les identifiants des éléments tels que
+renseignés dans le fichier wdef ainsi que leurs QIDs équivalents nouvellement
+créés dans Wikidata. Il pourra par exemple être utilisé pour renseigner les
+identifiants Wikidata directement dans la base de données de BAnQ. Un fichier
+errors contient la sortie stderr, journal des opérations effectuées. Il débute
+notamment par une référence du répertoire temporaire utilisé pour les fichiers
+wdef correspondants aux différentes générations de l’import.
+
+Le script est écrit de manière à s’arrêter par lui-même s’il détecte un
+comportement anormal du fichier source ou de Wikidata, mais il reste conseillé
+de surveiller de loin ses contributions dans Wikidata pour s’assurer qu’il
+effectue bien les modifications attendues.
index 99bfd272eed3ca61dd15df15cea02a6025ae3e78..7877fad7708db2c2b402349124d9817cff0cdab8 100755 (executable)
@@ -1,5 +1,20 @@
 #!/bin/bash
 
+# bash2wd.sh - Wrapper to banq_wikidata xslt stylesheets collection.
+# Copyright (C) 2025, 2026  Pierre Choffet
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of version 3 of the GNU General Public License as
+# published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
 #set -x # Trace commands, for development purpose only
 set -Ceuo pipefail
 
@@ -11,13 +26,17 @@ declare -ar longoptions=('help')
 declare -ar optdescriptions=('afficher l’aide et quitter')
 declare -ar script_dir="$(dirname -- "${BASH_SOURCE[0]}")/"
 
-declare -ar commands=('merge-marcxml' 'merge-fixes')
-declare -ar commandsdescriptions=('fusionner différents fichiers MARCXML' 'récupérer les nettoyages manuels sur les titres d’œuvres')
+declare -ar commands=('merge-marcxml' 'filter-marcxml' 'merge-fixes' 'check-matches' 'apply-matches')
+declare -ar commandsdescriptions=('fusionner différents fichiers MARCXML' 'filtre les données non voulues ou invalides du fichier MARCXML' 'récupérer les nettoyages manuels sur les titres d’œuvres' 'rechercher les identifiants des entrées équivalentes sur Wikidata' 'remplace les identifiants des éléments connus sur Wikdata dans un fichier WDEF')
 
 # Runtime parameters
 declare command
 declare -a merge_filepaths
 
+# Hardcoded parameters
+declare -r wdef_tools_path='wdef_tools'
+declare -r wikidata_sparql_endpoint='https://query.wikidata.org/bigdata/namespace/wdq/sparql'
+
 # Workaround libxslt limitation where string parameters with quote and
 # double-quote characters are illegal. Double-quotes will be replaced by string
 # that will be fixed in xslt.
@@ -70,6 +89,12 @@ function getParams() {
                                        shift
                                done
                                
+                               break
+                       elif [ "${command}" == 'filter-marcxml' ]
+                       then
+                               source_filepath="${1}"
+                               shift
+                               
                                break
                        elif [ "${command}" == 'merge-fixes' ]
                        then
@@ -77,6 +102,20 @@ function getParams() {
                                shift
                                merge_filepath="${1}"
                                
+                               break
+                       elif [ "${command}" == 'check-matches' ]
+                       then
+                               wdef_filepath="${1}"
+                               shift
+                               matches_filepath="${1}"
+                               
+                               break
+                       elif [ "${command}" == 'apply-matches' ]
+                       then
+                               wdef_filepath="${1}"
+                               shift
+                               matches_filepath="${1}"
+                               
                                break
                        else
                                echo 'No valid command.'
@@ -91,10 +130,22 @@ function getParams() {
                        command='merge-marcxml'
                        shift
                        ;;
+               --filter-marcxml)
+                       command='filter-marcxml'
+                       shift
+                       ;;
                --merge-fixes)
                        command='merge-fixes'
                        shift
                        ;;
+               --check-matches)
+                       command='check-matches'
+                       shift
+                       ;;
+               --apply-matches)
+                       command='apply-matches'
+                       shift
+                       ;;
 #              *)
 #                      usage
 #                      exit 1
@@ -143,12 +194,28 @@ mergeMarcXML() {
                local tmp_path="$(mktemp)"
                xmlstarlet tr "${script_dir}merge_marcxml.xslt" -s "marcxml-path=${path}" "${old_tmp_path}" >| "${tmp_path}"
                rm "${old_tmp_path}"
+               
+               if [ ! -s "${tmp_path}" ]
+               then
+                       echo "Le fichier récupéré après la fusion est vide. Interruption." >&2
+                       exit 1
+               fi
+               
                old_tmp_path="${tmp_path}"
                shift
        done
        
        echo "${tmp_path}"
 }
+filterMarcXML() {
+       local -r source_path="${1}"
+       shift
+       
+       local -r output_path="$(mktemp)"
+       xmlstarlet tr filter_marcxml.xslt "${source_path}" >| "${output_path}" 2>&2
+       
+       echo "${output_path}"
+}
 mergeFixes() {
        local -r fixes_path="${1}"
        shift
@@ -208,6 +275,96 @@ mergeFixes() {
        echo "${fixes_path_tmp}"
 }
 
+# Return a path to a copy of the given matches.xml updated with new matches
+checkMatchesProperty() {
+       local -r wdef_path="${1}"
+       shift
+       local -r matches_path="${1}"
+       shift
+       local -r pid="${1}"
+       shift
+       
+       local -r new_matches_path="$(mktemp)"
+       cp "${matches_path}" "${new_matches_path}"
+       
+       # Get IDs of entries with given property and no QID
+       missing_qids_with_property="$(mktemp)"
+       xmlstarlet tr property_with_no_qids.xslt -s "matches-path=${matches_path}" \
+                     -s "pid=${pid}" "${wdef_path}" >| "${missing_qids_with_property}"
+       
+       # Query all ISNI to Wikidata
+       while IFS= read -r id
+       do
+               qid_found=$(${wdef_tools_path}/scripts/get_qid_from_property.sh ${wdef_path} ${id} ${pid} 2>/dev/null)
+               
+               # Update matching entries in matches file
+               if [ "${qid_found}" != '' ]
+               then
+                       xmlstarlet ed --inplace -s /matches -t elem -n match \
+                                               --var match '$prev' \
+                                               -i '$match' -t attr -n id -v "${id}" \
+                                               -i '$match' -t attr -n qid -v "${qid_found}" \
+                                               "${new_matches_path}"
+               fi
+               
+               sleep 2
+       done < "${missing_qids_with_property}"
+       
+       # Cleanup and return new matches file path
+       rm "${missing_qids_with_property}"
+       echo "${new_matches_path}"
+}
+
+checkMatches() {
+       local -r wdef_path="${1}"
+       shift
+       local -r matches_path="${1}"
+       shift
+       
+       # Get matching entries from Wikidata using various IDs
+       local -r matches_isni_path=$(checkMatchesProperty "${wdef_path}" "${matches_path}" P213)
+       
+       local -r matches_isbn10_path=$(checkMatchesProperty "${wdef_path}" "${matches_isni_path}" P957)
+       rm "${matches_isni_path}" 
+       
+       local -r matches_isbn13_path=$(checkMatchesProperty "${wdef_path}" "${matches_isbn10_path}" P212)
+       rm "${matches_isbn10_path}" 
+       
+       local -r matches_loc_path=$(checkMatchesProperty "${wdef_path}" "${matches_isbn13_path}" P244)
+       rm "${matches_isbn13_path}" 
+       
+       local -r matches_banq_path=$(checkMatchesProperty "${wdef_path}" "${matches_loc_path}" P3280)
+       rm "${matches_loc_path}"
+       
+       echo "${matches_banq_path}"
+}
+
+applyMatches() {
+       local -r wdef_path="${1}"
+       shift
+       local -r matches_path="${1}"
+       shift
+       
+       # Get all known matches
+       local -r ids_path=$(mktemp)
+       xmlstarlet sel -t -m '/matches/match' -v '@id' -o '     ' -v '@qid' -n "${matches_path}" >| "${ids_path}"
+       
+       # Loop on a copy of wdef file   
+       local wdef_tmp_path="$(mktemp)"
+       cp "${wdef_path}" "${wdef_tmp_path}"
+       while IFS=$'\t' read -r id qid
+       do
+               new_wdef_path="$(mktemp)"
+               xmlstarlet tr ${wdef_tools_path}/xslts/replace_id.xslt -s "old-id=${id}" -s "new-id=${qid}" "${wdef_tmp_path}" >| "${new_wdef_path}"
+               rm "${wdef_tmp_path}"
+               wdef_tmp_path="${new_wdef_path}"
+       done <"${ids_path}"
+       
+       rm "${ids_path}"
+       
+       echo "${wdef_tmp_path}"
+}
+
 checkEnv
 getParams "$@"
 
@@ -217,9 +374,24 @@ then
        merged_path="$(mergeMarcXML "${merge_filepaths[@]}")"
        cat "${merged_path}"
        rm "${merged_path}"
+elif [ "${command}" == 'filter-marcxml' ]
+then
+       filtered_path=$(filterMarcXML "${source_filepath}")
+       cat "${filtered_path}"
+       rm "${filtered_path}"
 elif [ "${command}" == 'merge-fixes' ]
 then
        merged_path=$(mergeFixes "${fixes_filepath}" "${merge_filepath}")
        cat "${merged_path}"
        rm "${merged_path}"
+elif [ "${command}" == 'check-matches' ]
+then
+       matches_path=$(checkMatches "${wdef_filepath}" "${matches_filepath}")
+       cat "${matches_path}"
+       rm "${matches_path}"
+elif [ "${command}" == 'apply-matches' ]
+then
+       new_wdef_path=$(applyMatches "${wdef_filepath}" "${matches_filepath}")
+       cat "${new_wdef_path}"
+       rm "${new_wdef_path}"
 fi
index c3a7e28a82ed06fcafbdf285279f737c040e31af..10f72a5011f55e7c8174835c12d321480a507d81 100644 (file)
        <xsl:key name="fix-record-name-source" match="/records/record/fix[@type='name']/@source" use="../../@id" />
        <xsl:key name="fix-record-nickname" match="/records/record/fix[@type='nickname']" use="../@id" />
        <xsl:key name="fix-record-nickname-source" match="/records/record/fix[@type='nickname']/@source" use="../../@id" />
+       <xsl:key name="fix-record-corporate-name" match="/records/record/fix[@type='name']" use="../@id" />
+       <xsl:key name="fix-record-corporate-name-source" match="/records/record/fix[@type='name']/@source" use="../@id" />
+       <xsl:key name="fix-record-corporate-name-lang" match="/records/record/fix[@type='name']/@xml:lang" use="../@id" />
+       <xsl:key name="fix-record-meeting-name" match="/records/record/fix[@type='name']" use="../@id" />
        
        <xsl:template match="text()" />
        
                                <xsl:apply-templates select="marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='100']]" mode="person" />
                        </xsl:when>
                        <xsl:when test="$target = 'corporate'">
+                               <xsl:text>ID    Nom original    Langue du nom   Nom corrigé</xsl:text>
+                               <xsl:text>&#10;</xsl:text>
                                <xsl:apply-templates select="marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='110']]" mode="corporate" />
                        </xsl:when>
                        <xsl:when test="$target = 'meeting'">
+                               <xsl:text>ID    Nom original    Nom corrigé</xsl:text>
+                               <xsl:text>&#10;</xsl:text>
                                <xsl:apply-templates select="marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='111']]" mode="meeting" />
                        </xsl:when>
                        <xsl:otherwise>
                <!-- Export title strings -->
                <xsl:choose>
                        <!-- If corresponding entry is found in fix document -->
-                       <xsl:when test="$fix-title != '' and $fix-title-source = $source-title">
+                       <xsl:when test="$fix-title != '' and $fix-title-source-quoted = $source-title-quoted">
                                <xsl:text>"</xsl:text>
                                <xsl:value-of select="$bibliographic-leader" />
                                <xsl:text>"     "</xsl:text>
+                               <xsl:value-of select="$source-title-quoted" />
+                               <xsl:text>"     "</xsl:text>
                                <xsl:value-of select="$fix-title-lang" />
                                <xsl:text>"     "</xsl:text>
                                <xsl:value-of select="$fix-title-quoted" />
-                               <xsl:text>"</xsl:text>
+                               <xsl:text>"     </xsl:text>
                        </xsl:when>
-                       <xsl:when test="$fix-title != '' and $fix-title-source != $source-title">
+                       <xsl:when test="$fix-title != '' and $fix-title-source-quoted != $source-title-quoted">
                                <xsl:message terminate="no">
                                        <xsl:text>Un correctif pour la notice de l’entrée </xsl:text>
                                        <xsl:value-of select="$bibliographic-leader" />
-                                       <xsl:text> existe, mais le titre dans la notice a été modifié depuis. La valeur de correction est ignorée.</xsl:text>
+                                       <xsl:text> existe, mais le titre dans la notice a été modifié depuis(</xsl:text>
+                                       <xsl:value-of select="$fix-title-source" />
+                                       <xsl:text> → </xsl:text>
+                                       <xsl:value-of select="$source-title" />
+                                       <xsl:text>). La valeur de correction est ignorée.</xsl:text>
                                </xsl:message>
                                <xsl:text>"</xsl:text>
                                <xsl:value-of select="$bibliographic-leader" />
        
        <!-- Corporate authority record -->
        <xsl:template match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='110']]" mode="corporate">
-               <xsl:variable name="bibliographic-leader" select="marc:controlfield[@tag='001']" />
-               <xsl:message terminate="yes">Pas encore implémenté</xsl:message>
+               <xsl:variable name="authority-001" select="marc:controlfield[@tag='001']" />
+<!--           <xsl:message terminate="yes">Pas encore implémenté</xsl:message> -->
                
-               <!--<xsl:value-of select="$bibliographic-leader" />
+               <xsl:variable name="source-name">
+                       <xsl:choose>
+                               <xsl:when test="marc:datafield[@tag='110' and marc:subfield[@code='a']]">
+                                       <xsl:value-of select="concat(marc:datafield[@tag='110']/marc:subfield[@code='a'], marc:datafield[@tag='110']/marc:subfield[@code='b'], marc:datafield[@tag='110']/marc:subfield[@code='n'], marc:datafield[@tag='110']/marc:subfield[@code='c'], marc:datafield[@tag='110']/marc:subfield[@code='d'])" />
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:message terminate="yes">
+                                               <xsl:text xml:lang="fr">Aucun nom n’a été trouvé pour la notice </xsl:text>
+                                               <xsl:value-of select="$authority-001" />
+                                               <xsl:text xml:lang="fr">.</xsl:text>
+                                       </xsl:message>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:variable>
+               <xsl:variable name="source-name-quoted">
+                       <xsl:call-template name="string-replace-all">
+        <xsl:with-param name="text" select="$source-name" />
+        <xsl:with-param name="replace" select="'&quot;'" />
+        <xsl:with-param name="by" select="'&quot;&quot;'" />
+                       </xsl:call-template>
+               </xsl:variable>
+               
+               <xsl:variable name="fix-name">
+                       <xsl:for-each select="$strings-fix-doc">
+                               <xsl:value-of select="key('fix-record-corporate-name', $authority-001)" />
+                       </xsl:for-each>
+               </xsl:variable>
+               <xsl:variable name="fix-name-quoted">
+                       <xsl:call-template name="string-replace-all">
+        <xsl:with-param name="text" select="$fix-name" />
+        <xsl:with-param name="replace" select="'&quot;'" />
+        <xsl:with-param name="by" select="'&quot;&quot;'" />
+                       </xsl:call-template>
+               </xsl:variable>
+               
+               <xsl:variable name="fix-name-lang">
+                       <xsl:for-each select="$strings-fix-doc">
+                               <xsl:value-of select="key('fix-record-corporate-name-lang', $authority-001)" />
+                       </xsl:for-each>
+               </xsl:variable>
+               
+               <xsl:variable name="fix-name-source">
+                       <xsl:for-each select="$strings-fix-doc">
+                               <xsl:value-of select="key('fix-record-corporate-name-source', $authority-001)" />
+                       </xsl:for-each>
+               </xsl:variable>
+               
+               <!-- Export title strings -->
+               <xsl:choose>
+                       <!-- If corresponding entry is found in fix document -->
+                       <xsl:when test="$fix-name != '' and $fix-name-source = $source-name">
+                               <xsl:text>"</xsl:text>
+                               <xsl:value-of select="$authority-001" />
+                               <xsl:text>"     "</xsl:text>
+                               <xsl:value-of select="$fix-name-lang" />
+                               <xsl:text>"     "</xsl:text>
+                               <xsl:value-of select="$source-name-quoted" />
+                               <xsl:text>"</xsl:text>
+                       </xsl:when>
+                       <xsl:when test="$fix-name != '' and $fix-name-source != $source-name">
+                               <xsl:message terminate="no">
+                                       <xsl:text>Un correctif pour la notice de l’entrée </xsl:text>
+                                       <xsl:value-of select="$authority-001" />
+                                       <xsl:text> existe, mais le nom dans la notice a été modifié depuis. La valeur de correction est ignorée.</xsl:text>
+                               </xsl:message>
+                               <xsl:text>"</xsl:text>
+                               <xsl:value-of select="$authority-001" />
+                               <xsl:text>"     "</xsl:text>
+                               <xsl:value-of select="$source-name-quoted" />
+                               <xsl:text>"     </xsl:text>
+                               <!-- Empty column for fixed name lang here -->
+                               <xsl:text>      </xsl:text>
+                               <!-- Empty column for fixed name here -->
+                       </xsl:when>
+                       <!-- No corresponding entry found in fix document -->
+                       <xsl:otherwise>
+                               <xsl:text>"</xsl:text>
+                               <xsl:value-of select="$authority-001" />
+                               <xsl:text>"     "</xsl:text>
+                               <xsl:value-of select="$source-name-quoted" />
+                               <xsl:text>"     </xsl:text>
+                               <!-- Empty column for fixed name lang here -->
+                               <xsl:text>      </xsl:text>
+                               <!-- Empty column for fixed name here -->
+                       </xsl:otherwise>
+               </xsl:choose>
                <xsl:text>&#10;</xsl:text>
-               <xsl:message>Corporate</xsl:message>-->
        </xsl:template>
        
        <!-- Meeting authority record -->
        <xsl:template match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='111']]" mode="meeting">
-               <xsl:variable name="bibliographic-leader" select="marc:controlfield[@tag='001']" />
+               <xsl:variable name="authority-001" select="marc:controlfield[@tag='001']" />
                <xsl:message terminate="yes">Pas encore implémenté</xsl:message>
                
+               <xsl:text>"</xsl:text>
+               <xsl:value-of select="$authority-001" />
+               <xsl:text>"     "</xsl:text>
                <!--<xsl:value-of select="$bibliographic-leader" />
                <xsl:text>&#10;</xsl:text>
                <xsl:message>Meeting</xsl:message>-->
index df6350f842fcbb7e43385c2cfb0d61013e6a7f27..8c0c6bf21ede9d189f7273958da1424b45167916 100644 (file)
@@ -3,7 +3,7 @@
                 xmlns:xml="http://www.w3.org/XML/1998/namespace"
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <!-- filter_marcxml.xslt - Filter out unwanted records.
-    Copyright (C) 2025  Pierre Choffet
+    Copyright (C) 2025, 2026  Pierre Choffet
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of version 3 of the GNU General Public License as
@@ -24,6 +24,7 @@
          
                Remove the following authority entries:
                  - never referenced from any bibliographic record
+                 - with no 100, 110 or 111 zones
        -->
        
        
        <xsl:variable name="filters-doc" select="document('filters.xml')" />
        
        <!-- Returns all references to the given person authority -->
-       <!-- TBD: The filter on 007 (first character as "k") filters out a lot of 
-                 prints otherwise valid. Ways to identify prints must be verified -->
-       <xsl:key name="references-to-person" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z' and (substring(marc:controlfield[@tag='007'], 1, 1) = 'k' or substring(marc:controlfield[@tag='008'], 25, 1) = 'c')]/marc:datafield[@tag='100' or @tag='600' or @tag='700' or @tag='800']" use="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+       <xsl:key name="references-to-person" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z' and (substring(marc:controlfield[@tag='007'], 1, 1) = 'k' or marc:datafield[@tag='089']/marc:subfield[@code = 'a'] = 'EST' or substring(marc:controlfield[@tag='008'], 25, 1) = 'c')]/marc:datafield[@tag='100' or @tag='600' or @tag='700' or @tag='800']" use="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
        <!-- Returns all references to the given corporate authority -->
-       <!-- TBD: The filter on 007 (first character as "k") filters out a lot of 
-                 prints otherwise valid. Ways to identify prints must be verified -->
-       <xsl:key name="references-to-corporate" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z' and (substring(marc:controlfield[@tag='007'], 1, 1) = 'k' or substring(marc:controlfield[@tag='008'], 25, 1) = 'c')]/marc:datafield[@tag='110' or @tag='610' or @tag='710' or @tag='810']" use="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
+       <xsl:key name="references-to-corporate" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z' and (substring(marc:controlfield[@tag='007'], 1, 1) = 'k' or marc:datafield[@tag='089']/marc:subfield[@code = 'a'] = 'EST' or substring(marc:controlfield[@tag='008'], 25, 1) = 'c')]/marc:datafield[@tag='110' or @tag='610' or @tag='710' or @tag='810']" use="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
        <!-- Returns all references to the given meeting authority -->
-       <!-- TBD: The filter on 007 (first character as "k") filters out a lot of 
-                 prints otherwise valid. Ways to identify prints must be verified -->
-       <xsl:key name="references-to-meeting" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z' and (substring(marc:controlfield[@tag='007'], 1, 1) = 'k' or substring(marc:controlfield[@tag='008'], 25, 1) = 'c')]/marc:datafield[@tag='111' or @tag='611' or @tag='711' or @tag='811']" use="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='d'], marc:subfield[@code='c'])" />
+       <xsl:key name="references-to-meeting" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z' and (substring(marc:controlfield[@tag='007'], 1, 1) = 'k' or marc:datafield[@tag='089']/marc:subfield[@code = 'a'] = 'EST' or substring(marc:controlfield[@tag='008'], 25, 1) = 'c')]/marc:datafield[@tag='111' or @tag='611' or @tag='711' or @tag='811']" use="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
        
        <!-- Return rule from a given 655$a value -->
        <xsl:key name="filter-state-655a" match="/filters/field[@tag='655']/subfield[@code='a']/rule" use="@value" />
        
        <!-- Get record from its 001 -->
-       <xsl:key name="record-control-number" match="/marc:collection/marc:record" use="marc:controlfield[@tag='001']" />
-       
-       <!--<xsl:key name="authority-person" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='100']]" use="concat(marc:datafield[@tag='100']/marc:subfield[@code='a'], marc:datafield[@tag='100']/marc:subfield[@code='b'], marc:datafield[@tag='100']/marc:subfield[@code='c'], marc:datafield[@tag='100']/marc:subfield[@code='d'], marc:datafield[@tag='100']/marc:subfield[@code='q'])" />
-       <xsl:key name="authority-corporate" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='110']]" use="concat(marc:datafield[@tag='110']/marc:subfield[@code='a'], marc:datafield[@tag='110']/marc:subfield[@code='b'], marc:datafield[@tag='110']/marc:subfield[@code='c'], marc:datafield[@tag='110']/marc:subfield[@code='d'])" />
-       <xsl:key name="authority-meeting" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='111']]" use="concat(marc:datafield[@tag='111']/marc:subfield[@code='a'], marc:datafield[@tag='111']/marc:subfield[@code='b'], marc:datafield[@tag='111']/marc:subfield[@code='n'], marc:datafield[@tag='111']/marc:subfield[@code='d'], marc:datafield[@tag='111']/marc:subfield[@code='c'])" />-->
+       <xsl:key name="record-uid" match="/marc:collection/marc:record" use="concat(marc:controlfield[@tag='001'], marc:leader)" />
        
        <xsl:template match="node()|@*">
                <xsl:copy>
@@ -81,6 +72,9 @@
                        
                        <!-- Check work type is properly identified -->
                        <xsl:call-template name="keep-work-type" />
+                       
+                       <!-- Check entry regroups multiple works -->
+                       <xsl:call-template name="has-no-505" />
                </xsl:variable>
                
                <!-- Keep only authorities not referenced in any "no" filter -->
                <xsl:choose>
                        <!-- TBD: The filter on 007 (first character as "k") filters out a lot of 
                                  prints otherwise valid. Ways to identify prints must be verified -->
-                       <xsl:when test="substring(marc:controlfield[@tag='007'], 1, 1) = 'k' or substring(marc:controlfield[@tag='008'], 25, 1) = 'c'">
+                       <xsl:when test="substring(marc:controlfield[@tag='007'], 1, 1) = 'k' or marc:datafield[@tag='089']/marc:subfield[@code = 'a'] = 'EST' or substring(marc:controlfield[@tag='008'], 25, 1) = 'c'">
+                               <xsl:text>yes</xsl:text>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message>
+                                       <xsl:value-of select="marc:controlfield[@tag='001']" />
+                                       <xsl:text> : les données n’identifient pas le type d’œuvre comme étant un catalogue ou une estampe.</xsl:text>
+                               </xsl:message>
+                               <xsl:text>no</xsl:text>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <!-- Return "no" if the record has a 505 zone (and thus represents multiple
+            works) -->
+       <xsl:template name="has-no-505">
+               <xsl:choose>
+                       <xsl:when test="count(marc:datafield[@tag='505']) = 0">
                                <xsl:text>yes</xsl:text>
                        </xsl:when>
                        <xsl:otherwise>
                                <xsl:message>
                                        <xsl:value-of select="marc:controlfield[@tag='001']" />
-                                       <xsl:text> : l’entrée n’identifie pas le type d’œuvre comme étant un catalogue ou une estampe.</xsl:text>
+                                       <xsl:text> : il s’agit d’œuvres regroupées, la notice est ignorée.</xsl:text>
                                </xsl:message>
                                <xsl:text>no</xsl:text>
                        </xsl:otherwise>
                        <xsl:when test="substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='110']">
                                <xsl:value-of select="marc:datafield[@tag='110']/marc:subfield[@code='a']" />
                                <xsl:value-of select="marc:datafield[@tag='110']/marc:subfield[@code='b']" />
+                               <xsl:value-of select="marc:datafield[@tag='110']/marc:subfield[@code='n']" />
                                <xsl:value-of select="marc:datafield[@tag='110']/marc:subfield[@code='c']" />
                                <xsl:value-of select="marc:datafield[@tag='110']/marc:subfield[@code='d']" />
-                               <xsl:value-of select="marc:datafield[@tag='110']/marc:subfield[@code='n']" />
                        </xsl:when>
                        <xsl:when test="substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='111']">
                                <xsl:value-of select="marc:datafield[@tag='111']/marc:subfield[@code='a']" />
+                               <xsl:value-of select="marc:datafield[@tag='111']/marc:subfield[@code='b']" />
+                               <xsl:value-of select="marc:datafield[@tag='111']/marc:subfield[@code='n']" />
                                <xsl:value-of select="marc:datafield[@tag='111']/marc:subfield[@code='c']" />
                                <xsl:value-of select="marc:datafield[@tag='111']/marc:subfield[@code='d']" />
-                               <xsl:value-of select="marc:datafield[@tag='111']/marc:subfield[@code='e']" />
-                               <xsl:value-of select="marc:datafield[@tag='111']/marc:subfield[@code='n']" />
                        </xsl:when>
                </xsl:choose>
        </xsl:template>
                        <xsl:when test="not(marc:datafield[@tag='100']) and not(marc:datafield[@tag='110']) and not(marc:datafield[@tag='111'])">
                                <xsl:text>no</xsl:text>
                        </xsl:when>
+                       <xsl:when test="marc:datafield[@tag='100']/marc:subfield[@code='t']">
+                               <xsl:text>no</xsl:text>
+                       </xsl:when>
                        <xsl:otherwise>
                                <xsl:text>yes</xsl:text>
                        </xsl:otherwise>
                
                <xsl:variable name="valid-reference">
                        <xsl:for-each select="key('references-to-person', $authority-fk)">
-                               <xsl:variable name="bibliographic-fk" select="../marc:controlfield[@tag='001']" />
+                               <xsl:variable name="bibliographic-001" select="../marc:controlfield[@tag='001']" />
+                               <xsl:variable name="bibliographic-leader" select="../marc:leader" />
                                
-                               <xsl:for-each select="key('record-control-number', $bibliographic-fk)">
+                               <xsl:for-each select="key('record-uid', concat($bibliographic-001, $bibliographic-leader))">
                                        <xsl:variable name="keep">
                                                <xsl:call-template name="keep-bibliographic-record" />
                                        </xsl:variable>
                
                <xsl:variable name="valid-reference">
                        <xsl:for-each select="key('references-to-corporate', $authority-fk)">
-                               <xsl:variable name="bibliographic-fk" select="../marc:controlfield[@tag='001']" />
+                               <xsl:variable name="bibliographic-001" select="../marc:controlfield[@tag='001']" />
+                               <xsl:variable name="bibliographic-leader" select="../marc:leader" />
                                
-                               <xsl:for-each select="key('record-control-number', $bibliographic-fk)">
+                               <xsl:for-each select="key('record-uid', concat($bibliographic-001, $bibliographic-leader))">
                                        <xsl:variable name="keep">
                                                <xsl:call-template name="keep-bibliographic-record" />
                                        </xsl:variable>
                
                <xsl:variable name="valid-reference">
                        <xsl:for-each select="key('references-to-meeting', $authority-fk)">
-                               <xsl:variable name="bibliographic-fk" select="../marc:controlfield[@tag='001']" />
+                               <xsl:variable name="bibliographic-001" select="../marc:controlfield[@tag='001']" />
+                               <xsl:variable name="bibliographic-leader" select="../marc:leader" />
                                
-                               <xsl:for-each select="key('record-control-number', $bibliographic-fk)">
+                               <xsl:for-each select="key('record-uid', concat($bibliographic-001, $bibliographic-leader))">
                                        <xsl:variable name="keep">
                                                <xsl:call-template name="keep-bibliographic-record" />
                                        </xsl:variable>
diff --git a/fix_label_description_duplicates.xslt b/fix_label_description_duplicates.xslt
new file mode 100644 (file)
index 0000000..47d9bfc
--- /dev/null
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:marc="http://www.loc.gov/MARC21/slim"
+                xmlns:wdef="https://purl.choffet.net/wdef"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+<!-- fix_label_description_duplicates.xslt - Fix duplicate label/description, forbidden in Wikidata
+     Copyright (C) 2026  Pierre Choffet
+
+     This program is free software: you can redistribute it and/or modify
+     it under the terms of version 3 of the GNU General Public License as
+     published by the Free Software Foundation.
+
+     This program is distributed in the hope that it will be useful,
+     but WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+     GNU General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
+     -->
+       <xsl:output indent="yes" method="xml" encoding="utf-8" />
+       
+       <xsl:key name="element-from-label" match="/wdef:knowledge/wdef:element" use="wdef:label" />
+       <xsl:key name="element-from-description" match="/wdef:knowledge/wdef:element" use="wdef:description" />
+       
+       <xsl:template match="node()|@*">
+               <xsl:copy>
+                       <xsl:apply-templates select="node()|@*" />
+               </xsl:copy>
+       </xsl:template>
+       
+       <xsl:template match="/wdef:knowledge/wdef:element/wdef:description">
+               <xsl:variable name="language" select="@interface-lang" />
+               <xsl:variable name="element" select=".." />
+                       
+               <xsl:variable name="label-description-has-duplicate">
+                       <!-- If we have no label and description in the same language, no requirement exist in Wikibase -->
+                       <xsl:choose>
+                               <xsl:when test="$element/wdef:label[@interface-lang = $language]">
+                                       <xsl:variable name="label" select="$element/wdef:label[@interface-lang = $language]" />
+                                       <xsl:variable name="same-label" select="key('element-from-label', $label)[wdef:label[@interface-lang = $language]]" />
+                                       <xsl:variable name="same-description" select="key('element-from-description', current())[wdef:description[@interface-lang = $language]]" />
+                                       
+                                       <xsl:choose>
+                                               <xsl:when test="count($same-label[@wdef:id = $same-description/@wdef:id]/@wdef:id) &gt; 1">
+                                                       <xsl:text>true</xsl:text>
+                                               </xsl:when>
+                                               <xsl:otherwise>
+                                                       <xsl:text>false</xsl:text>
+                                               </xsl:otherwise>
+                                       </xsl:choose>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:text>false</xsl:text>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:variable>
+               
+               <xsl:choose>
+                       <xsl:when test="$label-description-has-duplicate = 'false'">
+                               <xsl:copy-of select="current()" />
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <wdef:label>
+                                       <xsl:attribute name="interface-lang">
+                                               <xsl:value-of select="$language" />
+                                       </xsl:attribute>
+                                       <xsl:value-of select="current()" />
+                                       <xsl:text> (ID BAnQ : </xsl:text>
+                                       <xsl:value-of select="$element/@marc:controlfield-001" />
+                                       <xsl:text>)</xsl:text>
+                               </wdef:label>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+</xsl:stylesheet>
diff --git a/marc_banq2wdef.xslt b/marc_banq2wdef.xslt
new file mode 100644 (file)
index 0000000..21c6f3e
--- /dev/null
@@ -0,0 +1,2575 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:marc="http://www.loc.gov/MARC21/slim"
+                xmlns:wdef="https://purl.choffet.net/wdef"
+                xmlns:xml="http://www.w3.org/XML/1998/namespace"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+  <!-- marc_banq2wdef.xslt - Merge two MARCXML files, removing duplicate records.
+    Copyright (C) 2025, 2026  Pierre Choffet
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of version 3 of the GNU General Public License as
+    published by the Free Software Foundation.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+    -->
+  <!-- Must be run on a MarcXML file result of filter_marcxml.xslt -->
+       <xsl:output indent="yes" method="xml" encoding="utf-8" />
+       
+       <xsl:param name="strings-fix-path" />
+       <xsl:param name="occupations-matches-path" />
+       <xsl:param name="places-matches-path" />
+       <xsl:param name="roles-matches-path" />
+       <xsl:param name="records-matches-path" />
+       
+       <xsl:strip-space elements="*"/>
+       
+       <xsl:variable name="strings-fix-doc" select="document($strings-fix-path)" />
+       <xsl:variable name="occupations-matches-doc" select="document($occupations-matches-path)" />
+       <xsl:variable name="places-matches-doc" select="document($places-matches-path)" />
+       <xsl:variable name="roles-matches-doc" select="document($roles-matches-path)" />
+       <xsl:variable name="records-matches-doc" select="document($records-matches-path)" />
+       
+       <xsl:key name="record-by-id" match="/marc:collection/marc:record" use="marc:controlfield[@tag='001']" />
+       <xsl:key name="fix-by-id" match="/records/record" use="@id" />
+       
+       <!-- Returns bibliographic records referencing the given person authority -->
+       <xsl:key name="bibliographic-with-person"
+                match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z']"
+                use="concat(marc:datafield[@tag='100']/marc:subfield[@code='a'], marc:datafield[@tag='100']/marc:subfield[@code='b'],
+                            marc:datafield[@tag='100']/marc:subfield[@code='c'], marc:datafield[@tag='100']/marc:subfield[@code='d'],
+                            marc:datafield[@tag='100']/marc:subfield[@code='q']) or
+                     concat(marc:datafield[@tag='600']/marc:subfield[@code='a'], marc:datafield[@tag='600']/marc:subfield[@code='b'],
+                            marc:datafield[@tag='600']/marc:subfield[@code='c'], marc:datafield[@tag='600']/marc:subfield[@code='d'],
+                            marc:datafield[@tag='600']/marc:subfield[@code='q']) or
+                     concat(marc:datafield[@tag='700']/marc:subfield[@code='a'], marc:datafield[@tag='700']/marc:subfield[@code='b'],
+                            marc:datafield[@tag='700']/marc:subfield[@code='c'], marc:datafield[@tag='700']/marc:subfield[@code='d'],
+                            marc:datafield[@tag='700']/marc:subfield[@code='q']) or
+                     concat(marc:datafield[@tag='800']/marc:subfield[@code='a'], marc:datafield[@tag='800']/marc:subfield[@code='b'],
+                            marc:datafield[@tag='800']/marc:subfield[@code='c'], marc:datafield[@tag='800']/marc:subfield[@code='d'],
+                            marc:datafield[@tag='800']/marc:subfield[@code='q'])" />
+       <!-- Returns bibliographic records referencing the given corporate authority -->
+       <xsl:key name="bibliographic-with-corporate"
+                match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z']"
+           use="concat(marc:datafield[@tag='110']/marc:subfield[@code='a'], marc:datafield[@tag='110']/marc:subfield[@code='b'],
+                       marc:datafield[@tag='110']/marc:subfield[@code='n'], marc:datafield[@tag='110']/marc:subfield[@code='c'],
+                       marc:datafield[@tag='110']/marc:subfield[@code='d']) or
+                concat(marc:datafield[@tag='610']/marc:subfield[@code='a'], marc:datafield[@tag='610']/marc:subfield[@code='b'],
+                       marc:datafield[@tag='110']/marc:subfield[@code='n'], marc:datafield[@tag='610']/marc:subfield[@code='c'],
+                       marc:datafield[@tag='610']/marc:subfield[@code='d']) or
+                concat(marc:datafield[@tag='710']/marc:subfield[@code='a'], marc:datafield[@tag='710']/marc:subfield[@code='b'],
+                       marc:datafield[@tag='110']/marc:subfield[@code='n'], marc:datafield[@tag='710']/marc:subfield[@code='c'],
+                       marc:datafield[@tag='710']/marc:subfield[@code='d']) or
+                concat(marc:datafield[@tag='810']/marc:subfield[@code='a'], marc:datafield[@tag='810']/marc:subfield[@code='b'],
+                       marc:datafield[@tag='110']/marc:subfield[@code='n'], marc:datafield[@tag='810']/marc:subfield[@code='c'],
+                       marc:datafield[@tag='810']/marc:subfield[@code='d'])" />
+       <!-- Returns bibliographic records referencing the given meeting authority -->
+       <xsl:key name="bibliographic-with-meeting"
+                match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z']"
+                use="concat(marc:datafield[@tag='111']/marc:subfield[@code='a'], marc:datafield[@tag='111']/marc:subfield[@code='b'],
+                            marc:datafield[@tag='111']/marc:subfield[@code='n'], marc:datafield[@tag='111']/marc:subfield[@code='d'],
+                            marc:datafield[@tag='111']/marc:subfield[@code='c']) or
+                     concat(marc:datafield[@tag='611']/marc:subfield[@code='a'], marc:datafield[@tag='611']/marc:subfield[@code='b'],
+                            marc:datafield[@tag='611']/marc:subfield[@code='n'], marc:datafield[@tag='611']/marc:subfield[@code='d'],
+                            marc:datafield[@tag='611']/marc:subfield[@code='c']) or
+                     concat(marc:datafield[@tag='711']/marc:subfield[@code='a'], marc:datafield[@tag='711']/marc:subfield[@code='b'],
+                            marc:datafield[@tag='711']/marc:subfield[@code='n'], marc:datafield[@tag='711']/marc:subfield[@code='d'],
+                            marc:datafield[@tag='711']/marc:subfield[@code='c']) or
+                     concat(marc:datafield[@tag='811']/marc:subfield[@code='a'], marc:datafield[@tag='811']/marc:subfield[@code='b'],
+                            marc:datafield[@tag='811']/marc:subfield[@code='n'], marc:datafield[@tag='811']/marc:subfield[@code='d'],
+                            marc:datafield[@tag='811']/marc:subfield[@code='c'])" />
+       
+       <xsl:key name="person-authority-from-reference"
+                match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='100']]"
+                use="concat(marc:datafield[@tag='100']/marc:subfield[@code='a'], marc:datafield[@tag='100']/marc:subfield[@code='b'],
+                            marc:datafield[@tag='100']/marc:subfield[@code='c'], marc:datafield[@tag='100']/marc:subfield[@code='d'],
+                            marc:datafield[@tag='100']/marc:subfield[@code='q'])" />
+       <xsl:key name="corporate-authority-from-reference"
+                match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='110']]"
+                use="concat(marc:datafield[@tag='110']/marc:subfield[@code='a'], marc:datafield[@tag='110']/marc:subfield[@code='b'],
+                            marc:datafield[@tag='110']/marc:subfield[@code='n'], marc:datafield[@tag='110']/marc:subfield[@code='c'],
+                            marc:datafield[@tag='110']/marc:subfield[@code='d'])" />
+       <xsl:key name="meeting-authority-from-reference"
+                match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='111']]"
+                use="concat(marc:datafield[@tag='111']/marc:subfield[@code='a'], marc:datafield[@tag='111']/marc:subfield[@code='b'],
+                            marc:datafield[@tag='111']/marc:subfield[@code='n'], marc:datafield[@tag='111']/marc:subfield[@code='d'],
+                            marc:datafield[@tag='111']/marc:subfield[@code='c'])" />
+       
+       <xsl:key name="bibliographic-from-001"
+                match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z']"
+                use="marc:controlfield[@tag='001']" />
+       <xsl:key name="person-authority-from-001"
+                match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='100']]"
+                use="marc:controlfield[@tag='001']" />
+       <xsl:key name="corporate-authority-from-001"
+                match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='110']]"
+                use="marc:controlfield[@tag='001']" />
+       <xsl:key name="meeting-authority-from-001"
+                match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='111']]"
+                use="marc:controlfield[@tag='001']" />
+       
+       <!-- Returns all references to the given person authority -->
+       <xsl:key name="references-to-person" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z']/marc:datafield[@tag='100' or @tag='600' or @tag='700' or @tag='800' and not(marc:subfield[@code='t'])]" use="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+       <!-- Returns all references to the given corporate authority -->
+       <xsl:key name="references-to-corporate" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z']/marc:datafield[@tag='110' or @tag='610' or @tag='710' or @tag='810']" use="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
+       <!-- Returns all references to the given meeting authority -->
+       <xsl:key name="references-to-meeting" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z']/marc:datafield[@tag='111' or @tag='611' or @tag='711' or @tag='811']" use="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='d'], marc:subfield[@code='c'])" />
+       
+       <!-- Occupations keys -->
+       <xsl:key name="qid-from-occupation" match="/matches/match" use="." />
+       
+       <!-- Places keys -->
+       <xsl:key name="qid-from-place" match="/matches/match" use="." />
+       
+       <!-- Roles keys -->
+       <xsl:key name="qid-from-role" match="/matches/match" use="." />
+       
+       <xsl:template match="/marc:collection">
+               <wdef:knowledge>
+                       <xsl:apply-templates select="marc:record[substring(marc:leader, 7, 1) != 'z']" />
+               </wdef:knowledge>
+       </xsl:template>
+       
+       <!-- All works, except those from catalogs and prints that are overriden below -->
+       <xsl:template match="/marc:collection/marc:record">
+               <xsl:message>
+                       <xsl:value-of select="marc:controlfield[@tag='001']" />
+                       <xsl:text>: l’entrée est ignorée car l’œuvre ne s’identifie ni comme une estampe ni comme un catalogue d’exposition</xsl:text>
+               </xsl:message>
+       </xsl:template>
+       
+       <!-- Records identified as catalogs or prints only -->
+       <xsl:template match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z' and (substring(marc:controlfield[@tag='007'], 1, 1) = 'k' or marc:datafield[@tag='089']/marc:subfield[@code='a'] = 'EST' or substring(marc:controlfield[@tag='008'], 25, 1) = 'c')]">
+               <xsl:variable name="record-id" select="marc:controlfield[@tag='001']" />
+               <xsl:variable name="element-id">
+                       <xsl:call-template name="get-element-id">
+                               <xsl:with-param name="record-id" select="$record-id" />
+                               <xsl:with-param name="record-type" select="'bibliographic'" />
+                       </xsl:call-template>
+               </xsl:variable>
+               <xsl:variable name="record-cataloging-standard">
+                       <xsl:call-template name="record-cataloging-standard" />
+               </xsl:variable>
+               <xsl:variable name="work-type">
+                       <xsl:call-template name="work-type" />
+               </xsl:variable>
+               
+               <!-- Add person dependencies records as needed -->
+               <xsl:for-each select="marc:datafield[@tag='100' or @tag='600' or @tag='700' or @tag='800']">
+                       <xsl:variable name="person-reference" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+                       <xsl:variable name="person-reference-id" select="generate-id(key('references-to-person', $person-reference)[1])" />
+                       
+                       <xsl:if test="$person-reference-id = generate-id(.)">
+                               <xsl:apply-templates select="key('person-authority-from-reference', $person-reference)" />
+                       </xsl:if>
+               </xsl:for-each>
+               
+               <!-- Add corporate dependencies records as needed -->
+               <xsl:for-each select="marc:datafield[@tag='110' or @tag='610' or @tag='710' or @tag='810']">
+                       <xsl:variable name="corporate-reference" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
+                       <xsl:variable name="corporate-reference-id" select="generate-id(key('references-to-corporate', $corporate-reference)[1])" />
+                       
+                       <xsl:if test="$corporate-reference-id = generate-id(.)">
+                               <xsl:apply-templates select="key('corporate-authority-from-reference', $corporate-reference)" />
+                       </xsl:if>
+               </xsl:for-each>
+               
+               <!-- Add meeting dependencies records as needed -->
+               <xsl:for-each select="marc:datafield[@tag='111' or @tag='611' or @tag='711' or @tag='811']">
+                       <xsl:variable name="meeting-reference" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='d'], marc:subfield[@code='c'])" />
+                       <xsl:variable name="meeting-reference-id" select="generate-id(key('references-to-meeting', $meeting-reference)[1])" />
+                       
+                       <xsl:if test="$meeting-reference-id = generate-id(.)">
+                               <xsl:apply-templates select="key('meeting-authority-from-reference', $meeting-reference)" />
+                       </xsl:if>
+               </xsl:for-each>
+       
+               <wdef:element>
+                       <!-- Add attributes -->
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$element-id" />
+                       </xsl:attribute>
+                       <xsl:attribute name="marc:controlfield-001">
+                               <xsl:value-of select="$record-id" />
+                       </xsl:attribute>
+                       
+                       <xsl:if test="substring($element-id, 1, 1) = '?'">
+                               <!-- Add label -->
+                               <xsl:call-template name="generate-work-labels">
+                                       <xsl:with-param name="record-id" select="$record-id" />
+                                       <xsl:with-param name="work-type" select="$work-type" />
+                               </xsl:call-template>
+                               
+                               <!-- Add description -->
+                               <xsl:call-template name="generate-work-description">
+                                       <xsl:with-param name="record-id" select="$record-id" />
+                                       <xsl:with-param name="work-type" select="$work-type" />
+                               </xsl:call-template>
+                               
+                               <!-- Add P31 (nature de l’élément) -->
+                               <xsl:call-template name="generate-work-P31">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="record-id" select="$record-id" />
+                                       <xsl:with-param name="work-type" select="$work-type" />
+                               </xsl:call-template>
+                       </xsl:if>
+                       
+                       <!-- Add P50 (author) and/or P170 (créé par) -->
+                       <xsl:choose>
+                               <xsl:when test="$work-type = 'catalog'">
+                                       <xsl:call-template name="generate-P50-catalog">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="record-id" select="$record-id" />
+                                       </xsl:call-template>
+                                       <xsl:call-template name="generate-P170-catalog">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="record-id" select="$record-id" />
+                                       </xsl:call-template>
+                               </xsl:when>
+                               <xsl:when test="$work-type = 'print'">
+                                       <xsl:call-template name="generate-P170-print">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="record-id" select="$record-id" />
+                                       </xsl:call-template>
+                               </xsl:when>
+                       </xsl:choose>
+                       
+                       <xsl:if test="$work-type = 'print'">
+                               <!-- Add P195 (collection) -->
+                               <xsl:call-template name="generate-P195-print">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="record-id" select="$record-id" />
+                               </xsl:call-template>
+                               
+                               <!-- Add P217 (numéro d’inventaire) -->
+                               <xsl:call-template name="generate-P217-print">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="record-id" select="$record-id" />
+                               </xsl:call-template>
+                       </xsl:if>
+                       
+                       <!-- Add P577 (date de publication) -->
+                       <xsl:call-template name="generate-work-P577">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P767 (collaborateur ou collaboratrice au travail de création) -->
+                       <xsl:call-template name="generate-work-P767">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P1476 (titre) -->
+                       <xsl:call-template name="generate-work-P1476">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P1680 (sous-titre) -->
+                       <xsl:variable name="has-subtitle">
+                               <xsl:for-each select="$strings-fix-doc">
+                                       <xsl:for-each select="key('fix-by-id', $record-id)">
+                                               <xsl:value-of select="count(fix[@type='subtitle']) > 0" />
+                                       </xsl:for-each>
+                               </xsl:for-each>
+                       </xsl:variable>
+                       <xsl:if test="$has-subtitle = 'true'">
+                               <xsl:call-template name="generate-work-P1680">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="record-id" select="$record-id" />
+                               </xsl:call-template>
+                       </xsl:if>
+                       
+                       <!-- Add P1823 (identifiant BAnQ d’ouvrage) -->
+                       <xsl:call-template name="generate-work-P1823">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+               </wdef:element>
+               
+               <!-- If we have a catalog, add edition itself -->
+               <xsl:if test="$work-type = 'catalog'">
+                       <xsl:choose>
+                               <xsl:when test="substring($element-id, 1, 1) = '?'">
+                                       <xsl:call-template name="generate-catalog-edition">
+                                               <xsl:with-param name="work-element-id" select="$element-id" />
+                                               <xsl:with-param name="record-id" select="$record-id" />
+                                       </xsl:call-template>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:message terminate="no">
+                                               <xsl:value-of select="$element-id" />
+                                               <xsl:message> : le catalogue a déjà un équivalent connu sur Wikidata, l’édition ne sera pas créée.</xsl:message>
+                                       </xsl:message>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:if> 
+       </xsl:template>
+       
+       <!-- Authority records (physical persons only) -->
+       <xsl:template match="marc:record[substring(marc:leader, 7, 1) = 'z' and marc:datafield[@tag='100']]">
+               <xsl:variable name="record-id" select="marc:controlfield[@tag='001']" />
+               <xsl:variable name="element-id">
+                       <xsl:call-template name="get-element-id">
+                               <xsl:with-param name="record-id" select="$record-id" />
+                               <xsl:with-param name="record-type" select="'authority'" />
+                       </xsl:call-template>
+               </xsl:variable>
+               <xsl:variable name="record-cataloging-standard">
+                       <xsl:call-template name="record-cataloging-standard" />
+               </xsl:variable>
+               
+               <wdef:element>
+                       <!-- Add attributes -->
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$element-id" />
+                       </xsl:attribute>
+                       <xsl:attribute name="marc:controlfield-001">
+                               <xsl:value-of select="$record-id" />
+                       </xsl:attribute>
+                       
+                       <xsl:if test="substring($element-id, 1, 1) = '?'">
+                               <!-- Add french label -->
+                               <wdef:label>
+                                       <xsl:attribute name="interface-lang">fr</xsl:attribute>
+                                       <xsl:call-template name="get-person-name">
+                                               <xsl:with-param name="record-id" select="$record-id" />
+                                       </xsl:call-template>
+                               </wdef:label>
+                               
+                               <!-- Add french description -->
+                               <wdef:description>
+                                       <xsl:attribute name="interface-lang">fr</xsl:attribute>
+                                       <!-- TODO: Write better description -->
+                                       <xsl:text>artiste</xsl:text>
+                               </wdef:description>
+                       
+                               <!-- Add P31 (nature de l’élément) -->
+                               <wdef:property>
+                                       <xsl:variable name="property-id">
+                                               <xsl:call-template name="get-property-id">
+                                                       <xsl:with-param name="element-id" select="$element-id" />
+                                                       <xsl:with-param name="pid" select="'P31'" />
+                                               </xsl:call-template>
+                                       </xsl:variable>
+                                       <xsl:attribute name="wdef:pid">P31</xsl:attribute>
+                                       <xsl:attribute name="wdef:id">
+                                               <xsl:value-of select="$property-id" />
+                                       </xsl:attribute>
+                                       <wdef:value>
+                                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$value-id" />
+                                               </xsl:attribute>
+                                               <wdef:ref-element>Q5</wdef:ref-element>
+                                       </wdef:value>
+                               </wdef:property>
+                       </xsl:if>
+                       
+                       <!-- Add P19 (lieu de naissance) -->
+                       <xsl:call-template name="generate-P19">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P19 (lieu de mort) -->
+                       <xsl:call-template name="generate-P20">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P106 (occupation) -->
+                       <xsl:call-template name="generate-P106">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P213 (identifiant ISNI) -->
+                       <xsl:call-template name="generate-P213">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P244 (identifiant Bibliothèque du Congrès) -->
+                       <xsl:call-template name="generate-P244">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P569 (date de naissance) -->
+                       <xsl:call-template name="generate-P569">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P570 (date de mort) -->
+                       <xsl:call-template name="generate-P570">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P3280 (identifiant BAnQ d’autorité) -->
+                       <xsl:call-template name="generate-P3280">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P6379 (collection comprenant une œuvre de la personne) -->
+                       <xsl:call-template name="generate-P6379">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                       </xsl:call-template>
+               </wdef:element>
+       </xsl:template>
+       
+       <!-- Authority records (corporate only) -->
+       <!-- NOTE: Since we have not enough information to create corporate elements
+                  on Wikidata using only BAnQ data, we require these to be
+                  pre-existing -->
+       
+       <!-- Authority records (meetings only) -->
+       <!-- NOTE: Since we have not enough information to create meeting elements
+                  on Wikidata using only BAnQ data, we require these to be
+                  pre-existing -->
+       
+       <!-- Get record cataloging standard -->
+       <xsl:template name="record-cataloging-standard">
+               <xsl:choose>
+                       <xsl:when test="marc:datafield[@tag='040']/marc:subfield[@code='e' and . = 'rda']">
+                               <xsl:text>rda</xsl:text>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:text>rcaa2</xsl:text>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <!-- Get type for a given record id. Can only return "print" or "catalog"
+            and will terminate if neither is recognized. -->
+       <xsl:template name="work-type">
+               <xsl:choose>
+                       <xsl:when test="substring(marc:controlfield[@tag='007'], 1, 1) = 'k' or marc:datafield[@tag='089']/marc:subfield[@code='a'] = 'EST'">
+                               <!-- Work is print -->
+                               <xsl:text>print</xsl:text>
+                       </xsl:when>
+                       <xsl:when test="substring(marc:controlfield[@tag='008'], 25, 1) = 'c'">
+                               <!-- Work is literary -->
+                               <xsl:text>catalog</xsl:text>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="yes">
+                                       <xsl:value-of select="marc:controlfield[@tag='001']" />
+                                       <xsl:text> : impossible de déterminer le type d’œuvre. La conversion est interrompue pour éviter de générer un fichier non conforme.</xsl:text>
+                               </xsl:message>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <xsl:template name="person-first-name">
+               <xsl:choose>
+                       <xsl:when test="marc:datafield[@tag = '100' and @ind1 = '1' and marc:subfield[@code = 'a' and contains(., ',')]]">
+                               <xsl:value-of select="normalize-space(translate(substring-after(marc:datafield[@tag = '100']/marc:subfield[@code = 'a'], ','), ',', ''))" />
+                       </xsl:when>
+                       <xsl:when test="marc:datafield[@tag = '100' and @ind1 = '0' and marc:subfield[@code = 'a']]">
+                               <xsl:value-of select="normalize-space(translate(marc:datafield[@tag = '100']/marc:subfield[@code = 'a'], ',', ''))" />
+                       </xsl:when>
+                       <xsl:when test="marc:datafield[@tag = '400' and @ind1 = '1' and marc:subfield[@code = 'a' and contains(., ',')]]">
+                               <xsl:value-of select="normalize-space(translate(substring-after(marc:datafield[@tag = '400']/marc:subfield[@code = 'a'], ','), ',', ''))" />
+                       </xsl:when>
+                       <xsl:when test="marc:datafield[@tag = '400' and @ind1 = '0' and marc:subfield[@code = 'a' and not(contains(., ','))]]">
+                               <xsl:value-of select="normalize-space(marc:datafield[@tag = '400']/marc:subfield[@code = 'a'])" />
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="marc:controlfield[@tag='001']" />
+                                       <xsl:text> : impossible de déterminer le prénom de la personne physique</xsl:text>
+                               </xsl:message>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <xsl:template name="person-last-name">
+               <xsl:choose>
+                       <xsl:when test="marc:datafield[@tag = '100' and @ind1 = '1' and marc:subfield[@code = 'a' and contains(., ',')]]">
+                               <xsl:value-of select="normalize-space(translate(substring-before(marc:datafield[@tag = '100']/marc:subfield[@code = 'a'], ','), ',', ''))" />
+                       </xsl:when>
+                       <xsl:when test="marc:datafield[@tag = '100' and @ind1 = '1' and marc:subfield[@code = 'a' and not(contains(., ','))]]">
+                               <xsl:value-of select="normalize-space(marc:datafield[@tag = '100']/marc:subfield[@code = 'a'])" />
+                       </xsl:when>
+                       <xsl:when test="marc:datafield[@tag = '400' and @ind1 = '1' and marc:subfield[@code = 'a' and contains(., ',')]]">
+                               <xsl:value-of select="normalize-space(translate(substring-before(marc:datafield[@tag = '400']/marc:subfield[@code = 'a'], ','), ',', ''))" />
+                       </xsl:when>
+                       <xsl:when test="marc:datafield[@tag = '400' and @ind1 = '1' and marc:subfield[@code = 'a' and not(contains(., ','))]]">
+                               <xsl:value-of select="normalize-space(marc:datafield[@tag = '400']/marc:subfield[@code = 'a'])" />
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="marc:controlfield[@tag='001']" />
+                                       <xsl:text> : impossible de déterminer le nom de famille de la personne physique</xsl:text>
+                               </xsl:message>
+                       </xsl:otherwise>
+               </xsl:choose>
+               
+               <!-- Concat subfield with code "c" if it contains no parenthesis -->
+               <!-- TBD: "c" subfield sometimes goesn't at last position. Disabled for now -->
+               <!--<xsl:if test="marc:datafield[@tag = '400' and marc:subfield[@code = 'c' and not(contains(., '(')) and not(contains(., ')'))]]">
+                       <xsl:text> </xsl:text>
+                       <xsl:value-of select="marc:datafield[@tag = '400' and marc:subfield[@code = 'c' and not(contains(., '(')) and not(contains(., ')'))]]" />
+                       <xsl:message terminate="no">
+                               <xsl:text>Add to last name: </xsl:text>
+                               <xsl:value-of select="marc:datafield[@tag = '400']/marc:subfield[@code = 'c' and not(contains(., '(')) and not(contains(., ')'))]" />
+                       </xsl:message>
+               </xsl:if>-->
+       </xsl:template>
+       
+       <xsl:template name="person-nickname">
+               <xsl:choose>
+                       <xsl:when test="marc:datafield[@tag = '500']/marc:subfield[@code = 'a']">
+                               <xsl:value-of select="normalize-space(translate(substring-before(marc:datafield[@tag = '500']/marc:subfield[@code = 'a'], ','), ',', ''))" />
+                       </xsl:when>
+               </xsl:choose>
+       </xsl:template>
+       
+       <xsl:template name="generate-catalog-edition">
+               <xsl:param name="work-element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="element-id" select="concat($work-element-id, 'Edition')" />
+               
+               <xsl:variable name="publishing-date">
+                       <xsl:call-template name="get-publication-date">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+               </xsl:variable>
+       
+               <wdef:element>
+                       <!-- Add attributes -->
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$element-id" />
+                       </xsl:attribute>
+                       <xsl:attribute name="marc:controlfield-001">
+                               <xsl:value-of select="$record-id" />
+                       </xsl:attribute>
+                       
+                       <!-- Add label -->
+                       <xsl:call-template name="generate-work-labels">
+                               <xsl:with-param name="record-id" select="$record-id" />
+                               <xsl:with-param name="work-type" select="'catalog'" />
+                       </xsl:call-template>
+                       
+                       <!-- Add description -->
+                       <wdef:description interface-lang="fr">
+                               <xsl:text>édition d’un catalogue d’exposition</xsl:text>
+                       </wdef:description>
+                       
+                       <!-- Add P31 (nature de l’élément) -->
+                       <xsl:call-template name="generate-catalog-edition-P31">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P50 (auteur) -->
+                       <xsl:call-template name="generate-P50-catalog">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P212 (ISBN-13) or P957 (ISBN-10) -->
+                       <xsl:call-template name="generate-ISBN-catalog">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P123 (publié par) -->
+                       <xsl:call-template name="generate-P123-catalog">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P291 (lieu de publication) -->
+                       <xsl:call-template name="generate-P291-catalog">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P629 (édition ou traduction de)-->
+                       <xsl:call-template name="generate-P629-catalog">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                               <xsl:with-param name="work-element-id" select="$work-element-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P1476 (titre) -->
+                       <xsl:call-template name="generate-work-P1476">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+                       
+                       <!-- Add P1680 (sous-titre) -->
+                       <xsl:variable name="has-subtitle">
+                               <xsl:for-each select="$strings-fix-doc">
+                                       <xsl:for-each select="key('fix-by-id', $record-id)">
+                                               <xsl:value-of select="count(fix[@type='subtitle']) > 0" />
+                                       </xsl:for-each>
+                               </xsl:for-each>
+                       </xsl:variable>
+                       <xsl:if test="$has-subtitle = 'true'">
+                               <xsl:call-template name="generate-work-P1680">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="record-id" select="$record-id" />
+                               </xsl:call-template>
+                       </xsl:if>
+               </wdef:element>
+       </xsl:template>
+       
+       <xsl:template name="generate-work-labels">
+               <xsl:param name="record-id" />
+               
+               <xsl:for-each select="$strings-fix-doc">
+                       <xsl:for-each select="key('fix-by-id', $record-id)">
+                               <xsl:for-each select="fix[@type='title']">
+                                       <wdef:label>
+                                               <xsl:attribute name="interface-lang">
+                                                       <xsl:value-of select="@xml:lang" />
+                                               </xsl:attribute>
+                                               <xsl:choose>
+                                                       <xsl:when test=". != '[Sans titre]'">
+                                                               <xsl:value-of select="." />
+                                                       </xsl:when>
+                                                       <xsl:otherwise>
+                                                               <xsl:text> </xsl:text>
+                                                       </xsl:otherwise>
+                                               </xsl:choose>
+                                       </wdef:label>
+                               </xsl:for-each>
+                       </xsl:for-each>
+               </xsl:for-each>
+       </xsl:template>
+       
+       <xsl:template name="generate-work-description">
+               <xsl:param name="record-id" />
+               <xsl:param name="work-type" />
+                       
+               <xsl:variable name="creators-string">
+                       <xsl:call-template name="generate-work-creators-string">
+                               <xsl:with-param name="bibliographic-id" select="$record-id" />
+                       </xsl:call-template>
+               </xsl:variable>
+               <xsl:variable name="publishing-date">
+                       <xsl:call-template name="get-publication-date">
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+               </xsl:variable>
+               
+               <!-- TODO: Complete this -->
+               <wdef:description>
+                       <xsl:attribute name="interface-lang">fr</xsl:attribute>
+                       
+                       <xsl:choose>
+                               <xsl:when test="$work-type = 'print'">
+                                       <!-- Work is print -->
+                                       <xsl:text>estampe</xsl:text>
+                               </xsl:when>
+                               <xsl:when test="$work-type = 'catalog'">
+                                       <!-- Work is literary -->
+                                       <xsl:text>catalogue d’exposition</xsl:text>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:message terminate="yes">
+                                               <xsl:value-of select="$record-id" />
+                                               <xsl:text>Type d’œuvre invalide</xsl:text>
+                                       </xsl:message>
+                               </xsl:otherwise>
+                       </xsl:choose>
+                       
+                       <xsl:choose>
+                               <xsl:when test="$creators-string != ''">
+                                       <xsl:value-of select="concat(' de ', $creators-string)" />
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:text> anonyme</xsl:text>
+                               </xsl:otherwise>
+                       </xsl:choose>
+                       
+                       <xsl:if test="$publishing-date != ''">
+                               <xsl:value-of select="concat(', publiée en ', substring($publishing-date, 1, 4))" />
+                       </xsl:if>
+               </wdef:description>
+       </xsl:template>
+       
+       <xsl:template name="generate-work-P31">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               <xsl:param name="work-type" />
+               
+               <wdef:property>
+                       <xsl:variable name="property-id">
+                               <xsl:call-template name="get-property-id">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="pid" select="'P31'" />
+                               </xsl:call-template>
+                       </xsl:variable>
+                       <xsl:attribute name="wdef:pid">P31</xsl:attribute>
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$property-id" />
+                       </xsl:attribute>
+                       <wdef:value>
+                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$value-id" />
+                               </xsl:attribute>
+                               <wdef:ref-element>
+                                       <xsl:choose>
+                                               <xsl:when test="$work-type = 'print'">
+                                                       <!-- Work is print -->
+                                                       <xsl:text>Q11060274</xsl:text>
+                                               </xsl:when>
+                                               <xsl:when test="$work-type = 'catalog'">
+                                                       <!-- Work is literary -->
+                                                       <xsl:text>Q47461344</xsl:text>
+                                               </xsl:when>
+                                               <xsl:otherwise>
+                                                       <xsl:message terminate="yes">
+                                                               <xsl:value-of select="$record-id" />
+                                                               <xsl:text>Type d’œuvre invalide</xsl:text>
+                                                       </xsl:message>
+                                               </xsl:otherwise>
+                                       </xsl:choose>
+                               </wdef:ref-element>
+                       </wdef:value>
+               </wdef:property>
+       </xsl:template>
+       
+       <!-- Generate exhibition catalog edition P31 -->
+       <xsl:template name="generate-catalog-edition-P31">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <wdef:property>
+                       <xsl:variable name="property-id">
+                               <xsl:call-template name="get-property-id">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="pid" select="'P31'" />
+                               </xsl:call-template>
+                       </xsl:variable>
+                       <xsl:attribute name="wdef:pid">P31</xsl:attribute>
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$property-id" />
+                       </xsl:attribute>
+                       <wdef:value>
+                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$value-id" />
+                               </xsl:attribute>
+                               <wdef:ref-element>
+                                       <xsl:text>Q3331189</xsl:text>
+                               </wdef:ref-element>
+                       </wdef:value>
+               </wdef:property>
+       </xsl:template>
+       
+       <!-- Generate P50 (auteur ou autrice) -->
+       <xsl:template name="generate-P50-catalog">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="creators-persons" select="marc:datafield[@tag = '100' and marc:subfield[@code = 'e'] = $roles-matches-doc/matches/match[@pid = 'P50']]" />
+               <xsl:variable name="creators-corporates" select="marc:datafield[@tag = '110' and marc:subfield[@code = 'e'] = $roles-matches-doc/matches/match[@pid = 'P50']]" />
+               <xsl:variable name="creators-meetings" select="marc:datafield[@tag = '111' and marc:subfield[@code = 'e'] = $roles-matches-doc/matches/match[@pid = 'P50']]" />
+               
+               <!-- Make sure we have at least one valid creator before creating the property -->
+               <xsl:if test="count($creators-persons) &gt; 0 or count($creators-corporates) &gt; 0 or count($creators-meetings) &gt; 0">
+                       <wdef:property>
+                               <xsl:variable name="property-id">
+                                       <xsl:call-template name="get-property-id">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="pid" select="'P50'" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:attribute name="wdef:pid">P50</xsl:attribute>
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$property-id" />
+                               </xsl:attribute>
+                               
+                               <xsl:for-each select="$creators-persons | $creators-corporates | $creators-meetings">
+                                       <xsl:variable name="creator-id">
+                                               <xsl:choose>
+                                                       <xsl:when test="@tag = '100'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+                                                               <xsl:value-of select="key('person-authority-from-reference', $creator-key)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                                       <xsl:when test="@tag = '110'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
+                                                               <xsl:value-of select="key('corporate-authority-from-reference', $creator-key)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                                       <xsl:when test="@tag = '111'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='d'], marc:subfield[@code='c'])" />
+                                                               <xsl:value-of select="key('meeting-authority-from-reference', $creator-key)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                               </xsl:choose>
+                                       </xsl:variable>
+                                       
+                                       <!-- Integrity checks -->
+                                       <xsl:if test="$creator-id = ''">
+                                               <xsl:message terminate="yes">
+                                                       <xsl:value-of select="$record-id" />
+                                                       <xsl:text> : impossible de trouver la notice du créateur en </xsl:text>
+                                                       <xsl:choose>
+                                                               <xsl:when test="@tag = '100'">
+                                                                       <xsl:text>100 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+                                                               </xsl:when>
+                                                               <xsl:when test="@tag = '110'">
+                                                                       <xsl:text>110 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
+                                                               </xsl:when>
+                                                               <xsl:when test="@tag = '111'">
+                                                                       <xsl:text>111 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='d'], marc:subfield[@code='c'])" />
+                                                               </xsl:when>
+                                                       </xsl:choose>
+                                               </xsl:message>
+                                       </xsl:if>
+                                       
+                                       <!-- Compare creator birth and death to work publishing dates -->
+                                       <xsl:variable name="valid-creator">
+                                               <xsl:if test="@tag = '100'">
+                                                       <xsl:call-template name="check-person-to-publishing-date">
+                                                               <xsl:with-param name="bibliographic-id" select="$record-id" />
+                                                               <xsl:with-param name="creator-id" select="$creator-id" />
+                                                       </xsl:call-template>
+                                               </xsl:if>
+                                       </xsl:variable>
+                                       
+                                       <wdef:value>
+                                               <xsl:variable name="value-id" select="concat($property-id, '-V', generate-id(.))" />
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$value-id" />
+                                               </xsl:attribute>
+                                               <wdef:ref-element>
+                                                       <xsl:call-template name="get-element-id">
+                                                               <xsl:with-param name="record-id" select="$creator-id" />
+                                                               <xsl:with-param name="record-type" select="'authority'" />
+                                                       </xsl:call-template>
+                                               </wdef:ref-element>
+                                       </wdef:value>
+                               </xsl:for-each>
+                       </wdef:property>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate P170 (créé par) -->
+       <xsl:template name="generate-P170-catalog">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="creators-persons" select="marc:datafield[@tag = '100' and (not(marc:subfield[@code = 'e']) or marc:subfield[@code = 'e'] = $roles-matches-doc/matches/match[@pid = 'P170'])]" />
+               <xsl:variable name="creators-corporates" select="marc:datafield[@tag = '110' and (not(marc:subfield[@code = 'e']) or marc:subfield[@code = 'e'] = $roles-matches-doc/matches/match[@pid = 'P170'])]" />
+               <xsl:variable name="creators-meetings" select="marc:datafield[@tag = '111' and (not(marc:subfield[@code = 'e']) or marc:subfield[@code = 'e'] = $roles-matches-doc/matches/match[@pid = 'P170'])]" />
+               
+               <!-- Make sure we have at least one valid creator before creating the property -->
+               <xsl:if test="count($creators-persons) &gt; 0 or count($creators-corporates) &gt; 0 or count($creators-meetings) &gt; 0">
+                       <wdef:property>
+                               <xsl:variable name="property-id">
+                                       <xsl:call-template name="get-property-id">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="pid" select="'P170'" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:attribute name="wdef:pid">P170</xsl:attribute>
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$property-id" />
+                               </xsl:attribute>
+                               
+                               <xsl:for-each select="$creators-persons | $creators-corporates | $creators-meetings">
+                                       <xsl:variable name="creator-id">
+                                               <xsl:choose>
+                                                       <xsl:when test="@tag = '100'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+                                                               <xsl:value-of select="key('person-authority-from-reference', $creator-key)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                                       <xsl:when test="@tag = '110'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
+                                                               <xsl:value-of select="key('corporate-authority-from-reference', $creator-key)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                                       <xsl:when test="@tag = '111'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='d'], marc:subfield[@code='c'])" />
+                                                               <xsl:value-of select="key('meeting-authority-from-reference', $creator-key)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                               </xsl:choose>
+                                       </xsl:variable>
+                                       
+                                       <!-- Integrity check -->
+                                       <xsl:if test="$creator-id = ''">
+                                               <xsl:message terminate="yes"> <!-- TODO: Set "yes" here before release -->
+                                                       <xsl:value-of select="$record-id" />
+                                                       <xsl:text> : impossible de trouver la notice du créateur en </xsl:text>
+                                                       <xsl:choose>
+                                                               <xsl:when test="@tag = '100'">
+                                                                       <xsl:text>100 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+                                                               </xsl:when>
+                                                               <xsl:when test="@tag = '110'">
+                                                                       <xsl:text>110 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
+                                                               </xsl:when>
+                                                               <xsl:when test="@tag = '111'">
+                                                                       <xsl:text>111 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='d'], marc:subfield[@code='c'])" />
+                                                               </xsl:when>
+                                                       </xsl:choose>
+                                               </xsl:message>
+                                       </xsl:if>
+                                       
+                                       <!-- Compare creator birth and death to work publishing dates -->
+                                       <xsl:variable name="valid-creator">
+                                               <xsl:if test="@tag = '100'">
+                                                       <xsl:call-template name="check-person-to-publishing-date">
+                                                               <xsl:with-param name="bibliographic-id" select="$record-id" />
+                                                               <xsl:with-param name="creator-id" select="$creator-id" />
+                                                       </xsl:call-template>
+                                               </xsl:if>
+                                       </xsl:variable>
+                                       
+                                       <wdef:value>
+                                               <xsl:variable name="value-id" select="concat($property-id, '-V', generate-id(.))" />
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$value-id" />
+                                               </xsl:attribute>
+                                               <wdef:ref-element>
+                                                       <xsl:call-template name="get-element-id">
+                                                               <xsl:with-param name="record-id" select="$creator-id" />
+                                                               <xsl:with-param name="record-type" select="'authority'" />
+                                                       </xsl:call-template>
+                                               </wdef:ref-element>
+                                               
+                                               <!-- Build roles list -->
+                                               <xsl:variable name="roles-names" select="marc:subfield[@code='e']" />
+                                                       <!-- Ignore generic roles and these with their own property like Q36180 (writer), Q482980 (author) and Q483501 (Q483501) -->
+                                               <xsl:variable name="roles" select="$roles-matches-doc/matches/match[@pid = 'P170' and @qid != 'Q36180' and @qid != 'Q482980' and @qid != 'Q483501' and . = $roles-names]" />
+                                               
+                                               <xsl:for-each select="$roles">
+                                                       <wdef:qualifier>
+                                                               <xsl:variable name="qualifier-id" select="concat($value-id, '-Q', generate-id(.))" />
+                                                               <xsl:attribute name="wdef:id">
+                                                                       <xsl:value-of select="$qualifier-id" />
+                                                               </xsl:attribute>
+                                                               <wdef:property>
+                                                                       <xsl:variable name="qualifier-property-id" select="concat($qualifier-id, '-P170')" />
+                                                                       <xsl:attribute name="wdef:id">
+                                                                               <xsl:value-of select="$qualifier-property-id" />
+                                                                       </xsl:attribute>
+                                                                       <wdef:value>
+                                                                               <xsl:variable name="qualifier-value-id" select="concat($qualifier-property-id, '-V', generate-id(.))" />
+                                                                               <xsl:attribute name="wdef:id">
+                                                                                       <xsl:value-of select="$qualifier-value-id" />
+                                                                               </xsl:attribute>
+                                                                               <wdef:ref-element>
+                                                                                       <xsl:value-of select="@qid" />
+                                                                               </wdef:ref-element>
+                                                                       </wdef:value>
+                                                               </wdef:property>
+                                                       </wdef:qualifier>
+                                               </xsl:for-each>
+                                       </wdef:value>
+                               </xsl:for-each>
+                       </wdef:property>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate P170 (créé par) -->
+       <xsl:template name="generate-P170-print">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="creators-persons" select="marc:datafield[@tag = '100']" />
+               <xsl:variable name="creators-corporates" select="marc:datafield[@tag = '110']" />
+               <xsl:variable name="creators-meetings" select="marc:datafield[@tag = '111']" />
+               
+               <!-- Make sure we have at least one valid creator before creating the property -->
+               <!-- WARNING/TODO: We don’t test reference points to any authority here. -->
+               <xsl:if test="count($creators-persons) &gt; 0 or count($creators-corporates) &gt; 0 or count($creators-meetings) &gt; 0">
+                       <wdef:property>
+                               <xsl:variable name="property-id">
+                                       <xsl:call-template name="get-property-id">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="pid" select="'P170'" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:attribute name="wdef:pid">P170</xsl:attribute>
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$property-id" />
+                               </xsl:attribute>
+                               
+                               <xsl:for-each select="$creators-persons | $creators-corporates | $creators-meetings">
+                                       <xsl:variable name="creator-id">
+                                               <xsl:choose>
+                                                       <xsl:when test="@tag = '100'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+                                                               <xsl:value-of select="key('person-authority-from-reference', $creator-key)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                                       <xsl:when test="@tag = '110'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
+                                                               <xsl:value-of select="key('corporate-authority-from-reference', $creator-key)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                                       <xsl:when test="@tag = '111'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='d'], marc:subfield[@code='c'])" />
+                                                               <xsl:value-of select="key('meeting-authority-from-reference', $creator-key)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                               </xsl:choose>
+                                       </xsl:variable>
+                                       
+                                       <!-- Integrity check -->
+                                       <xsl:if test="$creator-id = ''">
+                                               <xsl:message terminate="yes">
+                                                       <xsl:value-of select="$record-id" />
+                                                       <xsl:text> : impossible de trouver la notice du créateur en </xsl:text>
+                                                       <xsl:choose>
+                                                               <xsl:when test="@tag = '100'">
+                                                                       <xsl:text>100 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+                                                               </xsl:when>
+                                                               <xsl:when test="@tag = '110'">
+                                                                       <xsl:text>110 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
+                                                               </xsl:when>
+                                                               <xsl:when test="@tag = '111'">
+                                                                       <xsl:text>111 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='d'], marc:subfield[@code='c'])" />
+                                                               </xsl:when>
+                                                       </xsl:choose>
+                                               </xsl:message>
+                                       </xsl:if>
+                                       
+                                       <!-- Compare creator birth and death to work publishing dates -->
+                                       <xsl:variable name="valid-creator">
+                                               <xsl:if test="@tag = '100'">
+                                                       <xsl:call-template name="check-person-to-publishing-date">
+                                                               <xsl:with-param name="bibliographic-id" select="$record-id" />
+                                                               <xsl:with-param name="creator-id" select="$creator-id" />
+                                                       </xsl:call-template>
+                                               </xsl:if>
+                                       </xsl:variable>
+                                       
+                                       <wdef:value>
+                                               <xsl:variable name="value-id" select="concat($property-id, '-V', generate-id(.))" />
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$value-id" />
+                                               </xsl:attribute>
+                                               <wdef:ref-element>
+                                                       <xsl:call-template name="get-element-id">
+                                                               <xsl:with-param name="record-id" select="$creator-id" />
+                                                               <xsl:with-param name="record-type" select="'authority'" />
+                                                       </xsl:call-template>
+                                               </wdef:ref-element>
+                                               
+                                               <!-- Build roles list -->
+                                               <xsl:variable name="roles-names" select="marc:subfield[@code='e']" />
+                                                       <!-- Ignore generic roles and these with their own property like Q36180 (writer), Q482980 (author) and Q483501 (Q483501) -->
+                                               <xsl:variable name="roles" select="$roles-matches-doc/matches/match[@pid = 'P170' and @qid != 'Q36180' and @qid != 'Q482980' and @qid != 'Q483501' and . = $roles-names]" />
+                                               
+                                               <xsl:for-each select="$roles">
+                                                       <wdef:qualifier>
+                                                               <xsl:variable name="qualifier-id" select="concat($value-id, '-Q', generate-id(.))" />
+                                                               <xsl:attribute name="wdef:id">
+                                                                       <xsl:value-of select="$qualifier-id" />
+                                                               </xsl:attribute>
+                                                               <wdef:property>
+                                                                       <xsl:variable name="qualifier-property-id" select="concat($qualifier-id, '-P170')" />
+                                                                       <xsl:attribute name="wdef:id">
+                                                                               <xsl:value-of select="$qualifier-property-id" />
+                                                                       </xsl:attribute>
+                                                                       <wdef:value>
+                                                                               <xsl:variable name="qualifier-value-id" select="concat($qualifier-property-id, '-V', generate-id(.))" />
+                                                                               <xsl:attribute name="wdef:id">
+                                                                                       <xsl:value-of select="$qualifier-value-id" />
+                                                                               </xsl:attribute>
+                                                                               <wdef:ref-element>
+                                                                                       <xsl:value-of select="@qid" />
+                                                                               </wdef:ref-element>
+                                                                       </wdef:value>
+                                                               </wdef:property>
+                                                       </wdef:qualifier>
+                                               </xsl:for-each>
+                                       </wdef:value>
+                               </xsl:for-each>
+                       </wdef:property>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate P577 (date de publication) -->
+       <xsl:template name="generate-work-P577">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="publishing-date">
+                       <xsl:call-template name="get-publication-date">
+                               <xsl:with-param name="element-id" select="$element-id" />
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+               </xsl:variable>
+               
+               <xsl:if test="$publishing-date != ''">
+                       <xsl:variable name="precision">
+                               <xsl:choose>
+                                       <xsl:when test="string-length($publishing-date) = 4">
+                                               <xsl:text>9</xsl:text>
+                                       </xsl:when>
+                                       <xsl:when test="string-length($publishing-date) = 7">
+                                               <xsl:text>10</xsl:text>
+                                       </xsl:when>
+                                       <xsl:when test="string-length($publishing-date) = 10">
+                                               <xsl:text>11</xsl:text>
+                                       </xsl:when>
+                                       <xsl:otherwise>
+                                               <xsl:message terminate="yes">
+                                                       <xsl:value-of select="$record-id" />
+                                                       <xsl:text> : date de publication invalide : « </xsl:text>
+                                                       <xsl:value-of select="$publishing-date" />
+                                                       <xsl:text> »</xsl:text>
+                                               </xsl:message>
+                                       </xsl:otherwise>
+                               </xsl:choose>
+                       </xsl:variable>
+                       
+                       <wdef:property>
+                               <xsl:variable name="property-id">
+                                       <xsl:call-template name="get-property-id">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="pid" select="'P577'" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:attribute name="wdef:pid">P577</xsl:attribute>
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$property-id" />
+                               </xsl:attribute>
+                               
+                               <wdef:value>
+                                       <xsl:variable name="value-id" select="concat($property-id, '-V', generate-id(.))" />
+                                       <xsl:attribute name="wdef:id">
+                                               <xsl:value-of select="$value-id" />
+                                       </xsl:attribute>
+                                       
+                                       <wdef:time>
+                                               <xsl:attribute name="wdef:precision">
+                                                       <xsl:value-of select="$precision" />
+                                               </xsl:attribute>
+                                               <xsl:attribute name="wdef:calendar">gregorian</xsl:attribute>
+                                       
+                                               <xsl:text>+</xsl:text>
+                                               <xsl:value-of select="$publishing-date" />
+                                               <xsl:if test="string-length($publishing-date) = 4">
+                                                       <xsl:text>-00-00</xsl:text>
+                                               </xsl:if>
+                                               <xsl:if test="string-length($publishing-date) = 7">
+                                                       <xsl:text>-00</xsl:text>
+                                               </xsl:if>
+                                               <xsl:text>T00:00:00Z</xsl:text>
+                                       </wdef:time>
+                               </wdef:value>
+                       </wdef:property>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate P767 (collaborateur ou collaboratrice au travail de création) -->
+       <xsl:template name="generate-work-P767">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="creators-persons" select="marc:datafield[@tag = '700' and not(marc:subfield[@code='t'])]" />
+               <xsl:variable name="creators-corporates" select="marc:datafield[@tag = '710' and not(marc:subfield[@code='t'])]" />
+               <xsl:variable name="creators-meetings" select="marc:datafield[@tag = '711' and not(marc:subfield[@code='t'])]" />
+               
+               <!-- Make sure we have at least one valid creator before creating the property -->
+               <!-- WARNING/TODO: We don’t test reference points to any authority here. -->
+               <xsl:if test="count($creators-persons) &gt; 0 or count($creators-corporates) &gt; 0 or count($creators-meetings) &gt; 0">
+                       <wdef:property>
+                               <xsl:variable name="property-id">
+                                       <xsl:call-template name="get-property-id">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="pid" select="'P767'" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:attribute name="wdef:pid">P767</xsl:attribute>
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$property-id" />
+                               </xsl:attribute>
+                               
+                               <xsl:for-each select="$creators-persons | $creators-corporates | $creators-meetings">
+                                       <xsl:variable name="creator-id">
+                                               <xsl:choose>
+                                                       <xsl:when test="@tag = '700'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+                                                               <xsl:value-of select="key('person-authority-from-reference', $creator-key)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                                       <xsl:when test="@tag = '710'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
+                                                               <!-- Workaround a known error in BAnQ data with "Atelier circulaire" case -->
+                                                               <xsl:variable name="creator-key-fixed">
+                                                                       <xsl:choose>
+                                                                               <xsl:when test="$creator-key != 'Atelier circulaire'">
+                                                                                       <xsl:value-of select="$creator-key" />
+                                                                               </xsl:when>
+                                                                               <xsl:otherwise>
+                                                                                       <xsl:text>Atelier Circulaire</xsl:text>
+                                                                               </xsl:otherwise>
+                                                                       </xsl:choose>
+                                                               </xsl:variable>
+                                                               <xsl:value-of select="key('corporate-authority-from-reference', $creator-key-fixed)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                                       <xsl:when test="@tag = '711'">
+                                                               <xsl:variable name="creator-key" select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='d'], marc:subfield[@code='c'])" />
+                                                               <xsl:value-of select="key('meeting-authority-from-reference', $creator-key)/marc:controlfield[@tag = '001']" />
+                                                       </xsl:when>
+                                               </xsl:choose>
+                                       </xsl:variable>
+                                       
+                                       <!-- Integrity check -->
+                                       <xsl:if test="$creator-id = ''">
+                                               <xsl:message terminate="no">
+                                                       <xsl:value-of select="$record-id" />
+                                                       <xsl:text> : impossible de trouver la notice du créateur en </xsl:text>
+                                                       <xsl:choose>
+                                                               <xsl:when test="@tag = '700'">
+                                                                       <xsl:text>700 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+                                                               </xsl:when>
+                                                               <xsl:when test="@tag = '710'">
+                                                                       <xsl:text>710 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='c'], marc:subfield[@code='d'])" />
+                                                               </xsl:when>
+                                                               <xsl:when test="@tag = '711'">
+                                                                       <xsl:text>711 : </xsl:text>
+                                                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='n'], marc:subfield[@code='d'], marc:subfield[@code='c'])" />
+                                                               </xsl:when>
+                                                       </xsl:choose>
+                                               </xsl:message>
+                                       </xsl:if>
+                                       
+                                       <!-- Compare creator birth and death to work publishing dates -->
+                                       <xsl:variable name="valid-creator">
+                                               <xsl:if test="@tag = '700'">
+                                                       <xsl:call-template name="check-person-to-publishing-date">
+                                                               <xsl:with-param name="bibliographic-id" select="$record-id" />
+                                                               <xsl:with-param name="creator-id" select="$creator-id" />
+                                                       </xsl:call-template>
+                                               </xsl:if>
+                                       </xsl:variable>
+                                       
+                                       <wdef:value>
+                                               <xsl:variable name="value-id" select="concat($property-id, '-V', generate-id(.))" />
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$value-id" />
+                                               </xsl:attribute>
+                                               <wdef:ref-element>
+                                                       <xsl:call-template name="get-element-id">
+                                                               <xsl:with-param name="record-id" select="$creator-id" />
+                                                               <xsl:with-param name="record-type" select="'authority'" />
+                                                       </xsl:call-template>
+                                               </wdef:ref-element>
+                                               
+                                               <!-- Build roles list -->
+                                               <xsl:variable name="roles-names" select="marc:subfield[@code='e']" />
+                                                       <!-- Ignore generic roles and these with their own property like Q36180 (writer), Q482980 (author) and Q483501 (Q483501) -->
+                                               <xsl:variable name="roles" select="$roles-matches-doc/matches/match[@pid = 'P767' and @qid != 'Q36180' and @qid != 'Q482980' and @qid != 'Q483501' and . = $roles-names]" />
+                                               
+                                               <xsl:for-each select="$roles">
+                                                       <wdef:qualifier>
+                                                               <xsl:variable name="qualifier-id" select="concat($value-id, '-Q', generate-id(.))" />
+                                                               <xsl:attribute name="wdef:id">
+                                                                       <xsl:value-of select="$qualifier-id" />
+                                                               </xsl:attribute>
+                                                               <wdef:property>
+                                                                       <xsl:variable name="qualifier-property-id" select="concat($qualifier-id, '-P767')" />
+                                                                       <xsl:attribute name="wdef:id">
+                                                                               <xsl:value-of select="$qualifier-property-id" />
+                                                                       </xsl:attribute>
+                                                                       <wdef:value>
+                                                                               <xsl:variable name="qualifier-value-id" select="concat($qualifier-property-id, '-V', generate-id(.))" />
+                                                                               <xsl:attribute name="wdef:id">
+                                                                                       <xsl:value-of select="$qualifier-value-id" />
+                                                                               </xsl:attribute>
+                                                                               <wdef:ref-element>
+                                                                                       <xsl:value-of select="@qid" />
+                                                                               </wdef:ref-element>
+                                                                       </wdef:value>
+                                                               </wdef:property>
+                                                       </wdef:qualifier>
+                                               </xsl:for-each>
+                                       </wdef:value>
+                               </xsl:for-each>
+                       </wdef:property>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate P195 (collection) -->
+       <xsl:template name="generate-P195-print">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <wdef:property>
+                       <xsl:variable name="property-id">
+                               <xsl:call-template name="get-property-id">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="pid" select="'P195'" />
+                               </xsl:call-template>
+                       </xsl:variable>
+                       <xsl:attribute name="wdef:pid">P195</xsl:attribute>
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$property-id" />
+                       </xsl:attribute>
+                                       
+                       <wdef:value>
+                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$value-id" />
+                               </xsl:attribute>
+                               <wdef:ref-element>Q39628</wdef:ref-element>
+                       </wdef:value>
+               </wdef:property>
+       </xsl:template>
+       
+       <!-- Generate P217 (numéro d’inventaire) -->
+       <xsl:template name="generate-P217-print">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <wdef:property>
+                       <xsl:variable name="property-id">
+                               <xsl:call-template name="get-property-id">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="pid" select="'P217'" />
+                               </xsl:call-template>
+                       </xsl:variable>
+                       <xsl:attribute name="wdef:pid">P217</xsl:attribute>
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$property-id" />
+                       </xsl:attribute>
+                       
+                       <wdef:value>
+                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$value-id" />
+                               </xsl:attribute>
+                               <wdef:literal>
+                                       <xsl:value-of select="$record-id" />
+                               </wdef:literal>
+                               
+                               <wdef:qualifier>
+                                       <xsl:variable name="qualifier-id" select="concat($value-id, '-Q', generate-id(.))" />
+                                       <xsl:attribute name="wdef:id">
+                                               <xsl:value-of select="$qualifier-id" />
+                                       </xsl:attribute>
+                                       <wdef:property>
+                                               <xsl:variable name="qualifier-property-id" select="concat($qualifier-id, '-P767')" />
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$qualifier-property-id" />
+                                               </xsl:attribute>
+                                               <wdef:value>
+                                                       <xsl:variable name="qualifier-value-id" select="concat($qualifier-property-id, '-V', generate-id(.))" />
+                                                       <xsl:attribute name="wdef:id">
+                                                               <xsl:value-of select="$qualifier-value-id" />
+                                                       </xsl:attribute>
+                                                       <wdef:ref-element>Q39628</wdef:ref-element>
+                                               </wdef:value>
+                                       </wdef:property>
+                               </wdef:qualifier>
+                       </wdef:value>
+               </wdef:property>
+       </xsl:template>
+       
+       <!-- Generate P212 (ISBN-13) or P957 (ISBN-10) -->
+       <xsl:template name="generate-ISBN-catalog">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="numeric-isbn" select="translate(substring-before(marc:datafield[@tag='020']/marc:subfield[@code='a'], ' '), '-', '')" />
+               
+               <xsl:choose>
+                       <xsl:when test="(string-length($numeric-isbn) = 10 or string-length($numeric-isbn) = 13) and translate($numeric-isbn, '0123456789X', '') = ''">
+                               <xsl:variable name="pid">
+                                       <xsl:choose>
+                                               <xsl:when test="string-length($numeric-isbn) = 10">
+                                                       <xsl:text>P957</xsl:text>
+                                               </xsl:when>
+                                               <xsl:when test="string-length($numeric-isbn) = 13">
+                                                       <xsl:text>P212</xsl:text>
+                                               </xsl:when>
+                                       </xsl:choose>
+                               </xsl:variable>
+                               <xsl:variable name="isbn">
+                                       <xsl:choose>
+                                               <xsl:when test="string-length($numeric-isbn) = 10">
+                                                       <xsl:value-of select="concat(substring($numeric-isbn, 1, 1), '-', substring($numeric-isbn, 2, 3), '-', substring($numeric-isbn, 5, 5), '-', substring($numeric-isbn, 10, 1))" />
+                                               </xsl:when>
+                                               <xsl:when test="string-length($numeric-isbn) = 13">
+                                                       <xsl:value-of select="concat(substring($numeric-isbn, 1, 3), '-', substring($numeric-isbn, 4, 1), '-', substring($numeric-isbn, 5, 2), '-', substring($numeric-isbn, 7, 6), '-', substring($numeric-isbn, 13, 1))" />
+                                               </xsl:when>
+                                       </xsl:choose>
+                               </xsl:variable>
+                               
+                               <wdef:property>
+                                       <xsl:variable name="property-id">
+                                               <xsl:call-template name="get-property-id">
+                                                       <xsl:with-param name="element-id" select="$element-id" />
+                                                       <xsl:with-param name="pid" select="$pid" />
+                                               </xsl:call-template>
+                                       </xsl:variable>
+                                       <xsl:attribute name="wdef:pid"><xsl:value-of select="$pid" /></xsl:attribute>
+                                       <xsl:attribute name="wdef:id">
+                                               <xsl:value-of select="$property-id" />
+                                       </xsl:attribute>
+                                       
+                                       <wdef:value>
+                                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$value-id" />
+                                               </xsl:attribute>
+                                               <wdef:literal>
+                                                       <xsl:value-of select="$isbn" />
+                                               </wdef:literal>
+                                       </wdef:value>
+                               </wdef:property>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="$record-id" />
+                                       <xsl:text> : l’ISBN est ignoré : « </xsl:text>
+                                       <xsl:value-of select="$numeric-isbn" />
+                                       <xsl:text> »</xsl:text>
+                               </xsl:message>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <!-- Generate P123 (publié par) -->
+       <xsl:template name="generate-P123-catalog">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="publishers-260" select="marc:datafield[@tag='260']/marc:subfield[@code='b' and not(contains(., '?'))]" />
+               <xsl:variable name="publishers-264" select="marc:datafield[@tag='264']/marc:subfield[@code='b' and not(contains(., '?'))]" />
+               <xsl:variable name="publishers-710" select="marc:datafield[@tag='710' and marc:subfield[@code='e'] = 'organisme de publication']/marc:subfield[@code='a']" />
+               <xsl:variable name="publishers-711" select="marc:datafield[@tag='711' and marc:subfield[@code='j'] = 'organisme de publication']/marc:subfield[@code='a']" />
+               
+               <xsl:if test="count($publishers-260) &gt; 0 or count($publishers-264) &gt; 0 or count($publishers-710) &gt; 0 or count($publishers-711) &gt; 0">
+                       <wdef:property>
+                               <xsl:variable name="property-id">
+                                       <xsl:call-template name="get-property-id">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="pid" select="'P123'" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:attribute name="wdef:pid"><xsl:value-of select="$property-id" /></xsl:attribute>
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$property-id" />
+                               </xsl:attribute>
+                               
+                               <xsl:choose>
+                                       <xsl:when test="count($publishers-260) &gt; 0">
+                                               <xsl:for-each select="$publishers-260">
+                                                       <xsl:variable name="publisher-name" select="." />
+                                                       <xsl:variable name="publisher-qid" select="normalize-space($records-matches-doc/matches/match[. = $publisher-name]/@qid)" />
+                                                               
+                                                       <xsl:if test="$publisher-qid = ''">
+                                                               <xsl:message terminate="yes"> <!-- TODO: Set yes here -->
+                                                                       <xsl:value-of select="$record-id" />
+                                                                       <xsl:text> : l’éditeur « </xsl:text>
+                                                                       <xsl:value-of select="$publisher-name" />
+                                                                       <xsl:text> » n’a pas d’équivalent connu dans Wikidata</xsl:text>
+                                                               </xsl:message>
+                                                       </xsl:if>
+                                                       
+                                                       <wdef:value>
+                                                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                                               <xsl:attribute name="wdef:id">
+                                                                       <xsl:value-of select="$value-id" />
+                                                               </xsl:attribute>
+                                                               <wdef:ref-element>
+                                                                       <xsl:value-of select="$publisher-qid" />
+                                                               </wdef:ref-element>
+                                                       </wdef:value>
+                                               </xsl:for-each>
+                                       </xsl:when>
+                                       <xsl:when test="count($publishers-264) &gt; 0">
+                                               <xsl:for-each select="$publishers-264">
+                                                       <xsl:variable name="publisher-name" select="." />
+                                                       <xsl:variable name="publisher-qid" select="normalize-space($records-matches-doc/matches/match[. = $publisher-name]/@qid)" />
+                                                               
+                                                       <xsl:if test="$publisher-qid = ''">
+                                                               <xsl:message terminate="yes"> <!-- TODO: Set yes here -->
+                                                                       <xsl:value-of select="$record-id" />
+                                                                       <xsl:text> : l’éditeur « </xsl:text>
+                                                                       <xsl:value-of select="$publisher-name" />
+                                                                       <xsl:text> » n’a pas d’équivalent connu dans Wikidata</xsl:text>
+                                                               </xsl:message>
+                                                       </xsl:if>
+                                                       
+                                                       <wdef:value>
+                                                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                                               <xsl:attribute name="wdef:id">
+                                                                       <xsl:value-of select="$value-id" />
+                                                               </xsl:attribute>
+                                                               <wdef:ref-element>
+                                                                       <xsl:value-of select="$publisher-qid" />
+                                                               </wdef:ref-element>
+                                                       </wdef:value>
+                                               </xsl:for-each>
+                                       </xsl:when>
+                                       <xsl:when test="count($publishers-710) &gt; 0">
+                                                       <xsl:message>PUBLISHER 710 <xsl:value-of select="$publishers-710" /></xsl:message>
+                                       </xsl:when>
+                                       <xsl:when test="count($publishers-711) &gt; 0">
+                                                       <xsl:message>PUBLISHER 711 <xsl:value-of select="$publishers-711" /></xsl:message>
+                                       </xsl:when>
+                               </xsl:choose>
+                       </wdef:property>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate P291 (lieu de publication) -->
+       <xsl:template name="generate-P291-catalog">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="publication-place">
+                       <xsl:choose>
+                               <xsl:when test="marc:datafield[@tag='260']/marc:subfield[@code='a'] and not(contains(marc:datafield[@tag='260']/marc:subfield[@code='a'], '?')) and not(contains(translate(marc:datafield[@tag='260']/marc:subfield[@code='a'], 'SL', 'sl'), 's.l.'))">
+                                       <xsl:value-of select="marc:datafield[@tag='260']/marc:subfield[@code='a']" />
+                               </xsl:when>
+                               <xsl:when test="marc:datafield[@tag='264' and @ind2 = '1']/marc:subfield[@code='a'] and not(contains(marc:datafield[@tag='264' and @ind2 = '1']/marc:subfield[@code='a'], '?')) and not(contains(translate(marc:datafield[@tag='264' and @ind2 = '1']/marc:subfield[@code='a'], 'SL', 'sl'), 's.l.'))">
+                                       <xsl:value-of select="marc:datafield[@tag='264' and @ind2 = '1']/marc:subfield[@code='a']" />
+                               </xsl:when>
+                       </xsl:choose>
+               </xsl:variable>
+               
+               <xsl:if test="$publication-place != ''">
+                       <xsl:variable name="location-qid">
+                               <xsl:for-each select="$places-matches-doc">
+                                       <xsl:value-of select="key('qid-from-place', $publication-place)/@qid" />
+                               </xsl:for-each>
+                       </xsl:variable>
+                       
+                       <xsl:if test="$location-qid = ''">
+                               <xsl:message terminate="yes">
+                                       <xsl:value-of select="$record-id" />
+                                       <xsl:text> : pas d’équivalent répertorié pour le lieu suivant : « </xsl:text>
+                                       <xsl:value-of select="$publication-place" />
+                                       <xsl:text> »</xsl:text>
+                               </xsl:message>
+                       </xsl:if>
+                       
+                       <wdef:property>
+                               <xsl:variable name="property-id">
+                                       <xsl:call-template name="get-property-id">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="pid" select="'P291'" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:attribute name="wdef:pid">P291</xsl:attribute>
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$property-id" />
+                               </xsl:attribute>
+                                               
+                               <wdef:value>
+                                       <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                       <xsl:attribute name="wdef:id">
+                                               <xsl:value-of select="$value-id" />
+                                       </xsl:attribute>
+                                       <wdef:ref-element>
+                                               <xsl:value-of select="$location-qid" />
+                                       </wdef:ref-element>
+                               </wdef:value>
+                       </wdef:property>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate catalog edition P629 (édition ou traduction de) -->
+       <xsl:template name="generate-P629-catalog">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               <xsl:param name="work-element-id" />
+               
+               <wdef:property>
+                       <xsl:variable name="property-id">
+                               <xsl:call-template name="get-property-id">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="pid" select="'P629'" />
+                               </xsl:call-template>
+                       </xsl:variable>
+                       <xsl:attribute name="wdef:pid">P629</xsl:attribute>
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$property-id" />
+                       </xsl:attribute>
+                       
+                       <wdef:value>
+                               <xsl:variable name="value-id" select="concat($property-id, '-V', count(preceding-sibling::fix[type='title']) + 1)" />
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$value-id" />
+                               </xsl:attribute>
+                               <wdef:ref-element>
+                                       <xsl:value-of select="$work-element-id" />
+                               </wdef:ref-element>
+                       </wdef:value>
+               </wdef:property>
+       </xsl:template>
+       
+       <!-- Generate work titles -->
+       <xsl:template name="generate-work-P1476">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <wdef:property>
+                       <xsl:variable name="property-id">
+                               <xsl:call-template name="get-property-id">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="pid" select="'P1476'" />
+                               </xsl:call-template>
+                       </xsl:variable>
+                       <xsl:attribute name="wdef:pid">P1476</xsl:attribute>
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$property-id" />
+                       </xsl:attribute>
+                       
+                       <xsl:for-each select="$strings-fix-doc">
+                               <xsl:for-each select="key('fix-by-id', $record-id)">
+                                       <xsl:for-each select="fix[@type='title']">
+                                               <xsl:choose>
+                                                       <!-- If a title is known -->
+                                                       <xsl:when test=". != '[Sans titre]'">
+                                                               <wdef:value>
+                                                                       <xsl:variable name="value-id" select="concat($property-id, '-V', count(preceding-sibling::fix[type='title']) + 1)" />
+                                                                       <xsl:attribute name="wdef:id">
+                                                                               <xsl:value-of select="$value-id" />
+                                                                       </xsl:attribute>
+                                                                       <wdef:translation>
+                                                                               <xsl:attribute name="xml:lang">
+                                                                                       <xsl:value-of select="@xml:lang" />
+                                                                               </xsl:attribute>
+                                                                               <xsl:value-of select="." />
+                                                                       </wdef:translation>
+                                                               </wdef:value>
+                                                       </xsl:when>
+                                                       <xsl:otherwise>
+                                                               <wdef:novalue>
+                                                                       <xsl:variable name="value-id" select="concat($property-id, '-V', count(preceding-sibling::fix[type='title']) + 1)" />
+                                                                       <xsl:attribute name="wdef:id">
+                                                                               <xsl:value-of select="$value-id" />
+                                                                       </xsl:attribute>
+                                                               </wdef:novalue>
+                                                       </xsl:otherwise>
+                                               </xsl:choose>
+                                       </xsl:for-each>
+                               </xsl:for-each>
+                       </xsl:for-each>
+               </wdef:property>
+       </xsl:template>
+       
+       <!-- Generate work subtitles -->
+       <xsl:template name="generate-work-P1680">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <wdef:property>
+                       <xsl:variable name="property-id">
+                               <xsl:call-template name="get-property-id">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="pid" select="'P1680'" />
+                               </xsl:call-template>
+                       </xsl:variable>
+                       <xsl:attribute name="wdef:pid">P1680</xsl:attribute>
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$property-id" />
+                       </xsl:attribute>
+                       
+                       <xsl:for-each select="$strings-fix-doc">
+                               <xsl:for-each select="key('fix-by-id', $record-id)">
+                                       <xsl:for-each select="fix[@type='subtitle']">
+                                               <wdef:value>
+                                                       <xsl:variable name="value-id" select="concat($property-id, '-V', count(preceding-sibling::fix[type='title']) + 1)" />
+                                                       <xsl:attribute name="wdef:id">
+                                                               <xsl:value-of select="$value-id" />
+                                                       </xsl:attribute>
+                                                       <wdef:translation>
+                                                               <xsl:attribute name="xml:lang">
+                                                                       <xsl:value-of select="@xml:lang" />
+                                                               </xsl:attribute>
+                                                               <xsl:value-of select="." />
+                                                       </wdef:translation>
+                                               </wdef:value>
+                                       </xsl:for-each>
+                               </xsl:for-each>
+                       </xsl:for-each>
+               </wdef:property>
+       </xsl:template>
+       
+       <!-- Generate P1823 (identifiant BAnQ d’ouvrage) -->
+       <xsl:template name="generate-work-P1823">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="marc-856u" select="marc:datafield[@tag='856']/marc:subfield[@code='u']" />
+               
+               <xsl:if test="substring($marc-856u, 1, 41) = 'http://collections.banq.qc.ca/ark:/52327/' or substring($marc-856u, 1, 42) = 'https://collections.banq.qc.ca/ark:/52327/'">
+                       <xsl:variable name="P1823">
+                               <xsl:call-template name="substring-after-last">
+                                       <xsl:with-param name="string" select="$marc-856u" />
+                                       <xsl:with-param name="delimiter">/</xsl:with-param>
+                               </xsl:call-template>
+                       </xsl:variable>
+                       
+                       <xsl:if test="number($P1823) = $P1823">
+                               <wdef:property>
+                                       <xsl:variable name="property-id">
+                                               <xsl:call-template name="get-property-id">
+                                                       <xsl:with-param name="element-id" select="$element-id" />
+                                                       <xsl:with-param name="pid" select="'P1823'" />
+                                               </xsl:call-template>
+                                       </xsl:variable>
+                                       <xsl:attribute name="wdef:pid">P1823</xsl:attribute>
+                                       <xsl:attribute name="wdef:id">
+                                               <xsl:value-of select="$property-id" />
+                                       </xsl:attribute>
+                                       
+                                       <wdef:value>
+                                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$value-id" />
+                                               </xsl:attribute>
+                                               <wdef:literal>
+                                                       <xsl:value-of select="$P1823" />
+                                               </wdef:literal>
+                                       </wdef:value>
+                               </wdef:property>
+                       </xsl:if>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate P19 (lieu de naissance) -->
+       <xsl:template name="generate-P19">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="place-370a" select="marc:datafield[@tag='370']/marc:subfield[@code='a']" />
+               
+               <xsl:if test="$place-370a != ''">
+                       <xsl:variable name="place-qid">
+                               <xsl:for-each select="$places-matches-doc">
+                                       <xsl:value-of select="key('qid-from-place', $place-370a)/@qid" />
+                               </xsl:for-each>
+                       </xsl:variable>
+                       
+                       <xsl:choose>
+                               <xsl:when test="$place-370a != ''">
+                                       <wdef:property>
+                                               <xsl:variable name="property-id">
+                                                       <xsl:call-template name="get-property-id">
+                                                               <xsl:with-param name="element-id" select="$element-id" />
+                                                               <xsl:with-param name="pid" select="'P19'" />
+                                                       </xsl:call-template>
+                                               </xsl:variable>
+                                               <xsl:attribute name="wdef:pid">P19</xsl:attribute>
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$property-id" />
+                                               </xsl:attribute>
+                                               
+                                               <wdef:value>
+                                                       <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                                       <xsl:attribute name="wdef:id">
+                                                               <xsl:value-of select="$value-id" />
+                                                       </xsl:attribute>
+                                                       
+                                                       <wdef:ref-element>
+                                                               <xsl:value-of select="$place-qid" />
+                                                       </wdef:ref-element>
+                                               </wdef:value>
+                                       </wdef:property>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:message terminate="yes">
+                                               <xsl:value-of select="$record-id" />
+                                               <xsl:text> : pas d’équivalent répertorié pour le lieu suivant : « </xsl:text>
+                                               <xsl:value-of select="$place-370a" />
+                                               <xsl:text> »</xsl:text>
+                                       </xsl:message>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate P20 (lieu de mort) -->
+       <xsl:template name="generate-P20">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="place-370b" select="marc:datafield[@tag='370']/marc:subfield[@code='b']" />
+               
+               <xsl:if test="$place-370b != ''">
+                       <xsl:variable name="place-qid">
+                               <xsl:for-each select="$places-matches-doc">
+                                       <xsl:value-of select="key('qid-from-place', $place-370b)/@qid" />
+                               </xsl:for-each>
+                       </xsl:variable>
+                       
+                       <xsl:choose>
+                               <xsl:when test="$place-370b != ''">
+                                       <wdef:property>
+                                               <xsl:variable name="property-id">
+                                                       <xsl:call-template name="get-property-id">
+                                                               <xsl:with-param name="element-id" select="$element-id" />
+                                                               <xsl:with-param name="pid" select="'P20'" />
+                                                       </xsl:call-template>
+                                               </xsl:variable>
+                                               <xsl:attribute name="wdef:pid">P20</xsl:attribute>
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$property-id" />
+                                               </xsl:attribute>
+                                               
+                                               <wdef:value>
+                                                       <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                                       <xsl:attribute name="wdef:id">
+                                                               <xsl:value-of select="$value-id" />
+                                                       </xsl:attribute>
+                                                       
+                                                       <wdef:ref-element>
+                                                               <xsl:value-of select="$place-qid" />
+                                                       </wdef:ref-element>
+                                               </wdef:value>
+                                       </wdef:property>
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:message terminate="yes">
+                                               <xsl:value-of select="$record-id" />
+                                               <xsl:text> : pas d’équivalent répertorié pour le lieu suivant : « </xsl:text>
+                                               <xsl:value-of select="$place-370b" />
+                                               <xsl:text> »</xsl:text>
+                                       </xsl:message>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate P106 (occupation) -->
+       <xsl:template name="generate-P106">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="marc-374a" select="marc:datafield[@tag='374']/marc:subfield[@code='a']" />
+               <xsl:variable name="occupations-qids" select="$occupations-matches-doc/matches/match[. = $marc-374a]" />
+               
+               <!-- Browse values deduplicated, if any -->
+               <xsl:if test="$occupations-qids/@qid != ''">
+                       <wdef:property>
+                               <xsl:variable name="property-id">
+                                       <xsl:call-template name="get-property-id">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="pid" select="'P106'" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:attribute name="wdef:pid">P106</xsl:attribute>
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$property-id" />
+                               </xsl:attribute>
+                               
+                               <xsl:for-each select="$occupations-qids">
+                                       <xsl:if test="generate-id($occupations-qids[@qid][1]) = generate-id($occupations-qids)">
+                                               <wdef:value>
+                                                       <xsl:variable name="value-id" select="concat($property-id, '-V', generate-id($occupations-qids))" />
+                                                       <xsl:attribute name="wdef:id">
+                                                               <xsl:value-of select="$value-id" />
+                                                       </xsl:attribute>
+                                                       
+                                                       <wdef:ref-element>
+                                                               <xsl:value-of select="@qid" />
+                                                       </wdef:ref-element>
+                                               </wdef:value>
+                                       </xsl:if>
+                               </xsl:for-each>
+                       </wdef:property>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate ISNI property-->
+       <xsl:template name="generate-P213">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:if test="marc:datafield[@tag='024' and marc:subfield[@code='2'] = 'isni' and marc:subfield[@code='a']]">
+                       <wdef:property>
+                               <xsl:variable name="property-id">
+                                       <xsl:call-template name="get-property-id">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="pid" select="'P213'" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:attribute name="wdef:pid">P213</xsl:attribute>
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$property-id" />
+                               </xsl:attribute>
+                               
+                               <wdef:value>
+                                       <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                       <xsl:attribute name="wdef:id">
+                                               <xsl:value-of select="$value-id" />
+                                       </xsl:attribute>
+                                       
+                                       <wdef:literal>
+                                               <xsl:value-of select="marc:datafield[@tag='024' and marc:subfield[@code='2'] = 'isni']/marc:subfield[@code='a']" />
+                                       </wdef:literal>
+                               </wdef:value>
+                       </wdef:property>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate P244 (identifiant Bibliothèque du Congrès) -->
+       <xsl:template name="generate-P244">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:if test="marc:datafield[@tag='700' and marc:subfield[@code='0']]">
+                       <xsl:variable name="loc-id">
+                               <xsl:value-of select="substring-after(translate(marc:datafield[@tag='700']/marc:subfield[@code='0'], ' ', ''), ')')" />
+                       </xsl:variable>
+                       
+                       <wdef:property>
+                               <xsl:variable name="property-id">
+                                       <xsl:call-template name="get-property-id">
+                                               <xsl:with-param name="element-id" select="$element-id" />
+                                               <xsl:with-param name="pid" select="'P244'" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:attribute name="wdef:pid">P244</xsl:attribute>
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$property-id" />
+                               </xsl:attribute>
+                               
+                               <wdef:value>
+                                       <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                       <xsl:attribute name="wdef:id">
+                                               <xsl:value-of select="$value-id" />
+                                       </xsl:attribute>
+                                       
+                                       <wdef:literal>
+                                               <xsl:value-of select="$loc-id" />
+                                       </wdef:literal>
+                               </wdef:value>
+                       </wdef:property>
+               </xsl:if>
+       </xsl:template>
+       
+       <!-- Generate P569 (date de naissance) -->
+       <xsl:template name="generate-P569">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="birth-year">
+                       <xsl:call-template name="get-birth-year">
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+               </xsl:variable>
+               
+               <xsl:choose>
+                       <xsl:when test="$birth-year != ''">
+                               <wdef:property>
+                                       <xsl:variable name="property-id">
+                                               <xsl:call-template name="get-property-id">
+                                                       <xsl:with-param name="element-id" select="$element-id" />
+                                                       <xsl:with-param name="pid" select="'P569'" />
+                                               </xsl:call-template>
+                                       </xsl:variable>
+                                       <xsl:attribute name="wdef:pid">P569</xsl:attribute>
+                                       <xsl:attribute name="wdef:id">
+                                               <xsl:value-of select="$property-id" />
+                                       </xsl:attribute>
+                                       
+                                       <wdef:value>
+                                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$value-id" />
+                                               </xsl:attribute>
+                                               
+                                               <wdef:time>
+                                                       <xsl:attribute name="wdef:precision">9</xsl:attribute>
+                                                       <xsl:attribute name="wdef:calendar">gregorian</xsl:attribute>
+                                                       <xsl:text>+</xsl:text>
+                                                       <xsl:value-of select="$birth-year" />
+                                                       <xsl:text>-00-00T00:00:00Z</xsl:text>
+                                               </wdef:time>
+                                       </wdef:value>
+                               </wdef:property>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="$record-id" />
+                                       <xsl:text> : pas d’année de naissance extraite.</xsl:text>
+                               </xsl:message>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <!-- Generate P570 (date de mort) -->
+       <xsl:template name="generate-P570">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="death-date">
+                       <xsl:call-template name="get-death-date">
+                               <xsl:with-param name="record-id" select="$record-id" />
+                       </xsl:call-template>
+               </xsl:variable>
+               
+               <xsl:choose>
+                       <xsl:when test="$death-date != ''">
+                               <xsl:variable name="precision">
+                                       <xsl:choose>
+                                               <xsl:when test="string-length($death-date) = 4">9</xsl:when>
+                                               <xsl:when test="string-length($death-date) = 7">10</xsl:when>
+                                               <xsl:when test="string-length($death-date) = 10">11</xsl:when>
+                                               <xsl:otherwise>
+                                                       <xsl:message terminate="yes">
+                                                               <xsl:value-of select="$record-id" />
+                                                               <xsl:text> : date de mort extraite invalide.</xsl:text>
+                                                       </xsl:message>
+                                               </xsl:otherwise>
+                                       </xsl:choose>
+                               </xsl:variable>
+                               
+                               <xsl:variable name="full-date">
+                                       <xsl:choose>
+                                               <xsl:when test="$precision = 9">
+                                                       <xsl:value-of select="concat('+', $death-date, '-00-00T00:00:00Z')" />
+                                               </xsl:when>
+                                               <xsl:when test="$precision = 10">
+                                                       <xsl:value-of select="concat('+', $death-date, '-00T00:00:00Z')" />
+                                               </xsl:when>
+                                               <xsl:when test="$precision = 11">
+                                                       <xsl:value-of select="concat('+', $death-date, 'T00:00:00Z')" />
+                                               </xsl:when>
+                                       </xsl:choose>
+                               </xsl:variable>
+                               
+                               <wdef:property>
+                                       <xsl:variable name="property-id">
+                                               <xsl:call-template name="get-property-id">
+                                                       <xsl:with-param name="element-id" select="$element-id" />
+                                                       <xsl:with-param name="pid" select="'P570'" />
+                                               </xsl:call-template>
+                                       </xsl:variable>
+                                       <xsl:attribute name="wdef:pid">P570</xsl:attribute>
+                                       <xsl:attribute name="wdef:id">
+                                               <xsl:value-of select="$property-id" />
+                                       </xsl:attribute>
+                                       
+                                       <wdef:value>
+                                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                                               <xsl:attribute name="wdef:id">
+                                                       <xsl:value-of select="$value-id" />
+                                               </xsl:attribute>
+                                               
+                                               <wdef:time>
+                                                       <xsl:attribute name="wdef:precision"><xsl:value-of select="$precision" /></xsl:attribute>
+                                                       <xsl:attribute name="wdef:calendar">gregorian</xsl:attribute>
+                                                       <xsl:value-of select="$full-date" />
+                                               </wdef:time>
+                                       </wdef:value>
+                               </wdef:property>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="$record-id" />
+                                       <xsl:text> : pas de date de mort extraite.</xsl:text>
+                               </xsl:message>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <!-- Generate P3280 (identifiant BAnQ d’autorité) -->
+       <xsl:template name="generate-P3280">
+               <xsl:param name="element-id" />
+               <xsl:param name="record-id" />
+               
+               <wdef:property>
+                       <xsl:variable name="property-id">
+                               <xsl:call-template name="get-property-id">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="pid" select="'P3280'" />
+                               </xsl:call-template>
+                       </xsl:variable>
+                       <xsl:attribute name="wdef:pid">P3280</xsl:attribute>
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$property-id" />
+                       </xsl:attribute>
+                       
+                       <wdef:value>
+                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$value-id" />
+                               </xsl:attribute>
+                               
+                               <wdef:literal>
+                                       <xsl:value-of select="$record-id" />
+                               </wdef:literal>
+                       </wdef:value>
+               </wdef:property>
+       </xsl:template>
+       
+       <!-- Generate P6379 (identifiant BAnQ d’autorité) -->
+       <xsl:template name="generate-P6379">
+               <xsl:param name="element-id" />
+               
+               <wdef:property wdef:id="">
+                       <xsl:variable name="property-id">
+                               <xsl:call-template name="get-property-id">
+                                       <xsl:with-param name="element-id" select="$element-id" />
+                                       <xsl:with-param name="pid" select="'P6379'" />
+                               </xsl:call-template>
+                       </xsl:variable>
+                       <xsl:attribute name="wdef:pid">P6379</xsl:attribute>
+                       <xsl:attribute name="wdef:id">
+                               <xsl:value-of select="$property-id" />
+                       </xsl:attribute>
+                       <wdef:value>
+                               <xsl:variable name="value-id" select="concat($property-id, '-V1')" />
+                               <xsl:attribute name="wdef:id">
+                                       <xsl:value-of select="$value-id" />
+                               </xsl:attribute>
+                               <wdef:ref-element>Q39628</wdef:ref-element>
+                       </wdef:value>
+               </wdef:property>
+       </xsl:template>
+       
+       
+       <xsl:template name="generate-corporate-labels">
+               <wdef:label>
+                       <xsl:attribute name="interface-lang">
+                               <xsl:value-of select="@xml:lang" />
+                       </xsl:attribute>
+                       <xsl:value-of select="marc:datafield[@tag='110']/marc:subfield[@code='a']" />
+               </wdef:label>
+       </xsl:template>
+       
+       <xsl:template name="generate-corporate-description">
+               <!-- TODO: Complete this -->
+               <wdef:description>
+                       <xsl:attribute name="interface-lang">
+                               <xsl:text>fr</xsl:text>
+                       </xsl:attribute>
+                       
+                       <xsl:text>personne morale (corporate)</xsl:text>
+               </wdef:description>
+       </xsl:template>
+       
+       
+       <xsl:template name="generate-meeting-labels">
+               <wdef:label>
+                       <xsl:attribute name="interface-lang">
+                               <xsl:value-of select="@xml:lang" />
+                       </xsl:attribute>
+                       <xsl:value-of select="marc:datafield[@tag='111']/marc:subfield[@code='a']" />
+               </wdef:label>
+       </xsl:template>
+       
+       <xsl:template name="generate-meeting-description">
+               <!-- TODO: Complete this -->
+               <wdef:description>
+                       <xsl:attribute name="interface-lang">
+                               <xsl:text>fr</xsl:text>
+                       </xsl:attribute>
+                       
+                       <xsl:text>personne morale (meeting)</xsl:text>
+               </wdef:description>
+       </xsl:template>
+       
+       <!-- Return qid for the role given as parameter. Returns empty string if
+            none found.
+       -->
+       <xsl:template name="role-qid">
+               <xsl:param name="role-name" />
+       
+               <xsl:for-each select="$roles-matches-doc">
+                       <xsl:value-of select="key('qid-from-role', $role-name)" />
+               </xsl:for-each>
+       </xsl:template>
+       
+       <!-- Generic tools -->
+       <xsl:template name="substring-after-last">
+               <xsl:param name="string" />
+               <xsl:param name="delimiter" />
+               
+               <xsl:choose>
+                       <xsl:when test="contains($string, $delimiter)">
+                               <xsl:call-template name="substring-after-last">
+                                       <xsl:with-param name="string" select="substring-after($string, $delimiter)" />
+                                       <xsl:with-param name="delimiter" select="$delimiter" />
+                               </xsl:call-template>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:value-of select="$string" />
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <!-- Return existing qid if any or provided id otherwise -->
+       <xsl:template name="get-element-id">
+               <xsl:param name="record-id" />
+               <xsl:param name="record-type" />
+               
+               <xsl:variable name="temp-element-id">
+                       <xsl:choose>
+                               <xsl:when test="$record-type = 'authority'">
+                                       <xsl:value-of select="concat('?E', $record-id, 'A')" />
+                               </xsl:when>
+                               <xsl:when test="$record-type = 'bibliographic'">
+                                       <xsl:value-of select="concat('?E', $record-id, 'B')" />
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:message terminate="yes">
+                                               <xsl:text>Type d’entrée inconnu : </xsl:text>
+                                               <xsl:value-of select="$record-type" />
+                                       </xsl:message>
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:variable>
+               
+               <xsl:for-each select="$records-matches-doc">
+                       <xsl:choose>
+                               <xsl:when test="normalize-space($records-matches-doc/matches/match[@id = $temp-element-id]/@qid) != ''">
+                                       <xsl:value-of select="normalize-space($records-matches-doc/matches/match[@id = $temp-element-id]/@qid)" />
+                               </xsl:when>
+                               <xsl:otherwise>
+                                       <xsl:value-of select="$temp-element-id" />
+                               </xsl:otherwise>
+                       </xsl:choose>
+               </xsl:for-each>
+       </xsl:template>
+       
+       <!-- Return property id -->
+       <xsl:template name="get-property-id">
+               <xsl:param name="element-id" />
+               <xsl:param name="pid" />
+               
+               <xsl:if test="substring($element-id, 1, 1) != '?'">
+                       <xsl:text>?</xsl:text>
+               </xsl:if>
+               <xsl:value-of select="concat($element-id, '-', $pid)" />
+       </xsl:template>
+       
+       <!-- Get publication date (YYYY, YYYY-MM or YYYY-MM-DD format only) or empty string -->
+       <xsl:template name="get-publication-date">
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="date-extracted">
+                       <xsl:choose>
+                               <xsl:when test="substring(marc:controlfield[@tag='008'], 7, 1) = 'e'">
+                                       <xsl:value-of select="substring(marc:controlfield[@tag='008'], 8, 8)" />
+                               </xsl:when>
+                               <!-- NOTE: "m" flag is ignored as we need a single date in Wikidata -->
+                               <xsl:when test="substring(marc:controlfield[@tag='008'], 7, 1) = 's'">
+                                       <xsl:value-of select="substring(marc:controlfield[@tag='008'], 8, 4)" />
+                               </xsl:when>
+                               <xsl:when test="substring(marc:controlfield[@tag='008'], 7, 1) = 't'">
+                                       <xsl:value-of select="substring(marc:controlfield[@tag='008'], 8, 4)" />
+                               </xsl:when>
+                       </xsl:choose>
+               </xsl:variable>
+               
+               <xsl:variable name="normalized-date">
+                       <xsl:value-of select="normalize-space($date-extracted)" />
+               </xsl:variable>
+               
+               <!-- Sanity check - YYYY, YYYYMM or YYYYMMDD only -->
+               <xsl:choose>
+                       <xsl:when test="string-length($normalized-date) = 0">
+                               <xsl:text></xsl:text>
+                       </xsl:when>
+                       <xsl:when test="string-length($normalized-date) = 4">
+                               <xsl:value-of select="$normalized-date" />
+                       </xsl:when>
+                       <xsl:when test="string-length($normalized-date) = 6">
+                               <xsl:value-of select="concat(substring($normalized-date, 1, 4), '-', substring($normalized-date, 5, 2))" />
+                       </xsl:when>
+                       <xsl:when test="string-length($normalized-date) = 8">
+                               <xsl:value-of select="concat(substring($normalized-date, 1, 4), '-', substring($normalized-date, 5, 2), '-', substring($normalized-date, 7, 2))" />
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="yes">
+                                       <xsl:value-of select="$record-id" />
+                                       <xsl:text> : date de publication extraite invalide (</xsl:text>
+                                       <xsl:value-of select="$date-extracted" />
+                                       <xsl:text>)</xsl:text>
+                               </xsl:message>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <!-- Get publication date (YYYY format only) or empty string -->
+       <xsl:template name="get-publishing-year">
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="record" select="key('bibliographic-from-001', $record-id)" />
+               
+               <xsl:variable name="date-extracted">
+                       <xsl:choose>
+                               <xsl:when test="substring($record/marc:controlfield[@tag='008'], 7, 1) = 'e'">
+                                       <xsl:value-of select="substring($record/marc:controlfield[@tag='008'], 8, 4)" />
+                               </xsl:when>
+                               <!-- NOTE: "m" flag is ignored as we need a single date in Wikidata -->
+                               <xsl:when test="substring($record/marc:controlfield[@tag='008'], 7, 1) = 's'">
+                                       <xsl:value-of select="substring($record/marc:controlfield[@tag='008'], 8, 4)" />
+                               </xsl:when>
+                               <xsl:when test="substring($record/marc:controlfield[@tag='008'], 7, 1) = 't'">
+                                       <xsl:value-of select="substring($record/marc:controlfield[@tag='008'], 8, 4)" />
+                               </xsl:when>
+                       </xsl:choose>
+               </xsl:variable>
+               
+               <xsl:variable name="normalized-date">
+                       <xsl:value-of select="normalize-space($date-extracted)" />
+               </xsl:variable>
+               
+               <!-- Sanity check - YYYY only -->
+               <xsl:choose>
+                       <xsl:when test="string-length($normalized-date) = 0">
+                               <xsl:text></xsl:text>
+                       </xsl:when>
+                       <xsl:when test="string-length($normalized-date) = 4">
+                               <xsl:value-of select="$normalized-date" />
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="yes">
+                                       <xsl:value-of select="$record-id" />
+                                       <xsl:text> : année de publication extraite invalide (</xsl:text>
+                                       <xsl:value-of select="$date-extracted" />
+                                       <xsl:text>)</xsl:text>
+                               </xsl:message>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <!-- Return person display name -->
+       <xsl:template name="get-person-name">
+               <xsl:param name="record-id" />
+       
+               <xsl:variable name="record" select="key('person-authority-from-001', $record-id)" />
+               <xsl:variable name="first-name">
+                       <xsl:for-each select="$record">
+                               <xsl:call-template name="person-first-name" />
+                       </xsl:for-each>
+               </xsl:variable>
+               <xsl:variable name="last-name">
+                       <xsl:for-each select="$record">
+                               <xsl:call-template name="person-last-name" />
+                       </xsl:for-each>
+               </xsl:variable>
+               <xsl:variable name="nickname">
+                       <xsl:for-each select="$record">
+                               <xsl:call-template name="person-nickname" />
+                       </xsl:for-each>
+               </xsl:variable>
+               
+               <xsl:choose>
+                       <xsl:when test="$first-name != '' and $last-name != ''">
+                               <xsl:value-of select="concat($first-name, ' ', $last-name)" />
+                       </xsl:when>
+                       <xsl:when test="$first-name = '' and $last-name != ''">
+                               <xsl:value-of select="$last-name" />
+                       </xsl:when>
+                       <xsl:when test="$first-name != '' and $last-name = ''">
+                               <xsl:value-of select="$first-name" />
+                       </xsl:when>
+                       <xsl:when test="$nickname != ''">
+                               <xsl:value-of select="concat($first-name, ' ', $last-name)" />
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="$record-id" />
+                                       <xsl:text> : impossible de déterminer le prénom/nom ou le pseudonyme de cette personne.</xsl:text>
+                               </xsl:message>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <!-- Return birth date of the person with given record-id (YYYY, YYYY-MM or YYYY-MM-DD format or empty string if none) -->
+       <xsl:template name="get-birth-year">
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="record" select="key('person-authority-from-001', $record-id)" />
+               <xsl:variable name="date-046" select="$record[1]/marc:datafield[@tag='046']/marc:subfield[@code='f']" />
+               <xsl:variable name="date-100" select="$record[1]/marc:datafield[@tag='100']/marc:subfield[@code='d']" />
+               <xsl:variable name="date-400" select="$record[1]/marc:datafield[@tag='400']/marc:subfield[@code='d']" />
+               
+               <xsl:choose>
+                       <xsl:when test="$date-046 != '' and translate($date-046, '0123456789-', '') = '' and translate(substring($date-046, 1, 4), '0123456789', '') = ''">
+                               <xsl:value-of select="substring($date-046, 1, 4)" />
+                       </xsl:when>
+                       <xsl:when test="$date-100 != '' and (string-length($date-100) = 4 or string-length($date-100) = 9 or (string-length($date-100) = 5 and substring($date-100, 5, 1) = '-')) and translate($date-100, '0123456789-', '') = '' and translate(substring($date-100, 1, 4), '0123456789', '') = ''">
+                               <xsl:value-of select="substring($date-100, 1, 4)" />
+                       </xsl:when>
+                       <xsl:when test="$date-400 != '' and (string-length($date-400) = 4 or string-length($date-400) = 9 or (string-length($date-400) = 5 and substring($date-400, 5, 1) = '-')) and translate($date-400, '0123456789-', '') = '' and translate(substring($date-400, 1, 4), '0123456789', '') = ''">
+                               <xsl:value-of select="substring($date-400, 1, 4)" />
+                       </xsl:when>
+               </xsl:choose>
+       </xsl:template>
+       
+       <!-- Return death date of a person (YYYY, YYYY-MM or YYYY-MM-DD format or empty string if none) -->
+       <xsl:template name="get-death-date">
+               <xsl:param name="record-id" />
+               
+               <xsl:variable name="record" select="key('person-authority-from-001', $record-id)" />
+               <xsl:variable name="date-046" select="$record[1]/marc:datafield[@tag='046']/marc:subfield[@code='g']" />
+               <xsl:variable name="date-100" select="$record[1]/marc:datafield[@tag='100']/marc:subfield[@code='d']" />
+               <xsl:variable name="date-400" select="$record[1]/marc:datafield[@tag='400']/marc:subfield[@code='d']" />
+               
+               <xsl:choose>
+                       <!-- In 046, XXXX year format -->
+                       <xsl:when test="string-length($date-046) = 4 and translate($date-046, '0123456789', '') = ''">
+                               <xsl:value-of select="$date-046" />
+                       </xsl:when>
+                       <!-- In 046, XXXX-XX format -->
+                       <xsl:when test="string-length($date-046) = 7 and translate($date-046, '0123456789-', '') = '' and substring($date-046, 5, 1) = '-'">
+                               <xsl:value-of select="$date-046" />
+                       </xsl:when>
+                       <!-- In 046, XXXX-XX-XX format -->
+                       <xsl:when test="string-length($date-046) = 10 and translate($date-046, '0123456789-', '') = '' and substring($date-046, 5, 1) = '-' and substring($date-046, 8, 1) = '-'">
+                               <xsl:value-of select="$date-046" />
+                       </xsl:when>
+                       <!-- In 046, XXXXXX format -->
+                       <xsl:when test="string-length($date-046) = 6 and translate($date-046, '0123456789', '') = ''">
+                               <xsl:value-of select="concat(substring($date-046, 1, 4), '-', substring($date-046, 5, 2))" />
+                       </xsl:when>
+                       <!-- In 046, XXXXXXXX format -->
+                       <xsl:when test="string-length($date-046) = 8 and translate($date-046, '0123456789', '') = ''">
+                               <xsl:value-of select="concat(substring($date-046, 1, 4), '-', substring($date-046, 5, 2), '-', substring($date-046, 7, 2))" />
+                       </xsl:when>
+                       <!-- In 100, XXXX-XXXX years format -->
+                       <xsl:when test="$date-100 != '' and translate($date-100, '0123456789-', '') = '' and string-length($date-100) = 9 and substring($date-100, 5, 1) = '-'">
+                               <xsl:value-of select="substring($date-100, 6, 4)" />
+                       </xsl:when>
+                       <!-- In 100, -XXXX year format -->
+                       <xsl:when test="$date-100 != '' and translate($date-100, '0123456789-', '') = '' and string-length($date-100) = 5 and substring($date-100, 1, 1) = '-'">
+                               <xsl:value-of select="substring($date-100, 2, 4)" />
+                       </xsl:when>
+                       <!-- In 400, XXXX-XXXX years format -->
+                       <xsl:when test="$date-400 != '' and translate($date-400, '0123456789-', '') = '' and string-length($date-400) = 9 and substring($date-400, 5, 1) = '-'">
+                               <xsl:value-of select="substring($date-400, 6, 4)" />
+                       </xsl:when>
+                       <!-- In 400, -XXXX year format -->
+                       <xsl:when test="$date-400 != '' and translate($date-400, '0123456789-', '') = '' and string-length($date-400) = 5 and substring($date-400, 1, 1) = '-'">
+                               <xsl:value-of select="substring($date-400, 2, 4)" />
+                       </xsl:when>
+               </xsl:choose>
+       </xsl:template>
+       
+       
+       <!-- Return true if creator known birth/death dates are compatible with work publishing dates, false otherwise -->
+       <xsl:template name="check-person-to-publishing-date">
+               <xsl:param name="bibliographic-id" />
+               <xsl:param name="creator-id" />
+               
+               <xsl:variable name="bibliographic" select="key('bibliographic-from-001', $bibliographic-id)" />
+               <xsl:variable name="creator" select="key('person-authority-from-001', $creator-id)" />
+               
+               <xsl:choose>
+                       <xsl:when test="not($bibliographic)">
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="$bibliographic-id" />
+                                       <xsl:text> : impossible de trouver la notice bibliographique </xsl:text>
+                                       <xsl:value-of select="$bibliographic-id" />
+                               </xsl:message>
+                               <xsl:text>false</xsl:text>
+                       </xsl:when>
+                       <xsl:when test="not($creator)">
+                               <xsl:message terminate="no">
+                                       <xsl:value-of select="$bibliographic-id" />
+                                       <xsl:text> : impossible de trouver la notice d’autorité </xsl:text>
+                                       <xsl:value-of select="$creator-id" />
+                               </xsl:message>
+                               <xsl:text>false</xsl:text>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <!-- Both bibliographic and creator exists -->
+                               <xsl:variable name="publishing-year">
+                                       <xsl:call-template name="get-publishing-year">
+                                               <xsl:with-param name="record-id" select="$bibliographic-id" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:variable name="birth-year">
+                                       <xsl:call-template name="get-birth-year">
+                                               <xsl:with-param name="record-id" select="$creator-id" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               <xsl:variable name="death-date">
+                                       <xsl:call-template name="get-death-date">
+                                               <xsl:with-param name="record-id" select="$creator-id" />
+                                       </xsl:call-template>
+                               </xsl:variable>
+                               
+                               <xsl:choose>
+                                       <!-- Test creator is at least 15 at publication date -->
+                                       <xsl:when test="$birth-year != '' and (($publishing-year - $birth-year) &lt;= 15)">
+                                               <xsl:message terminate="no">
+                                                       <xsl:value-of select="$bibliographic-id" />
+                                                       <xsl:text> : le créateur </xsl:text>
+                                                       <xsl:value-of select="$creator-id" />
+                                                       <xsl:text> (</xsl:text>
+                                                       <xsl:value-of select="$birth-year" />
+                                                       <xsl:text>-</xsl:text>
+                                                       <xsl:value-of select="substring($death-date, 1, 4)" />
+                                                       <xsl:text>) a moins de 15 ans au moment de la publication de l’œuvre (</xsl:text>
+                                                       <xsl:value-of select="$publishing-year" />
+                                                       <xsl:text>).</xsl:text>
+                                               </xsl:message>
+                                               <xsl:text>false</xsl:text>
+                                       </xsl:when>
+                                       <!-- Test creator is alive or dead since less than two years -->
+                                       <xsl:when test="$death-date != '' and (($publishing-year - substring($death-date, 1, 4)) &gt; 2)">
+                                               <xsl:message terminate="no">
+                                                       <xsl:value-of select="$bibliographic-id" />
+                                                       <xsl:text> : le créateur </xsl:text>
+                                                       <xsl:value-of select="$creator-id" />
+                                                       <xsl:text> (</xsl:text>
+                                                       <xsl:value-of select="$birth-year" />
+                                                       <xsl:text>-</xsl:text>
+                                                       <xsl:value-of select="substring($death-date, 1, 4)" />
+                                                       <xsl:text>) est mort depuis plus de 2 ans au moment de la publication de l’œuvre (</xsl:text>
+                                                       <xsl:value-of select="$publishing-year" />
+                                                       <xsl:text>).</xsl:text>
+                                               </xsl:message>
+                                               <xsl:text>false</xsl:text>
+                                       </xsl:when>
+                                       <xsl:otherwise>
+                                               <xsl:text>true</xsl:text>
+                                       </xsl:otherwise>
+                               </xsl:choose>
+                       </xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
+       
+       <xsl:template name="generate-work-creators-string">
+               <xsl:param name="bibliographic-id" />
+               
+               <xsl:variable name="bibliographic" select="key('bibliographic-from-001', $bibliographic-id)" />
+               
+               <xsl:for-each select="$bibliographic[1]">
+                       <!-- Only one "100" per entry -->
+                       <xsl:variable name="creator-person-reference" select="marc:datafield[@tag = '100'][1]" />
+                       <xsl:variable name="creator-person-key">
+                               <xsl:for-each select="$creator-person-reference">
+                                       <xsl:value-of select="concat(marc:subfield[@code='a'], marc:subfield[@code='b'], marc:subfield[@code='c'], marc:subfield[@code='d'], marc:subfield[@code='q'])" />
+                               </xsl:for-each>
+                       </xsl:variable>
+                       <xsl:variable name="creator" select="key('person-authority-from-reference', $creator-person-key)" />
+                       <xsl:variable name="creator-id" select="$creator/marc:controlfield[@tag = '001']" />
+                       
+                       <xsl:call-template name="get-person-name">
+                               <xsl:with-param name="record-id" select="$creator-id" />
+                       </xsl:call-template>
+               </xsl:for-each>
+       </xsl:template>
+</xsl:stylesheet>
diff --git a/matches.xml b/matches.xml
new file mode 100644 (file)
index 0000000..0cc61e4
--- /dev/null
@@ -0,0 +1,2442 @@
+<?xml version="1.0" encoding="utf-8"?>
+<matches>
+       <match id="?E0000029774A" qid="Q89420985"/>
+       <match id="?E0000019072A" qid="Q2831138"/>
+       <match id="?E0000115628A" qid="Q55217747"/>
+       <match id="?E0000028108A" qid="Q16526866"/>
+       <match id="?E0000003663A" qid="Q3122107"/>
+       <match id="?E0000342392A" qid="Q2576172"/>
+       <match id="?E0000071981A" qid="Q3329595"/>
+       <match id="?E0000281270A" qid="Q3385880"/>
+       <match id="?E0000003805A" qid="Q860812"/>
+       <match id="?E0000008354A" qid="Q16039590"/>
+       <match id="?E0000105359A" qid="Q3561364"/>
+       <match id="?E0000063815A" qid="Q7651431"/>
+       <match id="?E0000280034A" qid="Q70105380"/>
+       <match id="?E0000005053A" qid="Q133861155"/>
+       <match id="?E0000672693A" qid="Q99588977"/>
+       <match id="?E0000279197A" qid="Q69350736"/>
+       <match id="?E0000332988A" qid="Q95689308"/>
+       <match id="?E0000008538A" qid="Q3383823"/>
+       <match id="?E0000289672A" qid="Q3370773"/>
+       <match id="?E0000313213A" qid="Q79405994"/>
+       <match id="?E0000012156A" qid="Q3086426"/>
+       <match id="?E0000007552A" qid="Q68591110"/>
+       <match id="?E0000681695A" qid="Q59608365"/>
+       <match id="?E0000285356A" qid="Q75017006"/>
+       <match id="?E0000274571A" qid="Q3034995"/>
+       <match id="?E0000315330A" qid="Q53567226"/>
+       <match id="?E0000048571A" qid="Q28920025"/>
+       <match id="?E0000296367A" qid="Q55218216"/>
+       <match id="?E0000080010A" qid="Q3436192"/>
+       <match id="?E0000101492A" qid="Q1969155"/>
+       <match id="?E0000469707A" qid="Q18921758"/>
+       <match id="?E0000461205A" qid="Q71039525"/>
+       <match id="?E0000300728A" qid="Q54257432"/>
+       <match id="?E0000429018A" qid="Q55725362"/>
+       <match id="?E0000325334A" qid="Q5233950"/>
+       <match id="?E0000423420A" qid="Q55724648"/>
+       <match id="?E0000124406A" qid="Q47450915"/>
+       <match id="?E0000126686A" qid="Q3022759"/>
+       <match id="?E0000018101A" qid="Q3426085"/>
+       <match id="?E0000388808A" qid="Q59641192"/>
+       <match id="?E0000019097A" qid="Q46512247"/>
+       <match id="?E0000006223A" qid="Q3048072"/>
+       <match id="?E0000017384A" qid="Q73557573"/>
+       <match id="?E0000043758A" qid="Q71329114"/>
+       <match id="?E0000002267A" qid="Q3438305"/>
+       <match id="?E0000010178A" qid="Q16635547"/>
+       <match id="?E0000016976A" qid="Q55219438"/>
+       <match id="?E0000033434A" qid="Q18222239"/>
+       <match id="?E0000114756A" qid="Q104742663"/>
+       <match id="?E0000138830A" qid="Q55218117"/>
+       <match id="?E0000342441A" qid="Q3087924"/>
+       <match id="?E0000042782A" qid="Q522964"/>
+       <match id="?E0000010251A" qid="Q5562031"/>
+       <match id="?E0000316021A" qid="Q65683787"/>
+       <match id="?E0000273109A" qid="Q55724057"/>
+       <match id="?E0000355768A" qid="Q95691007"/>
+       <match id="?E0000034085A" qid="Q55722689"/>
+       <match id="?E0000027696A" qid="Q51791276"/>
+       <match id="?E0000068448A" qid="Q5589"/>
+       <match id="?E0000024091A" qid="Q3159128"/>
+       <match id="?E0000487017A" qid="Q93913308"/>
+       <match id="?E0001550017A" qid="Q59704759"/>
+       <match id="?E0000026150A" qid="Q59645609"/>
+       <match id="?E0000122665A" qid="Q28105127"/>
+       <match id="?E0000026550A" qid="Q3173875"/>
+       <match id="?E0000147991A" qid="Q1435689"/>
+       <match id="?E0001297890A" qid="Q94600958"/>
+       <match id="?E0000118060A" qid="Q17630912"/>
+       <match id="?E0000387875A" qid="Q83809959"/>
+       <match id="?E0000315374A" qid="Q96963150"/>
+       <match id="?E0000098287A" qid="Q3183742"/>
+       <match id="?E0000315269A" qid="Q64631463"/>
+       <match id="?E0000011633A" qid="Q3197616"/>
+       <match id="?E0000009042A" qid="Q89685339"/>
+       <match id="?E0000100625A" qid="Q18924520"/>
+       <match id="?E0000060337A" qid="Q59756397"/>
+       <match id="?E0000386488A" qid="Q66688997"/>
+       <match id="?E0000083833A" qid="Q3498112"/>
+       <match id="?E0000028636A" qid="Q65088563"/>
+       <match id="?E0000086657A" qid="Q55770459"/>
+       <match id="?E0000121549A" qid="Q70898673"/>
+       <match id="?E0000021266A" qid="Q2975556"/>
+       <match id="?E0000805903A" qid="Q72332373"/>
+       <match id="?E0000289508A" qid="Q20657129"/>
+       <match id="?E0000318397A" qid="Q76218057"/>
+       <match id="?E0000147197A" qid="Q59615041"/>
+       <match id="?E0000298223A" qid="Q59761730"/>
+       <match id="?E0000028484A" qid="Q64959164"/>
+       <match id="?E0000337615A" qid="Q84081603"/>
+       <match id="?E0001649609A" qid="Q81216422"/>
+       <match id="?E0000378142A" qid="Q43136355"/>
+       <match id="?E0000430472A" qid="Q59621896"/>
+       <match id="?E0000064587A" qid="Q74548986"/>
+       <match id="?E0000019972A" qid="Q2980528"/>
+       <match id="?E0000285415A" qid="Q22005654"/>
+       <match id="?E0000025241A" qid="Q93299595"/>
+       <match id="?E0000060999A" qid="Q3179836"/>
+       <match id="?E0000343929A" qid="Q55724290"/>
+       <match id="?E0000008947A" qid="Q63584092"/>
+       <match id="?E0000029869A" qid="Q2835394"/>
+       <match id="?E0000357546A" qid="Q24262347"/>
+       <match id="?E0000118058A" qid="Q95691386"/>
+       <match id="?E0000022801A" qid="Q111668302"/>
+       <match id="?E0000005854A" qid="Q3421257"/>
+       <match id="?E0000332987A" qid="Q95410345"/>
+       <match id="?E0000035671A" qid="Q55723454"/>
+       <match id="?E0000069045A" qid="Q3433245"/>
+       <match id="?E0000002942A" qid="Q3106301"/>
+       <match id="?E0000082124A" qid="Q67298953"/>
+       <match id="?E0000337918A" qid="Q7563013"/>
+       <match id="?E0000022178A" qid="Q3440071"/>
+       <match id="?E0000459390A" qid="Q3427125"/>
+       <match id="?E0000017687A" qid="Q81208234"/>
+       <match id="?E0000337761A" qid="Q63315389"/>
+       <match id="?E0000034979A" qid="Q64825485"/>
+       <match id="?E0000084079A" qid="Q55219544"/>
+       <match id="?E0000414814A" qid="Q64584715"/>
+       <match id="?E0000035566A" qid="Q3270415"/>
+       <match id="?E0000018852A" qid="Q85095452"/>
+       <match id="?E0000035619A" qid="Q19802599"/>
+       <match id="?E0000033084A" qid="Q224865"/>
+       <match id="?E0000672999A" qid="Q24262343"/>
+       <match id="?E0000315443A" qid="Q59691172"/>
+       <match id="?E0000053354A" qid="Q16014867"/>
+       <match id="?E0000137142A" qid="Q95989886"/>
+       <match id="?E0000376240A" qid="Q99872982"/>
+       <match id="?E0000051761A" qid="Q64959668"/>
+       <match id="?E0000096356A" qid="Q50659514"/>
+       <match id="?E0000000324A" qid="Q23683386"/>
+       <match id="?E0000314906A" qid="Q80123368"/>
+       <match id="?E0000030012A" qid="Q65666023"/>
+       <match id="?E0000315359A" qid="Q81216007"/>
+       <match id="?E0000339450A" qid="Q55219333"/>
+       <match id="?E0000048687A" qid="Q64584822"/>
+       <match id="?E0000404043A" qid="Q137397082"/>
+       <match id="?E0000103761A" qid="Q89616921"/>
+       <match id="?E0000371687A" qid="Q3132489"/>
+       <match id="?E0000064685A" qid="Q60020469"/>
+       <match id="?E0000403737A" qid="Q315544"/>
+       <match id="?E0000084067A" qid="Q65563013"/>
+       <match id="?E0000029082A" qid="Q59756875"/>
+       <match id="?E0000315329A" qid="Q30726871"/>
+       <match id="?E0000387934A" qid="Q83493903"/>
+       <match id="?E0000072770A" qid="Q76843084"/>
+       <match id="?E0000315265A" qid="Q86101080"/>
+       <match id="?E0000071048A" qid="Q29523075"/>
+       <match id="?E0000315308A" qid="Q89423143"/>
+       <match id="?E0000344657A" qid="Q3051610"/>
+       <match id="?E0000374241A" qid="Q80694395"/>
+       <match id="?E0000023464A" qid="Q3385477"/>
+       <match id="?E0000043434A" qid="Q28722406"/>
+       <match id="?E0000316031A" qid="Q24932853"/>
+       <match id="?E0000028251A" qid="Q84495658"/>
+       <match id="?E0000071099A" qid="Q59762797"/>
+       <match id="?E0000115695A" qid="Q61820362"/>
+       <match id="?E0000030313A" qid="Q55724808"/>
+       <match id="?E0000026418A" qid="Q55218957"/>
+       <match id="?E0000064615A" qid="Q64597241"/>
+       <match id="?E0000114168A" qid="Q91026649"/>
+       <match id="?E0000005840A" qid="Q59693527"/>
+       <match id="?E0000344725A" qid="Q21289149"/>
+       <match id="?E0000298497A" qid="Q158099"/>
+       <match id="?E0000026020A" qid="Q3435618"/>
+       <match id="?E0000038746A" qid="Q27108234"/>
+       <match id="?E0000035830A" qid="Q75115129"/>
+       <match id="?E0000008970A" qid="Q93896528"/>
+       <match id="?E0000030290A" qid="Q59894291"/>
+       <match id="?E0000068333A" qid="Q59751009"/>
+       <match id="?E0000345688A" qid="Q3158994"/>
+       <match id="?E0000043385A" qid="Q55219202"/>
+       <match id="?E0000315364A" qid="Q75308079"/>
+       <match id="?E0000136540A" qid="Q133862266"/>
+       <match id="?E0000000920A" qid="Q90017141"/>
+       <match id="?E0000048119A" qid="Q89694907"/>
+       <match id="?E0000325943A" qid="Q89615464"/>
+       <match id="?E0000315540A" qid="Q55218412"/>
+       <match id="?E0000027571A" qid="Q55725233"/>
+       <match id="?E0000335715A" qid="Q133505715"/>
+       <match id="?E0000281025A" qid="Q94415434"/>
+       <match id="?E0000011151A" qid="Q2847305"/>
+       <match id="?E0000017198A" qid="Q89608922"/>
+       <match id="?E0000472498A" qid="Q55218743"/>
+       <match id="?E0000471734A" qid="Q108328133"/>
+       <match id="?E0000471793A" qid="Q3186065"/>
+       <match id="?E0000361046A" qid="Q79065122"/>
+       <match id="?E0000018884A" qid="Q134707480"/>
+       <match id="?E0000008918A" qid="Q3270720"/>
+       <match id="?E0000027356A" qid="Q3173479"/>
+       <match id="?E0000010135A" qid="Q79064215"/>
+       <match id="?E0000035756A" qid="Q19947753"/>
+       <match id="?E0000139077A" qid="Q116186148"/>
+       <match id="?E0000346480A" qid="Q81633821"/>
+       <match id="?E0000833733A" qid="Q93892178"/>
+       <match id="?E0000052888A" qid="Q80944079"/>
+       <match id="?E0000001704A" qid="Q64437514"/>
+       <match id="?E0000044953A" qid="Q64584723"/>
+       <match id="?E0000086277A" qid="Q71755303"/>
+       <match id="?E0000099117A" qid="Q64584638"/>
+       <match id="?E0000312676A" qid="Q96955316"/>
+       <match id="?E0000324282A" qid="Q3496841"/>
+       <match id="?E0000341905A" qid="Q89598745"/>
+       <match id="?E0000345596A" qid="Q88487630"/>
+       <match id="?E0000273886A" qid="Q75774527"/>
+       <match id="?E0000028085A" qid="Q65563009"/>
+       <match id="?E0000443360A" qid="Q3507353"/>
+       <match id="?E0000150737A" qid="Q133862413"/>
+       <match id="?E0000315390A" qid="Q111342959"/>
+       <match id="?E0000676887A" qid="Q77827365"/>
+       <match id="?E0000382181A" qid="Q64866305"/>
+       <match id="?E0000273885A" qid="Q55723500"/>
+       <match id="?E0000142780A" qid="Q52157337"/>
+       <match id="?E0000018816A" qid="Q52222575"/>
+       <match id="?E0000315381A" qid="Q133862402"/>
+       <match id="?E0000000978A" qid="Q89700650"/>
+       <match id="?E0000043871A" qid="Q55444848"/>
+       <match id="?E0001488106A" qid="Q2861981"/>
+       <match id="?E0000034457A" qid="Q64681975"/>
+       <match id="?E0000084048A" qid="Q72335220"/>
+       <match id="?E0000021116A" qid="Q55218952"/>
+       <match id="?E0000273254A" qid="Q79063205"/>
+       <match id="?E0000293887A" qid="Q114852975"/>
+       <match id="?E0000002824A" qid="Q326342"/>
+       <match id="?E0001197196A" qid="Q21555327"/>
+       <match id="?E0000315312A" qid="Q64789188"/>
+       <match id="?E0000054316A" qid="Q60752467"/>
+       <match id="?E0000027068A" qid="Q78343534"/>
+       <match id="?E0000081684A" qid="Q2831830"/>
+       <match id="?E0000000803A" qid="Q81327702"/>
+       <match id="?E0000434848A" qid="Q130833905"/>
+       <match id="?E0000110768A" qid="Q3015165"/>
+       <match id="?E0000003997A" qid="Q54782686"/>
+       <match id="?E0000316030A" qid="Q77256481"/>
+       <match id="?E0000374149A" qid="Q131688349"/>
+       <match id="?E0000026840A" qid="Q55218405"/>
+       <match id="?E0000137144A" qid="Q81434187"/>
+       <match id="?E0000054643A" qid="Q78363444"/>
+       <match id="?E0000374158A" qid="Q3297754"/>
+       <match id="?E0000003149A" qid="Q955432"/>
+       <match id="?E0000027465A" qid="Q80942972"/>
+       <match id="?E0000346973A" qid="Q3189837"/>
+       <match id="?E0000036164A" qid="Q309768"/>
+       <match id="?E0000392920A" qid="Q112509891"/>
+       <match id="?E0000378328A" qid="Q111342897"/>
+       <match id="?E0000484664A" qid="Q89610306"/>
+       <match id="?E0000025881A" qid="Q3168563"/>
+       <match id="?E0000484095A" qid="Q55725547"/>
+       <match id="?E0000333009A" qid="Q65727896"/>
+       <match id="?E0000296498A" qid="Q3099855"/>
+       <match id="?E0000390285A" qid="Q122347"/>
+       <match id="?E0000281240A" qid="Q63594195"/>
+       <match id="?E0000337920A" qid="Q58125755"/>
+       <match id="?E0000035380A" qid="Q3106522"/>
+       <match id="?E0000002874A" qid="Q737768"/>
+       <match id="?E0000094323A" qid="Q64682443"/>
+       <match id="?E0000461908A" qid="Q65923046"/>
+       <match id="?E0000008724A" qid="Q28607366"/>
+       <match id="?E0000344683A" qid="Q59650762"/>
+       <match id="?E0000129050A" qid="Q71884663"/>
+       <match id="?E0000287802A" qid="Q85110804"/>
+       <match id="?E0000003346A" qid="Q63922473"/>
+       <match id="?E0000344826A" qid="Q59252750"/>
+       <match id="?E0000471916A" qid="Q84495749"/>
+       <match id="?E0000315311A" qid="Q75311854"/>
+       <match id="?E0000006759A" qid="Q110643224"/>
+       <match id="?E0000020974A" qid="Q90855603"/>
+       <match id="?E0000002264A" qid="Q81936530"/>
+       <match id="?E0000138718A" qid="Q82609021"/>
+       <match id="?E0000314584A" qid="Q79052471"/>
+       <match id="?E0000417340A" qid="Q120646495"/>
+       <match id="?E0000139918A" qid="Q3263069"/>
+       <match id="?E0000472540A" qid="Q84081459"/>
+       <match id="?E0000342440A" qid="Q66606711"/>
+       <match id="?E0000449899A" qid="Q94461785"/>
+       <match id="?E0000473391A" qid="Q55723613"/>
+       <match id="?E0000060695A" qid="Q3262310"/>
+       <match id="?E0000151787A" qid="Q105069619"/>
+       <match id="?E0000443891A" qid="Q108824081"/>
+       <match id="?E0000032767A" qid="Q77829517"/>
+       <match id="?E0000403840A" qid="Q28542120"/>
+       <match id="?E0000323169A" qid="Q68594745"/>
+       <match id="?E0000141155A" qid="Q7341149"/>
+       <match id="?E0001136390A" qid="Q133505492"/>
+       <match id="?E0000081914A" qid="Q3431253"/>
+       <match id="?E0000018243A" qid="Q3434973"/>
+       <match id="?E0000346333A" qid="Q89616284"/>
+       <match id="?E0000073288A" qid="Q64994930"/>
+       <match id="?E0000020035A" qid="Q124986041"/>
+       <match id="?E0000053432A" qid="Q65685478"/>
+       <match id="?E0000293913A" qid="Q64962386"/>
+       <match id="?E0000017390A" qid="Q75115449"/>
+       <match id="?E0000830718A" qid="Q64866319"/>
+       <match id="?E0001183690A" qid="Q160149"/>
+       <match id="?E0000054949A" qid="Q5432"/>
+       <match id="?E0000079203A" qid="Q78087724"/>
+       <match id="?E0000029496A" qid="Q55724382"/>
+       <match id="?E0000438138A" qid="Q64584608"/>
+       <match id="?E0000362932A" qid="Q55724450"/>
+       <match id="?E0000337988A" qid="Q89043328"/>
+       <match id="?E0000064723A" qid="Q1406885"/>
+       <match id="?E0000035281A" qid="Q3261087"/>
+       <match id="?E0000294458A" qid="Q59829171"/>
+       <match id="?E0000293760A" qid="Q55217641"/>
+       <match id="?E0000034106A" qid="Q12884025"/>
+       <match id="?E0000100450A" qid="Q82616110"/>
+       <match id="?E0000337719A" qid="Q82081407"/>
+       <match id="?E0000074715A" qid="Q3237303"/>
+       <match id="?E0000315305A" qid="Q59668288"/>
+       <match id="?E0000020420A" qid="Q23071176"/>
+       <match id="?E0000689618A" qid="Q56033714"/>
+       <match id="?E0000031939A" qid="Q55218249"/>
+       <match id="?E0000020645A" qid="Q2831168"/>
+       <match id="?E0000026580A" qid="Q134707477"/>
+       <match id="?E0000081499A" qid="Q3179818"/>
+       <match id="?E0000083264A" qid="Q82575213"/>
+       <match id="?E0000472817A" qid="Q94157784"/>
+       <match id="?E0000352390A" qid="Q96958842"/>
+       <match id="?E0000333005A" qid="Q70464207"/>
+       <match id="?E0000836927A" qid="Q89478473"/>
+       <match id="?E0000007617A" qid="Q64826681"/>
+       <match id="?E0000095172A" qid="Q55218439"/>
+       <match id="?E0000484636A" qid="Q3575540"/>
+       <match id="?E0000313011A" qid="Q21946836"/>
+       <match id="?E0000100555A" qid="Q89477474"/>
+       <match id="?E0000426880A" qid="Q23028056"/>
+       <match id="?E0000028431A" qid="Q2978015"/>
+       <match id="?E0000273166A" qid="Q95411132"/>
+       <match id="?E0000000093A" qid="Q71754909"/>
+       <match id="?E0000378025A" qid="Q64918030"/>
+       <match id="?E0000346965A" qid="Q101580035"/>
+       <match id="?E0000687593A" qid="Q75029834"/>
+       <match id="?E0000112173A" qid="Q123808242"/>
+       <match id="?E0000095251A" qid="Q85959275"/>
+       <match id="?E0000054183A" qid="Q75326596"/>
+       <match id="?E0000070099A" qid="Q15986537"/>
+       <match id="?E0000275822A" qid="Q28824238"/>
+       <match id="?E0000028647A" qid="Q1694899"/>
+       <match id="?E0000403738A" qid="Q59647055"/>
+       <match id="?E0000034908A" qid="Q3092329"/>
+       <match id="?E0000410354A" qid="Q94884862"/>
+       <match id="?E0000003285A" qid="Q3439200"/>
+       <match id="?E0000404025A" qid="Q137108425"/>
+       <match id="?E0000387505A" qid="Q21094980"/>
+       <match id="?E0000390313A" qid="Q71068593"/>
+       <match id="?E0000012691A" qid="Q30162026"/>
+       <match id="?E0000346148A" qid="Q104704387"/>
+       <match id="?E0000132969A" qid="Q91026367"/>
+       <match id="?E0000014227A" qid="Q75313124"/>
+       <match id="?E0000437990A" qid="Q137107708"/>
+       <match id="?E0000142443A" qid="Q23415055"/>
+       <match id="?E0001606261A" qid="Q104674742"/>
+       <match id="?E0000449452A" qid="Q72334364"/>
+       <match id="?E0000322307A" qid="Q108680545"/>
+       <match id="?E0000099412A" qid="Q93750242"/>
+       <match id="?E0000022669A" qid="Q3159019"/>
+       <match id="?E0000074165A" qid="Q16266654"/>
+       <match id="?E0000015011A" qid="Q3370836"/>
+       <match id="?E0000682918A" qid="Q55218277"/>
+       <match id="?E0000416021A" qid="Q3311146"/>
+       <match id="?E0000299802A" qid="Q6212595"/>
+       <match id="?E0000315358A" qid="Q65563014"/>
+       <match id="?E0000394875A" qid="Q1876559"/>
+       <match id="?E0000145144A" qid="Q3387133"/>
+       <match id="?E0000023039A" qid="Q55649638"/>
+       <match id="?E0000024429A" qid="Q3089391"/>
+       <match id="?E0000472519A" qid="Q82570153"/>
+       <match id="?E0000410442A" qid="Q33186826"/>
+       <match id="?E0000022539A" qid="Q105371257"/>
+       <match id="?E0000339344A" qid="Q5128736"/>
+       <match id="?E0000122757A" qid="Q66626453"/>
+       <match id="?E0000339453A" qid="Q65553437"/>
+       <match id="?E0000133303A" qid="Q93894843"/>
+       <match id="?E0000031396A" qid="Q133705902"/>
+       <match id="?E0000339505A" qid="Q106785087"/>
+       <match id="?E0000057982A" qid="Q3161123"/>
+       <match id="?E0000270851A" qid="Q2976859"/>
+       <match id="?E0000314708A" qid="Q79064705"/>
+       <match id="?E0000150466A" qid="Q28973495"/>
+       <match id="?E0000470240A" qid="Q55218349"/>
+       <match id="?E0000011498A" qid="Q89422951"/>
+       <match id="?E0000677566A" qid="Q87275058"/>
+       <match id="?E0000484854A" qid="Q110636989"/>
+       <match id="?E0000108325A" qid="Q81935745"/>
+       <match id="?E0001128500A" qid="Q28974486"/>
+       <match id="?E0000682992A" qid="Q70127282"/>
+       <match id="?E0000315379A" qid="Q94770869"/>
+       <match id="?E0000380885A" qid="Q3199108"/>
+       <match id="?E0000351221A" qid="Q55218191"/>
+       <match id="?E0000029899A" qid="Q3069290"/>
+       <match id="?E0000063048A" qid="Q3370352"/>
+       <match id="?E0000403841A" qid="Q106293552"/>
+       <match id="?E0000034762A" qid="Q3379079"/>
+       <match id="?E0000670481A" qid="Q78361722"/>
+       <match id="?E0000083974A" qid="Q1286410"/>
+       <match id="?E0000318563A" qid="Q43688317"/>
+       <match id="?E0000033391A" qid="Q18187691"/>
+       <match id="?E0000017217A" qid="Q3168437"/>
+       <match id="?E0000390778A" qid="Q126908507"/>
+       <match id="?E0000020383A" qid="Q59704494"/>
+       <match id="?E0000037815A" qid="Q526198"/>
+       <match id="?E0000103556A" qid="Q40599"/>
+       <match id="?E0000004582A" qid="Q919256"/>
+       <match id="?E0000472633A" qid="Q55218787"/>
+       <match id="?E0000032900A" qid="Q3174472"/>
+       <match id="?E0000022018A" qid="Q100699925"/>
+       <match id="?E0000346118A" qid="Q75027363"/>
+       <match id="?E0000337565A" qid="Q106667206"/>
+       <match id="?E0000274684A" qid="Q65600474"/>
+       <match id="?E0000350816A" qid="Q63763292"/>
+       <match id="?E0000118313A" qid="Q94625194"/>
+       <match id="?E0000008717A" qid="Q55218221"/>
+       <match id="?E0000489729A" qid="Q111434390"/>
+       <match id="?E0000032197A" qid="Q3301318"/>
+       <match id="?E0000020416A" qid="Q55670306"/>
+       <match id="?E0001128900A" qid="Q91123916"/>
+       <match id="?E0000341648A" qid="Q106204939"/>
+       <match id="?E0000346976A" qid="Q85096966"/>
+       <match id="?E0000387501A" qid="Q92815185"/>
+       <match id="?E0000034874A" qid="Q108648289"/>
+       <match id="?E0000342942A" qid="Q19666002"/>
+       <match id="?E0000454501A" qid="Q89487206"/>
+       <match id="?E0000028572A" qid="Q3579969"/>
+       <match id="?E0000315343A" qid="Q59660634"/>
+       <match id="?E0000484679A" qid="Q7192452"/>
+       <match id="?E0000381042A" qid="Q77849180"/>
+       <match id="?E0000350740A" qid="Q90583265"/>
+       <match id="?E0000471843A" qid="Q41798864"/>
+       <match id="?E0000785558A" qid="Q67936624"/>
+       <match id="?E0000000090A" qid="Q634298"/>
+       <match id="?E0000035831A" qid="Q89606335"/>
+       <match id="?E0000341891A" qid="Q67130252"/>
+       <match id="?E0000321568A" qid="Q55218785"/>
+       <match id="?E0000487451A" qid="Q78364214"/>
+       <match id="?E0000137783A" qid="Q81939082"/>
+       <match id="?E0000344830A" qid="Q3084318"/>
+       <match id="?E0000469691A" qid="Q2038177"/>
+       <match id="?E0000116886A" qid="Q3011063"/>
+       <match id="?E0000323078A" qid="Q89147925"/>
+       <match id="?E0000039175A" qid="Q35548"/>
+       <match id="?E0000022594A" qid="Q741409"/>
+       <match id="?E0000335694A" qid="Q89294063"/>
+       <match id="?E0001557127A" qid="Q24930074"/>
+       <match id="?E0000141264A" qid="Q66606705"/>
+       <match id="?E0000448506A" qid="Q91264066"/>
+       <match id="?E0000847268A" qid="Q154340"/>
+       <match id="?E0000836871A" qid="Q75031188"/>
+       <match id="?E0000056496A" qid="Q657402"/>
+       <match id="?E0000005257A" qid="Q2391531"/>
+       <match id="?E0000099920A" qid="Q93448437"/>
+       <match id="?E0000080542A" qid="Q123867"/>
+       <match id="?E0000042779A" qid="Q90737202"/>
+       <match id="?E0000333011A" qid="Q80336926"/>
+       <match id="?E0000368946A" qid="Q3081612"/>
+       <match id="?E0000431627A" qid="Q136915704"/>
+       <match id="?E0000110674A" qid="Q3082685"/>
+       <match id="?E0000321826A" qid="Q59690132"/>
+       <match id="?E0000374173A" qid="Q59645564"/>
+       <match id="?E0000057979A" qid="Q26179683"/>
+       <match id="?E0000387649A" qid="Q55218867"/>
+       <match id="?E0000357549A" qid="Q67661180"/>
+       <match id="?E0000346374A" qid="Q55218184"/>
+       <match id="?E0000068465A" qid="Q64852807"/>
+       <match id="?E0000043982A" qid="Q108974076"/>
+       <match id="?E0000280806A" qid="Q108475326"/>
+       <match id="?E0000344736A" qid="Q3309068"/>
+       <match id="?E0000005877A" qid="Q732980"/>
+       <match id="?E0000470057A" qid="Q105106865"/>
+       <match id="?E0000341896A" qid="Q59661046"/>
+       <match id="?E0000316060A" qid="Q81634259"/>
+       <match id="?E0000837519A" qid="Q27088521"/>
+       <match id="?E0000023411A" qid="Q1980805"/>
+       <match id="?E0000316017A" qid="Q81930596"/>
+       <match id="?E0000143171A" qid="Q73690666"/>
+       <match id="?E0000021048A" qid="Q2364961"/>
+       <match id="?E0000805995A" qid="Q133646794"/>
+       <match id="?E0000273200A" qid="Q69998004"/>
+       <match id="?E0000066362A" qid="Q59645586"/>
+       <match id="?E0000149473A" qid="Q73555676"/>
+       <match id="?E0000027740A" qid="Q3121984"/>
+       <match id="?E0000098790A" qid="Q43127734"/>
+       <match id="?E0000059303A" qid="Q3080980"/>
+       <match id="?E0000325366A" qid="Q28921776"/>
+       <match id="?E0000001191A" qid="Q21457985"/>
+       <match id="?E0000338907A" qid="Q133624925"/>
+       <match id="?E0000070394A" qid="Q29559090"/>
+       <match id="?E0000021171A" qid="Q919420"/>
+       <match id="?E0000080858A" qid="Q5598"/>
+       <match id="?E0000045144A" qid="Q33477"/>
+       <match id="?E0000444688A" qid="Q3086529"/>
+       <match id="?E0000346911A" qid="Q6360638"/>
+       <match id="?E0000023563A" qid="Q561378"/>
+       <match id="?E0000015059A" qid="Q1276"/>
+       <match id="?E0000035168A" qid="Q85518566"/>
+       <match id="?E0000462279A" qid="Q73022249"/>
+       <match id="?E0000344747A" qid="Q109265896"/>
+       <match id="?E0000314862A" qid="Q107379242"/>
+       <match id="?E0000031979A" qid="Q3434342"/>
+       <match id="?E0000009944A" qid="Q107460459"/>
+       <match id="?E0000344761A" qid="Q3441564"/>
+       <match id="?E0000417339A" qid="Q59693637"/>
+       <match id="?E0000027114A" qid="Q2977679"/>
+       <match id="?E0000128669A" qid="Q3019106"/>
+       <match id="?E0000368117A" qid="Q3320724"/>
+       <match id="?E0000355642A" qid="Q131181384"/>
+       <match id="?E0000141260A" qid="Q69350986"/>
+       <match id="?E0000007680A" qid="Q3573473"/>
+       <match id="?E0000076948A" qid="Q5661378"/>
+       <match id="?E0000095236A" qid="Q112572291"/>
+       <match id="?E0000407227A" qid="Q131681796"/>
+       <match id="?E0000390781A" qid="Q56479334"/>
+       <match id="?E0000470779A" qid="Q21459556"/>
+       <match id="?E0000011574A" qid="Q3341018"/>
+       <match id="?E0000347086A" qid="Q55218532"/>
+       <match id="?E0000111346A" qid="Q2662673"/>
+       <match id="?E0000025677A" qid="Q2848052"/>
+       <match id="?E0000062528A" qid="Q55219212"/>
+       <match id="?E0000065208A" qid="Q55217953"/>
+       <match id="?E0000398259A" qid="Q125339269"/>
+       <match id="?E0000339058A" qid="Q1154214"/>
+       <match id="?E0000344847A" qid="Q85713435"/>
+       <match id="?E0000053803A" qid="Q316135"/>
+       <match id="?E0000446770A" qid="Q63383077"/>
+       <match id="?E0000486604A" qid="Q116786695"/>
+       <match id="?E0000346735A" qid="Q55364680"/>
+       <match id="?E0000070240A" qid="Q187765"/>
+       <match id="?E0000097653A" qid="Q113639047"/>
+       <match id="?E0000405267A" qid="Q3341128"/>
+       <match id="?E0000318099A" qid="Q3133063"/>
+       <match id="?E0000448282A" qid="Q3085062"/>
+       <match id="?E0000444696A" qid="Q2858159"/>
+       <match id="?E0000344848A" qid="Q3166565"/>
+       <match id="?E0000414805A" qid="Q93770090"/>
+       <match id="?E0000065246A" qid="Q72197269"/>
+       <match id="?E0000462040A" qid="Q77827690"/>
+       <match id="?E0000346793A" qid="Q3101713"/>
+       <match id="?E0000044192A" qid="Q3168775"/>
+       <match id="?E0000365481A" qid="Q29650165"/>
+       <match id="?E0000488555A" qid="Q86359632"/>
+       <match id="?E0000691793A" qid="Q92990474"/>
+       <match id="?E0000380887A" qid="Q506449"/>
+       <match id="?E0000324136A" qid="Q71068132"/>
+       <match id="?E0000013835A" qid="Q3479239"/>
+       <match id="?E0000081153A" qid="Q39931"/>
+       <match id="?E0000119175A" qid="Q69218"/>
+       <match id="?E0000110325A" qid="Q55219182"/>
+       <match id="?E0000346799A" qid="Q84082220"/>
+       <match id="?E0000340257A" qid="Q67317792"/>
+       <match id="?E0000018147A" qid="Q90813837"/>
+       <match id="?E0000422022A" qid="Q55524559"/>
+       <match id="?E0000346367A" qid="Q79115626"/>
+       <match id="?E0000342178A" qid="Q86525086"/>
+       <match id="?E0000337562A" qid="Q89480379"/>
+       <match id="?E0000139648A" qid="Q2847932"/>
+       <match id="?E0000427180A" qid="Q59775046"/>
+       <match id="?E0000012122A" qid="Q365304"/>
+       <match id="?E0000034307A" qid="Q64788420"/>
+       <match id="?E0000314385A" qid="Q89299355"/>
+       <match id="?E0000037354A" qid="Q24205878"/>
+       <match id="?E0000037722A" qid="Q1245202"/>
+       <match id="?E0000459342A" qid="Q537652"/>
+       <match id="?E0000810079A" qid="Q55218176"/>
+       <match id="?E0000324634A" qid="Q70008382"/>
+       <match id="?E0000047833A" qid="Q64811045"/>
+       <match id="?E0000469930A" qid="Q3084006"/>
+       <match id="?E0000052506A" qid="Q1876397"/>
+       <match id="?E0000405902A" qid="Q133762467"/>
+       <match id="?E0000339347A" qid="Q67175594"/>
+       <match id="?E0000072999A" qid="Q5535768"/>
+       <match id="?E0000031814A" qid="Q94427318"/>
+       <match id="?E0000098786A" qid="Q108680479"/>
+       <match id="?E0000339750A" qid="Q134438532"/>
+       <match id="?E0000360893A" qid="Q6111490"/>
+       <match id="?E0000269682A" qid="Q3166568"/>
+       <match id="?E0000061905A" qid="Q50983924"/>
+       <match id="?E0000025327A" qid="Q124253755"/>
+       <match id="?E0000063356A" qid="Q320313"/>
+       <match id="?E0000026300A" qid="Q59597214"/>
+       <match id="?E0000052703A" qid="Q464011"/>
+       <match id="?E0000000121A" qid="Q94657731"/>
+       <match id="?E0000136120A" qid="Q79064456"/>
+       <match id="?E0000118567A" qid="Q3261582"/>
+       <match id="?E0000134502A" qid="Q65600430"/>
+       <match id="?E0000341675A" qid="Q59636185"/>
+       <match id="?E0000376165A" qid="Q64852809"/>
+       <match id="?E0000130161A" qid="Q3289525"/>
+       <match id="?E0000374047A" qid="Q133761696"/>
+       <match id="?E0000865760A" qid="Q19301147"/>
+       <match id="?E0000068763A" qid="Q872832"/>
+       <match id="?E0000133365A" qid="Q95076309"/>
+       <match id="?E0000022197A" qid="Q3376611"/>
+       <match id="?E0000037951A" qid="Q65036968"/>
+       <match id="?E0000032826A" qid="Q3426820"/>
+       <match id="?E0000096398A" qid="Q55219428"/>
+       <match id="?E0000380886A" qid="Q21546270"/>
+       <match id="?E0000145254A" qid="Q3574230"/>
+       <match id="?E0000345839A" qid="Q92955574"/>
+       <match id="?E0000403679A" qid="Q78358270"/>
+       <match id="?E0000820548A" qid="Q64584591"/>
+       <match id="?E0000003258A" qid="Q70463565"/>
+       <match id="?E0000076188A" qid="Q108648245"/>
+       <match id="?E0000345758A" qid="Q21452817"/>
+       <match id="?E0000030297A" qid="Q2839936"/>
+       <match id="?E0000137147A" qid="Q53672896"/>
+       <match id="?E0000030311A" qid="Q2977961"/>
+       <match id="?E0000344433A" qid="Q55721943"/>
+       <match id="?E0000119260A" qid="Q91519011"/>
+       <match id="?E0000068581A" qid="Q664268"/>
+       <match id="?E0000394828A" qid="Q75334218"/>
+       <match id="?E0001503932A" qid="Q28420107"/>
+       <match id="?E0000670411A" qid="Q89146943"/>
+       <match id="?E0000000039A" qid="Q3106074"/>
+       <match id="?E0000074564A" qid="Q21064769"/>
+       <match id="?E0000002677A" qid="Q157322"/>
+       <match id="?E0000339752A" qid="Q108829008"/>
+       <match id="?E0000029536A" qid="Q2271150"/>
+       <match id="?E0000326092A" qid="Q222458"/>
+       <match id="?E0000039549A" qid="Q6141049"/>
+       <match id="?E0001106616A" qid="Q21463069"/>
+       <match id="?E0000023209A" qid="Q5540542"/>
+       <match id="?E0001161694A" qid="Q106980558"/>
+       <match id="?E0000936837A" qid="Q130261"/>
+       <match id="?E0001284834A" qid="Q16030262"/>
+       <match id="?E0000022697A" qid="Q2503633"/>
+       <match id="?E0000844166A" qid="Q95951958"/>
+       <match id="?E0001442797A" qid="Q59580262"/>
+       <match id="?E0000010697A" qid="Q67938504"/>
+       <match id="?E0000028487A" qid="Q453589"/>
+       <match id="?E0001071416A" qid="Q3158924"/>
+       <match id="?E0000472369A" qid="Q18508199"/>
+       <match id="?E0000271873A" qid="Q117035821"/>
+       <match id="?E0000122924A" qid="Q3435942"/>
+       <match id="?E0000056150A" qid="Q3159027"/>
+       <match id="?E0001442290A" qid="Q53504846"/>
+       <match id="?E0001442306A" qid="Q18508230"/>
+       <match id="?E0000285759A" qid="Q15433971"/>
+       <match id="?E0000131380A" qid="Q18125545"/>
+       <match id="?E0001142661A" qid="Q266637"/>
+       <match id="?E0001142606A" qid="Q7176317"/>
+       <match id="?E0001442728A" qid="Q16858216"/>
+       <match id="?E0001142915A" qid="Q16835033"/>
+       <match id="?E0000287456A" qid="Q24289820"/>
+       <match id="?E0001188453A" qid="Q5078450"/>
+       <match id="?E0000040323A" qid="Q114320660"/>
+       <match id="?E0001187952A" qid="Q50308819"/>
+       <match id="?E0000916912A" qid="Q81655069"/>
+       <match id="?E0000040368A" qid="Q930987"/>
+       <match id="?E0001104806A" qid="Q12887772"/>
+       <match id="?E0000045937A" qid="Q3167362"/>
+       <match id="?E0001535362A" qid="Q11958216"/>
+       <match id="?E0001535361A" qid="Q11987679"/>
+       <match id="?E0000312435A" qid="Q59618633"/>
+       <match id="?E0000032967A" qid="Q55722623"/>
+       <match id="?E0000966371A" qid="Q87483708"/>
+       <match id="?E0000776798A" qid="Q55723591"/>
+       <match id="?E0000280429A" qid="Q136220630"/>
+       <match id="?E0001389462A" qid="Q29574812"/>
+       <match id="?E0000294524A" qid="Q437616"/>
+       <match id="?E0000803142A" qid="Q120582"/>
+       <match id="?E0000078363A" qid="Q30755"/>
+       <match id="?E0001015723A" qid="Q453883"/>
+       <match id="?E0000000771A" qid="Q91167491"/>
+       <match id="?E0000820055A" qid="Q65037002"/>
+       <match id="?E0000298672A" qid="Q953717"/>
+       <match id="?E0001317822A" qid="Q27050159"/>
+       <match id="?E0000339245A" qid="Q59635001"/>
+       <match id="?E0000937211A" qid="Q5233068"/>
+       <match id="?E0000939891A" qid="Q5512475"/>
+       <match id="?E0001176875A" qid="Q3088175"/>
+       <match id="?E0001286417A" qid="Q4003477"/>
+       <match id="?E0001488309A" qid="Q55599022"/>
+       <match id="?E0000000733A" qid="Q3083523"/>
+       <match id="?E0001108337A" qid="Q77354041"/>
+       <match id="?E0001474015A" qid="Q2851272"/>
+       <match id="?E0000834348A" qid="Q272877"/>
+       <match id="?E0000025535A" qid="Q3381859"/>
+       <match id="?E0000455264A" qid="Q112521728"/>
+       <match id="?E0001019130A" qid="Q14948915"/>
+       <match id="?E0000033143A" qid="Q708544"/>
+       <match id="?E0000029237A" qid="Q3310473"/>
+       <match id="?E0000054616A" qid="Q3309799"/>
+       <match id="?E0000886642A" qid="Q3126439"/>
+       <match id="?E0001503576A" qid="Q276123"/>
+       <match id="?E0000051036A" qid="Q975848"/>
+       <match id="?E0000839740A" qid="Q3814224"/>
+       <match id="?E0001571453A" qid="Q1239698"/>
+       <match id="?E0000950282A" qid="Q112427403"/>
+       <match id="?E0000390043A" qid="Q3288419"/>
+       <match id="?E0000110887A" qid="Q3061474"/>
+       <match id="?E0001225187A" qid="Q61068190"/>
+       <match id="?E0000069165A" qid="Q3106741"/>
+       <match id="?E0001426473A" qid="Q15439981"/>
+       <match id="?E0000077294A" qid="Q59615453"/>
+       <match id="?E0000785634A" qid="Q3269582"/>
+       <match id="?E0001490615A" qid="Q1485390"/>
+       <match id="?E0001055801A" qid="Q17126275"/>
+       <match id="?E0000326700A" qid="Q89055241"/>
+       <match id="?E0000352611A" qid="Q55217807"/>
+       <match id="?E0000360896A" qid="Q55723558"/>
+       <match id="?E0000786249A" qid="Q106477724"/>
+       <match id="?E0000000185A" qid="Q3479213"/>
+       <match id="?E0000003070A" qid="Q674235"/>
+       <match id="?E0000823493A" qid="Q43730"/>
+       <match id="?E0000101784A" qid="Q110856922"/>
+       <match id="?E0000045936A" qid="Q104094300"/>
+       <match id="?E0000274388A" qid="Q55722376"/>
+       <match id="?E0000418874A" qid="Q2382294"/>
+       <match id="?E0001487092A" qid="Q3263734"/>
+       <match id="?E0000071051A" qid="Q124559999"/>
+       <match id="?E0000694118A" qid="Q3167551"/>
+       <match id="?E0000279754A" qid="Q3174708"/>
+       <match id="?E0000380925A" qid="Q69579477"/>
+       <match id="?E0001375815A" qid="Q123746399"/>
+       <match id="?E0000028248A" qid="Q28857174"/>
+       <match id="?E0000003968A" qid="Q313691"/>
+       <match id="?E0000001669A" qid="Q1522692"/>
+       <match id="?E0001657671A" qid="Q87412784"/>
+       <match id="?E0000019604A" qid="Q3263729"/>
+       <match id="?E0000498900A" qid="Q26259038"/>
+       <match id="?E0000083816A" qid="Q558332"/>
+       <match id="?E0000433253A" qid="Q7563061"/>
+       <match id="?E0001520529A" qid="Q4768063"/>
+       <match id="?E0000915000A" qid="Q2179910"/>
+       <match id="?E0000118274A" qid="Q3167224"/>
+       <match id="?E0000318582A" qid="Q1709176"/>
+       <match id="?E0000115869A" qid="Q56000092"/>
+       <match id="?E0001437815A" qid="Q862473"/>
+       <match id="?E0001671861A" qid="Q5239842"/>
+       <match id="?E0001044614A" qid="Q60620874"/>
+       <match id="?E0000035272A" qid="Q2035136"/>
+       <match id="?E0000001867A" qid="Q3158395"/>
+       <match id="?E0000896905A" qid="Q8029853"/>
+       <match id="?E0000489447A" qid="Q450346"/>
+       <match id="?E0000025440A" qid="Q3311636"/>
+       <match id="?E0000003297A" qid="Q3421020"/>
+       <match id="?E0000022074A" qid="Q1096768"/>
+       <match id="?E0000813222A" qid="Q3287659"/>
+       <match id="?E0001504098A" qid="Q42563357"/>
+       <match id="?E0000919469A" qid="Q55723460"/>
+       <match id="?E0000962152A" qid="Q12418"/>
+       <match id="?E0001573361A" qid="Q8007694"/>
+       <match id="?E0001051970A" qid="Q18528657"/>
+       <match id="?E0000685529A" qid="Q42534979"/>
+       <match id="?E0000376465A" qid="Q53479484"/>
+       <match id="?E0000003632A" qid="Q3355675"/>
+       <match id="?E0001416043A" qid="Q62573112"/>
+       <match id="?E0000471778A" qid="Q124433591"/>
+       <match id="?E0000308607A" qid="Q104887522"/>
+       <match id="?E0000677646A" qid="Q278945"/>
+       <match id="?E0000321127A" qid="Q193563"/>
+       <match id="?E0001140709A" qid="Q3279762"/>
+       <match id="?E0001104789A" qid="Q16662741"/>
+       <match id="?E0000923078A" qid="Q64778546"/>
+       <match id="?E0000335607A" qid="Q2835169"/>
+       <match id="?E0000033327A" qid="Q55218733"/>
+       <match id="?E0000379795A" qid="Q98544589"/>
+       <match id="?E0000026658A" qid="Q55217749"/>
+       <match id="?E0000120023A" qid="Q3094641"/>
+       <match id="?E0000110602A" qid="Q68593944"/>
+       <match id="?E0000133961A" qid="Q95692283"/>
+       <match id="?E0000034323A" qid="Q90860921"/>
+       <match id="?E0000025401A" qid="Q4768782"/>
+       <match id="?E0000018823A" qid="Q2853862"/>
+       <match id="?E0000786663A" qid="Q72219386"/>
+       <match id="?E0001062201A" qid="Q59672992"/>
+       <match id="?E0000919244A" qid="Q3106328"/>
+       <match id="?E0001033184A" qid="Q59692211"/>
+       <match id="?E0000317689A" qid="Q63489025"/>
+       <match id="?E0000109111A" qid="Q3048602"/>
+       <match id="?E0000021595A" qid="Q30748589"/>
+       <match id="?E0000134330A" qid="Q27758604"/>
+       <match id="?E0000318610A" qid="Q2907852"/>
+       <match id="?E0000999942A" qid="Q3479256"/>
+       <match id="?E0000486476A" qid="Q83498484"/>
+       <match id="?E0000928504A" qid="Q99877534"/>
+       <match id="?E0000459958A" qid="Q2338135"/>
+       <match id="?E0001315854A" qid="Q29514792"/>
+       <match id="?E0000439334A" qid="Q83498208"/>
+       <match id="?E0001292360A" qid="Q127512489"/>
+       <match id="?E0000150729A" qid="Q55725208"/>
+       <match id="?E0000015957A" qid="Q3010022"/>
+       <match id="?E0000127105A" qid="Q110728425"/>
+       <match id="?E0000073761A" qid="Q41155955"/>
+       <match id="?E0000151364A" qid="Q5534703"/>
+       <match id="?E0000028997A" qid="Q105075518"/>
+       <match id="?E0000473488A" qid="Q3169940"/>
+       <match id="?E0000029010A" qid="Q3330791"/>
+       <match id="?E0001099085A" qid="Q3330050"/>
+       <match id="?E0001070958A" qid="Q109689917"/>
+       <match id="?E0000021589A" qid="Q129659455"/>
+       <match id="?E0000301169A" qid="Q81211100"/>
+       <match id="?E0000013880A" qid="Q101137998"/>
+       <match id="?E0000449203A" qid="Q78650912"/>
+       <match id="?E0001241745A" qid="Q88403373"/>
+       <match id="?E0000027823A" qid="Q84081929"/>
+       <match id="?E0001217231A" qid="Q104176778"/>
+       <match id="?E0001090735A" qid="Q111724635"/>
+       <match id="?E0000007333A" qid="Q680374"/>
+       <match id="?E0000000754A" qid="Q85541030"/>
+       <match id="?E0000146286A" qid="Q129658216"/>
+       <match id="?E0001178301A" qid="Q105320"/>
+       <match id="?E0000436574A" qid="Q3034837"/>
+       <match id="?E0000022467A" qid="Q2900236"/>
+       <match id="?E0000418665A" qid="Q153793"/>
+       <match id="?E0000315315A" qid="Q67400353"/>
+       <match id="?E0000007686A" qid="Q5593"/>
+       <match id="?E0000676099A" qid="Q89038454"/>
+       <match id="?E0000472959A" qid="Q17489128"/>
+       <match id="?E0000301056A" qid="Q3645686"/>
+       <match id="?E0000694042A" qid="Q83688183"/>
+       <match id="?E0000083363A" qid="Q2945802"/>
+       <match id="?E0000288903A" qid="Q55693823"/>
+       <match id="?E0000323954A" qid="Q55724838"/>
+       <match id="?E0000073098A" qid="Q5271253"/>
+       <match id="?E0000908147A" qid="Q104820197"/>
+       <match id="?E0000017739A" qid="Q3102575"/>
+       <match id="?E0000123418A" qid="Q15434402"/>
+       <match id="?E0001172992A" qid="Q104764319"/>
+       <match id="?E0000485461A" qid="Q6729617"/>
+       <match id="?E0000942984A" qid="Q90921881"/>
+       <match id="?E0000341865A" qid="Q55725663"/>
+       <match id="?E0000381013A" qid="Q2939914"/>
+       <match id="?E0001224832A" qid="Q55721774"/>
+       <match id="?E0000026764A" qid="Q3359220"/>
+       <match id="?E0000003743A" qid="Q3436713"/>
+       <match id="?E0000011114A" qid="Q2901310"/>
+       <match id="?E0000007780A" qid="Q455133"/>
+       <match id="?E0000474929A" qid="Q68592593"/>
+       <match id="?E0000953605A" qid="Q93609606"/>
+       <match id="?E0000296817A" qid="Q63185670"/>
+       <match id="?E0000296363A" qid="Q42313628"/>
+       <match id="?E0001102409A" qid="Q697096"/>
+       <match id="?E0000072176A" qid="Q3329166"/>
+       <match id="?E0001459815A" qid="Q132681446"/>
+       <match id="?E0000472719A" qid="Q1955726"/>
+       <match id="?E0000105585A" qid="Q1032269"/>
+       <match id="?E0000001031A" qid="Q3328108"/>
+       <match id="?E0000014618A" qid="Q441440"/>
+       <match id="?E0000813440A" qid="Q108142378"/>
+       <match id="?E0000314703A" qid="Q317164"/>
+       <match id="?E0000028394A" qid="Q55217863"/>
+       <match id="?E0000121659A" qid="Q129657851"/>
+       <match id="?E0000382196A" qid="Q55217864"/>
+       <match id="?E0000687437A" qid="Q55219442"/>
+       <match id="?E0001018662A" qid="Q111967214"/>
+       <match id="?E0000004305A" qid="Q7408234"/>
+       <match id="?E0000273496A" qid="Q3430485"/>
+       <match id="?E0000469648A" qid="Q19628656"/>
+       <match id="?E0000112838A" qid="Q111359229"/>
+       <match id="?E0000315370A" qid="Q87483676"/>
+       <match id="?E0000014702A" qid="Q55626656"/>
+       <match id="?E0000064828A" qid="Q50825310"/>
+       <match id="?E0000448632A" qid="Q20006926"/>
+       <match id="?E0000283981A" qid="Q3279757"/>
+       <match id="?E0000041757A" qid="Q148475"/>
+       <match id="?E0000072308A" qid="Q19675"/>
+       <match id="?E0000397263A" qid="Q55721847"/>
+       <match id="?E0000017147A" qid="Q346483"/>
+       <match id="?E0000085665A" qid="Q260166"/>
+       <match id="?E0000141263A" qid="Q93904136"/>
+       <match id="?E0000046424A" qid="Q106717762"/>
+       <match id="?E0000937299A" qid="Q294326"/>
+       <match id="?E0000772296A" qid="Q19544976"/>
+       <match id="?E0000472088A" qid="Q5231471"/>
+       <match id="?E0000054082A" qid="Q1523316"/>
+       <match id="?E0001017797A" qid="Q16194122"/>
+       <match id="?E0000105387A" qid="Q3330221"/>
+       <match id="?E0001029375A" qid="Q19560126"/>
+       <match id="?E0001118084A" qid="Q106293564"/>
+       <match id="?E0000946173A" qid="Q17512509"/>
+       <match id="?E0000269696A" qid="Q113702189"/>
+       <match id="?E0000284022A" qid="Q59637122"/>
+       <match id="?E0000287255A" qid="Q55219341"/>
+       <match id="?E0000831181A" qid="Q110413936"/>
+       <match id="?E0000146858A" qid="Q106729562"/>
+       <match id="?E0000030525A" qid="Q68462430"/>
+       <match id="?E0000842003A" qid="Q107105002"/>
+       <match id="?E0000433422A" qid="Q2851009"/>
+       <match id="?E0000275167A" qid="Q55724395"/>
+       <match id="?E0000813830A" qid="Q90724494"/>
+       <match id="?E0000133630A" qid="Q16645705"/>
+       <match id="?E0000141262A" qid="Q67401467"/>
+       <match id="?E0000065536A" qid="Q3219667"/>
+       <match id="?E0000907537A" qid="Q64584854"/>
+       <match id="?E0000400102A" qid="Q3293401"/>
+       <match id="?E0001102480A" qid="Q133968954"/>
+       <match id="?E0000088586A" qid="Q371960"/>
+       <match id="?E0000776823A" qid="Q3047448"/>
+       <match id="?E0000100653A" qid="Q309716"/>
+       <match id="?E0001208685A" qid="Q59647122"/>
+       <match id="?E0000274949A" qid="Q96905484"/>
+       <match id="?E0000019227A" qid="Q289624"/>
+       <match id="?E0000432899A" qid="Q86120101"/>
+       <match id="?E0000881018A" qid="Q47496"/>
+       <match id="?E0000114235A" qid="Q55218169"/>
+       <match id="?E0000115870A" qid="Q85983141"/>
+       <match id="?E0000270013A" qid="Q129657195"/>
+       <match id="?E0000318593A" qid="Q85858652"/>
+       <match id="?E0000073668A" qid="Q3173829"/>
+       <match id="?E0000026092A" qid="Q105072200"/>
+       <match id="?E0000132891A" qid="Q65923048"/>
+       <match id="?E0000030362A" qid="Q3182331"/>
+       <match id="?E0000436584A" qid="Q195311"/>
+       <match id="?E0000132890A" qid="Q85711366"/>
+       <match id="?E0000108593A" qid="Q89047482"/>
+       <match id="?E0000319913A" qid="Q105339684"/>
+       <match id="?E0000025533A" qid="Q85688840"/>
+       <match id="?E0000286919A" qid="Q1601836"/>
+       <match id="?E0000785826A" qid="Q87490346"/>
+       <match id="?E0000021779A" qid="Q108648175"/>
+       <match id="?E0001178461A" qid="Q133889368"/>
+       <match id="?E0000280600A" qid="Q89841683"/>
+       <match id="?E0000004657A" qid="Q472946"/>
+       <match id="?E0000021593A" qid="Q1068063"/>
+       <match id="?E0000786752A" qid="Q71172413"/>
+       <match id="?E0001183468A" qid="Q73565102"/>
+       <match id="?E0001211432A" qid="Q112004236"/>
+       <match id="?E0000393093A" qid="Q3578612"/>
+       <match id="?E0000092480A" qid="Q153739"/>
+       <match id="?E0000484515A" qid="Q214206"/>
+       <match id="?E0000028285A" qid="Q55723773"/>
+       <match id="?E0000471740A" qid="Q59831582"/>
+       <match id="?E0001155308A" qid="Q189762"/>
+       <match id="?E0000923090A" qid="Q55724780"/>
+       <match id="?E0000142446A" qid="Q59656615"/>
+       <match id="?E0000052912A" qid="Q5354031"/>
+       <match id="?E0000035124A" qid="Q3069358"/>
+       <match id="?E0000027161A" qid="Q125930597"/>
+       <match id="?E0000028921A" qid="Q3329087"/>
+       <match id="?E0000100554A" qid="Q59661061"/>
+       <match id="?E0000132921A" qid="Q93432066"/>
+       <match id="?E0000689751A" qid="Q71007975"/>
+       <match id="?E0000313607A" qid="Q76531844"/>
+       <match id="?E0000147541A" qid="Q59691001"/>
+       <match id="?E0000969268A" qid="Q3329726"/>
+       <match id="?E0000309508A" qid="Q3106191"/>
+       <match id="?E0000005630A" qid="Q64962739"/>
+       <match id="?E0000820075A" qid="Q93914347"/>
+       <match id="?E0000034652A" qid="Q1451293"/>
+       <match id="?E0000321234A" qid="Q55218651"/>
+       <match id="?E0000073152A" qid="Q364187"/>
+       <match id="?E0000364351A" qid="Q97409082"/>
+       <match id="?E0000364354A" qid="Q711391"/>
+       <match id="?E0000362586A" qid="Q52151159"/>
+       <match id="?E0000131443A" qid="Q55725313"/>
+       <match id="?E0000003393A" qid="Q201492"/>
+       <match id="?E0000025567A" qid="Q3308676"/>
+       <match id="?E0000095169A" qid="Q59638238"/>
+       <match id="?E0000326487A" qid="Q87485324"/>
+       <match id="?E0001439708A" qid="Q6391838"/>
+       <match id="?E0000007184A" qid="Q5592"/>
+       <match id="?E0000344395A" qid="Q83876079"/>
+       <match id="?E0000275396A" qid="Q86522543"/>
+       <match id="?E0001013469A" qid="Q288793"/>
+       <match id="?E0000343986A" qid="Q55218167"/>
+       <match id="?E0001046646A" qid="Q75184856"/>
+       <match id="?E0000469446A" qid="Q310924"/>
+       <match id="?E0000135789A" qid="Q90574416"/>
+       <match id="?E0000032516A" qid="Q3110727"/>
+       <match id="?E0000785772A" qid="Q59639683"/>
+       <match id="?E0000113712A" qid="Q3179853"/>
+       <match id="?E0000901930A" qid="Q93605565"/>
+       <match id="?E0000458920A" qid="Q130751531"/>
+       <match id="?E0001048822A" qid="Q59534656"/>
+       <match id="?E0000390260A" qid="Q101114470"/>
+       <match id="?E0000679036A" qid="Q39628"/>
+       <match id="?E0000022507A" qid="Q2977487"/>
+       <match id="?E0000068926A" qid="Q320422"/>
+       <match id="?E0000956755A" qid="Q89038044"/>
+       <match id="?E0000023203A" qid="Q52985"/>
+       <match id="?E0000109504A" qid="Q1705530"/>
+       <match id="?E0000284096A" qid="Q20666652"/>
+       <match id="?E0000083484A" qid="Q56886009"/>
+       <match id="?E0000119180A" qid="Q71328839"/>
+       <match id="?E0000119181A" qid="Q71329114"/>
+       <match id="?E0000432081A" qid="Q104904446"/>
+       <match id="?E0001242530A" qid="Q133826835"/>
+       <match id="?E0000126876A" qid="Q984030"/>
+       <match id="?E0000285838A" qid="Q28967913"/>
+       <match id="?E0000962438A" qid="Q105947756"/>
+       <match id="?E0000285533A" qid="Q328248"/>
+       <match id="?E0001035631A" qid="Q1127240"/>
+       <match id="?E0000004948A" qid="Q60836708"/>
+       <match id="?E0001266774A" qid="Q68860"/>
+       <match id="?E0000120559A" qid="Q3420711"/>
+       <match id="?E0000034099A" qid="Q3154327"/>
+       <match id="?E0000485113A" qid="Q328137"/>
+       <match id="?E0001508182A" qid="Q3154941"/>
+       <match id="?E0000887603A" qid="Q59541899"/>
+       <match id="?E0000437843A" qid="Q136263004"/>
+       <match id="?E0000344280A" qid="Q59597163"/>
+       <match id="?E0000034187A" qid="Q3161825"/>
+       <match id="?E0001230030A" qid="Q56011668"/>
+       <match id="?E0000118963A" qid="Q80123923"/>
+       <match id="?E0000119179A" qid="Q59611868"/>
+       <match id="?E0000346902A" qid="Q3168549"/>
+       <match id="?E0000445917A" qid="Q129653828"/>
+       <match id="?E0000988288A" qid="Q89135018"/>
+       <match id="?E0000299117A" qid="Q3330271"/>
+       <match id="?E0001463738A" qid="Q115389577"/>
+       <match id="?E0000014359A" qid="Q28873878"/>
+       <match id="?E0000362779A" qid="Q3184926"/>
+       <match id="?E0000000900A" qid="Q3187514"/>
+       <match id="?E0000052895A" qid="Q108638180"/>
+       <match id="?E0000952271A" qid="Q55759312"/>
+       <match id="?E0000060362A" qid="Q16319555"/>
+       <match id="?E0000029380A" qid="Q3181963"/>
+       <match id="?E0000984310A" qid="Q3319265"/>
+       <match id="?E0000024009A" qid="Q105076894"/>
+       <match id="?E0000982254A" qid="Q59510221"/>
+       <match id="?E0000974716A" qid="Q17109604"/>
+       <match id="?E0000393489A" qid="Q110500994"/>
+       <match id="?E0001512334A" qid="Q119684687"/>
+       <match id="?E0000064942A" qid="Q1133777"/>
+       <match id="?E0000079879A" qid="Q5258892"/>
+       <match id="?E0000281500A" qid="Q95690827"/>
+       <match id="?E0000011486A" qid="Q2830300"/>
+       <match id="?E0001234311A" qid="Q97188722"/>
+       <match id="?E0000123991A" qid="Q99589371"/>
+       <match id="?E0000121878A" qid="Q96964998"/>
+       <match id="?E0000021808A" qid="Q43782315"/>
+       <match id="?E0000121559A" qid="Q71747987"/>
+       <match id="?E0000120081A" qid="Q59528421"/>
+       <match id="?E0000047497A" qid="Q30081512"/>
+       <match id="?E0000106201A" qid="Q563549"/>
+       <match id="?E0000991466A" qid="Q8323"/>
+       <match id="?E0000270288A" qid="Q29043096"/>
+       <match id="?E0000101409A" qid="Q16064865"/>
+       <match id="?E0000275136A" qid="Q110729035"/>
+       <match id="?E0000411170A" qid="Q3524295"/>
+       <match id="?E0000689810A" qid="Q63214284"/>
+       <match id="?E0000039671A" qid="Q93284"/>
+       <match id="?E0000029459A" qid="Q130229630"/>
+       <match id="?E0000110889A" qid="Q108301303"/>
+       <match id="?E0001331098A" qid="Q75775551"/>
+       <match id="?E0000321432A" qid="Q20723813"/>
+       <match id="?E0000382457A" qid="Q55219142"/>
+       <match id="?E0000085402A" qid="Q59596748"/>
+       <match id="?E0000131033A" qid="Q129652943"/>
+       <match id="?E0000374220A" qid="Q24262340"/>
+       <match id="?E0000143170A" qid="Q93772461"/>
+       <match id="?E0000692088A" qid="Q75184381"/>
+       <match id="?E0000127066A" qid="Q3309178"/>
+       <match id="?E0000312421A" qid="Q3309381"/>
+       <match id="?E0000026809A" qid="Q3103087"/>
+       <match id="?E0000678385A" qid="Q24929850"/>
+       <match id="?E0000018615A" qid="Q64437603"/>
+       <match id="?E0000915291A" qid="Q56025098"/>
+       <match id="?E0000275350A" qid="Q55219413"/>
+       <match id="?E0001063884A" qid="Q111342886"/>
+       <match id="?E0000062498A" qid="Q312859"/>
+       <match id="?E0001501865A" qid="Q17989829"/>
+       <match id="?E0000121877A" qid="Q75838700"/>
+       <match id="?E0000301285A" qid="Q59587345"/>
+       <match id="?E0000076988A" qid="Q2926720"/>
+       <match id="?E0000280184A" qid="Q122230784"/>
+       <match id="?E0000071483A" qid="Q1306651"/>
+       <match id="?E0000000577A" qid="Q3081199"/>
+       <match id="?E0000280165A" qid="Q4317804"/>
+       <match id="?E0000474427A" qid="Q59829425"/>
+       <match id="?E0000133477A" qid="Q924335"/>
+       <match id="?E0000349556A" qid="Q24668913"/>
+       <match id="?E0000422691A" qid="Q13512446"/>
+       <match id="?E0000293686A" qid="Q43558832"/>
+       <match id="?E0001089781A" qid="Q78832064"/>
+       <match id="?E0000308657A" qid="Q55990943"/>
+       <match id="?E0000024608A" qid="Q3106310"/>
+       <match id="?E0000051493A" qid="Q28871993"/>
+       <match id="?E0000817107A" qid="Q88593273"/>
+       <match id="?E0000273895A" qid="Q182589"/>
+       <match id="?E0000035602A" qid="Q3418621"/>
+       <match id="?E0000455423A" qid="Q3099942"/>
+       <match id="?E0001569110A" qid="Q87904722"/>
+       <match id="?E0000350390A" qid="Q5300972"/>
+       <match id="?E0000418866A" qid="Q3309677"/>
+       <match id="?E0001365064A" qid="Q59541543"/>
+       <match id="?E0000029580A" qid="Q55722391"/>
+       <match id="?E0000054164A" qid="Q2749658"/>
+       <match id="?E0000455465A" qid="Q63967115"/>
+       <match id="?E0001080182A" qid="Q108828984"/>
+       <match id="?E0000427208A" qid="Q55722548"/>
+       <match id="?E0001039954A" qid="Q3385801"/>
+       <match id="?E0000132336A" qid="Q7144588"/>
+       <match id="?E0000044772A" qid="Q164712"/>
+       <match id="?E0000000002A" qid="Q63882068"/>
+       <match id="?E0000095855A" qid="Q93995835"/>
+       <match id="?E0000364243A" qid="Q64788402"/>
+       <match id="?E0001210003A" qid="Q62065138"/>
+       <match id="?E0000031871A" qid="Q59779251"/>
+       <match id="?E0000859760A" qid="Q55217746"/>
+       <match id="?E0000088814A" qid="Q95731308"/>
+       <match id="?E0001143166A" qid="Q1281272"/>
+       <match id="?E0001143173A" qid="Q5764481"/>
+       <match id="?E0001143216A" qid="Q2051997"/>
+       <match id="?E0001571820A" qid="Q19573666"/>
+       <match id="?E0000018157A" qid="Q3023026"/>
+       <match id="?E0000148524A" qid="Q129656637"/>
+       <match id="?E0000119748A" qid="Q3264827"/>
+       <match id="?E0000003599A" qid="Q3495973"/>
+       <match id="?E0001045168A" qid="Q129654699"/>
+       <match id="?E0000121553A" qid="Q59647131"/>
+       <match id="?E0000098444A" qid="Q92982404"/>
+       <match id="?E0000296505A" qid="Q65088587"/>
+       <match id="?E0000272366A" qid="Q66500777"/>
+       <match id="?E0000080649A" qid="Q728619"/>
+       <match id="?E0000398319A" qid="Q55938413"/>
+       <match id="?E0001153728A" qid="Q113951044"/>
+       <match id="?E0000288358A" qid="Q112471011"/>
+       <match id="?E0000373039A" qid="Q56437544"/>
+       <match id="?E0000294072A" qid="Q55723226"/>
+       <match id="?E0000285374A" qid="Q81654088"/>
+       <match id="?E0000394932A" qid="Q25395694"/>
+       <match id="?E0000079614A" qid="Q63919259"/>
+       <match id="?E0000046043A" qid="Q55724161"/>
+       <match id="?E0000111137A" qid="Q3242483"/>
+       <match id="?E0000408201A" qid="Q7608593"/>
+       <match id="?E0001210069A" qid="Q79052890"/>
+       <match id="?E0001531984A" qid="Q107012040"/>
+       <match id="?E0001221833A" qid="Q104834747"/>
+       <match id="?E0000300909A" qid="Q55218950"/>
+       <match id="?E0000047516A" qid="Q3455726"/>
+       <match id="?E0000313968A" qid="Q4350860"/>
+       <match id="?E0000032995A" qid="Q26702"/>
+       <match id="?E0001105615A" qid="Q7331548"/>
+       <match id="?E0000443969A" qid="Q55364937"/>
+       <match id="?E0000473580A" qid="Q60056756"/>
+       <match id="?E0000139649A" qid="Q7345286"/>
+       <match id="?E0000004910A" qid="Q459791"/>
+       <match id="?E0001406276A" qid="Q137396866"/>
+       <match id="?E0000039980A" qid="Q1684960"/>
+       <match id="?E0000442559A" qid="Q24262354"/>
+       <match id="?E0000819208A" qid="Q96634427"/>
+       <match id="?E0001489149A" qid="Q3262139"/>
+       <match id="?E0000034788A" qid="Q3179881"/>
+       <match id="?E0000907484A" qid="Q72084212"/>
+       <match id="?E0000092481A" qid="Q254395"/>
+       <match id="?E0000349815A" qid="Q64633280"/>
+       <match id="?E0000094438A" qid="Q214666"/>
+       <match id="?E0000436400A" qid="Q68598223"/>
+       <match id="?E0000359756A" qid="Q75028077"/>
+       <match id="?E0000001637A" qid="Q392189"/>
+       <match id="?E0000285416A" qid="Q89077847"/>
+       <match id="?E0000285419A" qid="Q108576058"/>
+       <match id="?E0000280487A" qid="Q20858401"/>
+       <match id="?E0000301094A" qid="Q55137357"/>
+       <match id="?E0000301607A" qid="Q2636449"/>
+       <match id="?E0000994747A" qid="Q137212767"/>
+       <match id="?E0001320911A" qid="Q2368360"/>
+       <match id="?E0000323667A" qid="Q3165792"/>
+       <match id="?E0000359447A" qid="Q59646204"/>
+       <match id="?E0000061271A" qid="Q94510221"/>
+       <match id="?E0000942965A" qid="Q18686273"/>
+       <match id="?E0001023721A" qid="Q3155022"/>
+       <match id="?E0001242521A" qid="Q89429622"/>
+       <match id="?E0000935118A" qid="Q107105456"/>
+       <match id="?E0001176139A" qid="Q71489744"/>
+       <match id="?E0000301307A" qid="Q3410768"/>
+       <match id="?E0001026390A" qid="Q3123670"/>
+       <match id="?E0000299831A" qid="Q21619145"/>
+       <match id="?E0000033971A" qid="Q3296532"/>
+       <match id="?E0000004593A" qid="Q1067935"/>
+       <match id="?E0000353987A" qid="Q16039696"/>
+       <match id="?E0000680387A" qid="Q72337318"/>
+       <match id="?E0000454507A" qid="Q55217644"/>
+       <match id="?E0000309078A" qid="Q6188398"/>
+       <match id="?E0000461051A" qid="Q3858815"/>
+       <match id="?E0000461092A" qid="Q861608"/>
+       <match id="?E0001013484A" qid="Q457420"/>
+       <match id="?E0000895914A" qid="Q125245966"/>
+       <match id="?E0000007546A" qid="Q517"/>
+       <match id="?E0000072378A" qid="Q188740"/>
+       <match id="?E0001109750A" qid="Q58461592"/>
+       <match id="?E0001261666A" qid="Q3334884"/>
+       <match id="?E0000316234A" qid="Q100735035"/>
+       <match id="?E0000035300A" qid="Q2978211"/>
+       <match id="?E0000339763A" qid="Q81938570"/>
+       <match id="?E0000114755A" qid="Q93734709"/>
+       <match id="?E0000025839A" qid="Q55219212"/>
+       <match id="?E0000323156A" qid="Q75320840"/>
+       <match id="?E0000316029A" qid="Q64682127"/>
+       <match id="?E0000324187A" qid="Q75126867"/>
+       <match id="?E0000315298A" qid="Q55723991"/>
+       <match id="?E0000471905A" qid="Q28335053"/>
+       <match id="?E0000026548A" qid="Q90748657"/>
+       <match id="?E0001416406A" qid="Q85713373"/>
+       <match id="?E0001136460A" qid="Q106847255"/>
+       <match id="?E0000462249A" qid="Q108648160"/>
+       <match id="?E0000296657A" qid="Q111968026"/>
+       <match id="?E0000945209A" qid="Q95409774"/>
+       <match id="?E0000028883A" qid="Q65600464"/>
+       <match id="?E0000027157A" qid="Q716552"/>
+       <match id="?E0000309417A" qid="Q78362345"/>
+       <match id="?E0000325279A" qid="Q52157141"/>
+       <match id="?E0000315327A" qid="Q98073652"/>
+       <match id="?E0000021517A" qid="Q614639"/>
+       <match id="?E0000097242A" qid="Q274257"/>
+       <match id="?E0000025530A" qid="Q86359632"/>
+       <match id="?E0000099415A" qid="Q80566960"/>
+       <match id="?E0000036230A" qid="Q78939176"/>
+       <match id="?E0000325856A" qid="Q64918216"/>
+       <match id="?E0000089463A" qid="Q77884847"/>
+       <match id="?E0000338054A" qid="Q113661364"/>
+       <match id="?E0000382230A" qid="Q95626537"/>
+       <match id="?E0000409957A" qid="Q66696888"/>
+       <match id="?E0000085464A" qid="Q21814359"/>
+       <match id="?E0000063674A" qid="Q82607216"/>
+       <match id="?E0000323069A" qid="Q107106160"/>
+       <match id="?E0001188536A" qid="Q64788406"/>
+       <match id="?E0000007221A" qid="Q108878238"/>
+       <match id="?E0000786816A" qid="Q64584702"/>
+       <match id="?E0000025508A" qid="Q3421269"/>
+       <match id="?E0000049558A" qid="Q133505338"/>
+       <match id="?E0000100685A" qid="Q314938"/>
+       <match id="?E0000315539A" qid="Q64682161"/>
+       <match id="?E0000340096A" qid="Q2848985"/>
+       <match id="?E0000017394A" qid="Q3496810"/>
+       <match id="?E0000472514A" qid="Q50378566"/>
+       <match id="?E0000113005A" qid="Q130937091"/>
+       <match id="?E0000419805A" qid="Q569021"/>
+       <match id="?E0000090557A" qid="Q81215448"/>
+       <match id="?E0000320729A" qid="Q89479828"/>
+       <match id="?E0000087120A" qid="Q1368010"/>
+       <match id="?E0000057224A" qid="Q200580"/>
+       <match id="?E0000074994A" qid="Q165274"/>
+       <match id="?E0000419031A" qid="Q129654053"/>
+       <match id="?E0000346552A" qid="Q91783713"/>
+       <match id="?E0000270419A" qid="Q19661292"/>
+       <match id="?E0000005225A" qid="Q3573315"/>
+       <match id="?E0000020120A" qid="Q1148233"/>
+       <match id="?E0000008058A" qid="Q95690585"/>
+       <match id="?E0000001341A" qid="Q294999"/>
+       <match id="?E0000054392A" qid="Q41408"/>
+       <match id="?E0000325891A" qid="Q55725113"/>
+       <match id="?E0000471026A" qid="Q94534677"/>
+       <match id="?E0000428927A" qid="Q1190812"/>
+       <match id="?E0000007240A" qid="Q80002315"/>
+       <match id="?E0000369400A" qid="Q42897713"/>
+       <match id="?E0000035815A" qid="Q3292837"/>
+       <match id="?E0000088194A" qid="Q77888987"/>
+       <match id="?E0000090593A" qid="Q82180"/>
+       <match id="?E0000066817A" qid="Q49747"/>
+       <match id="?E0000810092A" qid="Q5605459"/>
+       <match id="?E0000134506A" qid="Q92986125"/>
+       <match id="?E0000376592A" qid="Q464097"/>
+       <match id="?E0000129536A" qid="Q106085049"/>
+       <match id="?E0000688013A" qid="Q129653344"/>
+       <match id="?E0000280602A" qid="Q82083578"/>
+       <match id="?E0000455366A" qid="Q24829"/>
+       <match id="?E0000341764A" qid="Q71053356"/>
+       <match id="?E0000315387A" qid="Q43955794"/>
+       <match id="?E0000089814A" qid="Q452254"/>
+       <match id="?E0000088762A" qid="Q4911230"/>
+       <match id="?E0000273204A" qid="Q59761520"/>
+       <match id="?E0000133714A" qid="Q3499926"/>
+       <match id="?E0000015397A" qid="Q3309225"/>
+       <match id="?E0000036228A" qid="Q1511"/>
+       <match id="?E0000347140A" qid="Q77885299"/>
+       <match id="?E0000027755A" qid="Q4985"/>
+       <match id="?E0000004351A" qid="Q2865373"/>
+       <match id="?E0000005915A" qid="Q108878047"/>
+       <match id="?E0000029319A" qid="Q508555"/>
+       <match id="?E0000419863A" qid="Q21534518"/>
+       <match id="?E0000339136A" qid="Q55217922"/>
+       <match id="?E0000339116A" qid="Q64634114"/>
+       <match id="?E0000316024A" qid="Q55218311"/>
+       <match id="?E0000420005A" qid="Q1680178"/>
+       <match id="?E0000346922A" qid="Q15438772"/>
+       <match id="?E0000360913A" qid="Q154448"/>
+       <match id="?E0000346361A" qid="Q1978366"/>
+       <match id="?E0000315337A" qid="Q78359339"/>
+       <match id="?E0001243444A" qid="Q192529"/>
+       <match id="?E0000472715A" qid="Q82574583"/>
+       <match id="?E0000059141A" qid="Q23434"/>
+       <match id="?E0000054681A" qid="Q201732"/>
+       <match id="?E0000458754A" qid="Q95994385"/>
+       <match id="?E0000083385A" qid="Q40909"/>
+       <match id="?E0000438164A" qid="Q753251"/>
+       <match id="?E0000000333A" qid="Q7321"/>
+       <match id="?E0001142686A" qid="Q17116018"/>
+       <match id="?E0000910584A" qid="Q8200777"/>
+       <match id="?E0000352355A" qid="Q123401483"/>
+       <match id="?E0000288357A" qid="Q5671445"/>
+       <match id="?E0000010187A" qid="Q63245064"/>
+       <match id="?E0000288356A" qid="Q2355659"/>
+       <match id="?E0000932386A" qid="Q19522651"/>
+       <match id="?E0000677649A" qid="Q125996747"/>
+       <match id="?E0000013630A" qid="Q2944913"/>
+       <match id="?E0000813898A" qid="Q55723674"/>
+       <match id="?E0000988262A" qid="Q365388"/>
+       <match id="?E0000990246A" qid="Q1301849"/>
+       <match id="?E0000681283A" qid="Q125303041"/>
+       <match id="?E0000435107A" qid="Q24572429"/>
+       <match id="?E0000299314A" qid="Q1022955"/>
+       <match id="?E0000881745A" qid="Q1645251"/>
+       <match id="?E0000284337A" qid="Q63389892"/>
+       <match id="?E0001033310A" qid="Q4909598"/>
+       <match id="?E0000275597A" qid="Q5553487"/>
+       <match id="?E0000109110A" qid="Q446349"/>
+       <match id="?E0000318107A" qid="Q55723456"/>
+       <match id="?E0000319425A" qid="Q3350768"/>
+       <match id="?E0000044000A" qid="Q93773842"/>
+       <match id="?E0000318752A" qid="Q131779139"/>
+       <match id="?E0000981248A" qid="Q112526235"/>
+       <match id="?E0000446630A" qid="Q106477121"/>
+       <match id="?E0000098545A" qid="Q1068063"/>
+       <match id="?E0000085406A" qid="Q55725396"/>
+       <match id="?E0000974683A" qid="Q99454801"/>
+       <match id="?E0000274287A" qid="Q137109566"/>
+       <match id="?E0000974205A" qid="Q55725462"/>
+       <match id="?E0000279198A" qid="Q70237198"/>
+       <match id="?E0001552666A" qid="Q133629323"/>
+       <match id="?E0000012183A" qid="Q112511445"/>
+       <match id="?E0000000530A" qid="Q55723865"/>
+       <match id="?E0001363359A" qid="Q15619521"/>
+       <match id="?E0001390289A" qid="Q11653979"/>
+       <match id="?E0000777371A" qid="Q21170455"/>
+       <match id="?E0001212049A" qid="Q133029058"/>
+       <match id="?E0000285653A" qid="Q2926650"/>
+       <match id="?E0000301057A" qid="Q5294655"/>
+       <match id="?E0001168975A" qid="Q3135604"/>
+       <match id="?E0000298464A" qid="Q4796830"/>
+       <match id="?E0000007410A" qid="Q3587709"/>
+       <match id="?E0000485290A" qid="Q94536074"/>
+       <match id="?E0001388704A" qid="Q4974195"/>
+       <match id="?E0000027691A" qid="Q7052540"/>
+       <match id="?E0000112551A" qid="Q59761934"/>
+       <match id="?E0000000218A" qid="Q55724440"/>
+       <match id="?E0001059165A" qid="Q137006857"/>
+       <match id="?E0001080468A" qid="Q94358661"/>
+       <match id="?E0001022896A" qid="Q133633479"/>
+       <match id="?E0001102417A" qid="Q16732459"/>
+       <match id="?E0000806687A" qid="Q29017258"/>
+       <match id="?E0000033114A" qid="Q133692583"/>
+       <match id="?E0000296369A" qid="Q133707046"/>
+       <match id="?E0000813151A" qid="Q50825679"/>
+       <match id="?E0000014092A" qid="Q3010002"/>
+       <match id="?E0000314702A" qid="Q100267423"/>
+       <match id="?E0000459273A" qid="Q2830149"/>
+       <match id="?E0000826958A" qid="Q133671511"/>
+       <match id="?E0000447843A" qid="Q24455720"/>
+       <match id="?E0000137156A" qid="Q48757581"/>
+       <match id="?E0000004311A" qid="Q2579532"/>
+       <match id="?E0000273497A" qid="Q118399138"/>
+       <match id="?E0000381051A" qid="Q46842698"/>
+       <match id="?E0000273397A" qid="Q16149364"/>
+       <match id="?E0000923338A" qid="Q136960545"/>
+       <match id="?E0000309608A" qid="Q55725053"/>
+       <match id="?E0000933135A" qid="Q133195714"/>
+       <match id="?E0000280949A" qid="Q55723703"/>
+       <match id="?E0000942672A" qid="Q613380"/>
+       <match id="?E0000035145A" qid="Q3093534"/>
+       <match id="?E0000315426A" qid="Q94304872"/>
+       <match id="?E0000446557A" qid="Q5231404"/>
+       <match id="?E0001553168A" qid="Q64811076"/>
+       <match id="?E0001079575A" qid="Q94360479"/>
+       <match id="?E0000803859A" qid="Q134707308"/>
+       <match id="?E0000484268A" qid="Q21229849"/>
+       <match id="?E0000380855A" qid="Q55724505"/>
+       <match id="?E0001349644A" qid="Q130788399"/>
+       <match id="?E0000484228A" qid="Q137832128"/>
+       <match id="?E0001041639A" qid="Q50426413"/>
+       <match id="?E0000915012A" qid="Q5321948"/>
+       <match id="?E0000285752A" qid="Q5750403"/>
+       <match id="?E0001308681A" qid="Q112380414"/>
+       <match id="?E0000053235A" qid="Q3123618"/>
+       <match id="?E0000298466A" qid="Q133789796"/>
+       <match id="?E0000078974A" qid="Q3051759"/>
+       <match id="?E0000069772A" qid="Q64918162"/>
+       <match id="?E0000810035A" qid="Q3470812"/>
+       <match id="?E0000023942A" qid="Q55724867"/>
+       <match id="?E0001614727A" qid="Q133677500"/>
+       <match id="?E0001614725A" qid="Q133737386"/>
+       <match id="?E0000068938A" qid="Q19399551"/>
+       <match id="?E0000371458A" qid="Q73580899"/>
+       <match id="?E0000082121A" qid="Q3301388"/>
+       <match id="?E0000359441A" qid="Q133666996"/>
+       <match id="?E0000444565A" qid="Q3336543"/>
+       <match id="?E0000855633A" qid="Q113762980"/>
+       <match id="?E0001155313A" qid="Q3124507"/>
+       <match id="?E0001155314A" qid="Q11899457"/>
+       <match id="?E0000110175A" qid="Q3330357"/>
+       <match id="?E0000004908A" qid="Q4693034"/>
+       <match id="?E0000321235A" qid="Q7347292"/>
+       <match id="?E0000366503A" qid="Q1381389"/>
+       <match id="?E0000139032A" qid="Q5234741"/>
+       <match id="?E0001357137A" qid="Q129448877"/>
+       <match id="?E0000066210A" qid="Q3700321"/>
+       <match id="?E0000936261A" qid="Q535308"/>
+       <match id="?E0000022763A" qid="Q3169351"/>
+       <match id="?E0001183517A" qid="Q133738658"/>
+       <match id="?E0000071996A" qid="Q1996069"/>
+       <match id="?E0001068422A" qid="Q131765543"/>
+       <match id="?E0000410842A" qid="Q3479410"/>
+       <match id="?E0001012444A" qid="Q5649071"/>
+       <match id="?E0000839834A" qid="Q26214646"/>
+       <match id="?E0000097185A" qid="Q6389867"/>
+       <match id="?E0000851014A" qid="Q7708469"/>
+       <match id="?E0000678244A" qid="Q24262342"/>
+       <match id="?E0000130492A" qid="Q16105357"/>
+       <match id="?E0000804115A" qid="Q99349834"/>
+       <match id="?E0000953023A" qid="Q133757170"/>
+       <match id="?E0001110763A" qid="Q133614747"/>
+       <match id="?E0000281296A" qid="Q55628266"/>
+       <match id="?E0000473462A" qid="Q95349834"/>
+       <match id="?E0000684479A" qid="Q105745963"/>
+       <match id="?E0000147542A" qid="Q133023915"/>
+       <match id="?E0000431418A" qid="Q133637863"/>
+       <match id="?E0001110416A" qid="Q22236560"/>
+       <match id="?E0001110418A" qid="Q133627283"/>
+       <match id="?E0001035627A" qid="Q3330551"/>
+       <match id="?E0001266841A" qid="Q133687314"/>
+       <match id="?E0000472016A" qid="Q55723643"/>
+       <match id="?E0000472018A" qid="Q3329681"/>
+       <match id="?E0000045175A" qid="Q59528038"/>
+       <match id="?E0000274285A" qid="Q136539395"/>
+       <match id="?E0000485115A" qid="Q105580989"/>
+       <match id="?E0000295531A" qid="Q1691084"/>
+       <match id="?E0000295521A" qid="Q539052"/>
+       <match id="?E0000140548A" qid="Q64628521"/>
+       <match id="?E0000047956A" qid="Q55620608"/>
+       <match id="?E0000147981A" qid="Q3166938"/>
+       <match id="?E0000352778A" qid="Q94287275"/>
+       <match id="?E0000934063A" qid="Q3094695"/>
+       <match id="?E0000455902A" qid="Q3193350"/>
+       <match id="?E0000896718A" qid="Q531234"/>
+       <match id="?E0000309754A" qid="Q21067172"/>
+       <match id="?E0000680708A" qid="Q27044022"/>
+       <match id="?E0001012483A" qid="Q43136886"/>
+       <match id="?E0000002071A" qid="Q3010010"/>
+       <match id="?E0000130578A" qid="Q59530679"/>
+       <match id="?E0000140862A" qid="Q133672999"/>
+       <match id="?E0000786866A" qid="Q107359005"/>
+       <match id="?E0000393494A" qid="Q6376852"/>
+       <match id="?E0000393495A" qid="Q20006933"/>
+       <match id="?E0001079413A" qid="Q116726192"/>
+       <match id="?E0000106776A" qid="Q3191408"/>
+       <match id="?E0000016626A" qid="Q3101851"/>
+       <match id="?E0000297713A" qid="Q2738241"/>
+       <match id="?E0000337683A" qid="Q112432289"/>
+       <match id="?E0000926466A" qid="Q55724864"/>
+       <match id="?E0000361126A" qid="Q23015060"/>
+       <match id="?E0000020778A" qid="Q59631694"/>
+       <match id="?E0000283984A" qid="Q1806495"/>
+       <match id="?E0000270827A" qid="Q7569602"/>
+       <match id="?E0000030199A" qid="Q55723478"/>
+       <match id="?E0000887015A" qid="Q312950"/>
+       <match id="?E0000296702A" qid="Q3350850"/>
+       <match id="?E0001502251A" qid="Q132965509"/>
+       <match id="?E0000990465A" qid="Q3158966"/>
+       <match id="?E0000442858A" qid="Q133664766"/>
+       <match id="?E0000981229A" qid="Q5082629"/>
+       <match id="?E0001318185A" qid="Q135915078"/>
+       <match id="?E0000915404A" qid="Q2738721"/>
+       <match id="?E0000670381A" qid="Q133740078"/>
+       <match id="?E0000454536A" qid="Q60884936"/>
+       <match id="?E0000105360A" qid="Q40351294"/>
+       <match id="?E0000753153A" qid="Q129659947"/>
+       <match id="?E0000279489A" qid="Q134707278"/>
+       <match id="?E0000319640A" qid="Q104764050"/>
+       <match id="?E0000281731A" qid="Q6830269"/>
+       <match id="?E0000680598A" qid="Q124857719"/>
+       <match id="?E0000279378A" qid="Q125209502"/>
+       <match id="?E0000469214A" qid="Q65116082"/>
+       <match id="?E0000057405A" qid="Q55721772"/>
+       <match id="?E0001646273A" qid="Q108881026"/>
+       <match id="?E0000458962A" qid="Q133705927"/>
+       <match id="?E0001194329A" qid="Q64681860"/>
+       <match id="?E0000907688A" qid="Q55721761"/>
+       <match id="?E0000055160A" qid="Q97564481"/>
+       <match id="?E0000678728A" qid="Q124327328"/>
+       <match id="?E0000400373A" qid="Q94361823"/>
+       <match id="?E0000911297A" qid="Q16957076"/>
+       <match id="?E0000969146A" qid="Q1682651"/>
+       <match id="?E0000969156A" qid="Q5537425"/>
+       <match id="?E0000318616A" qid="Q133713342"/>
+       <match id="?E0000318625A" qid="Q133713311"/>
+       <match id="?E0000136768A" qid="Q16187339"/>
+       <match id="?E0000005896A" qid="Q99876392"/>
+       <match id="?E0000074572A" qid="Q22911710"/>
+       <match id="?E0001143190A" qid="Q112421570"/>
+       <match id="?E0000916128A" qid="Q94686731"/>
+       <match id="?E0000443645A" qid="Q656296"/>
+       <match id="?E0000010191A" qid="Q55721919"/>
+       <match id="?E0000813589A" qid="Q94356261"/>
+       <match id="?E0001361720A" qid="Q56539662"/>
+       <match id="?E0001556829A" qid="Q80787392"/>
+       <match id="?E0000460085A" qid="Q132996188"/>
+       <match id="?E0001349638A" qid="Q3319265"/>
+       <match id="?E0000326068A" qid="Q3566011"/>
+       <match id="?E0000397469A" qid="Q101096152"/>
+       <match id="?E0001663660A" qid="Q23301838"/>
+       <match id="?E0001586297A" qid="Q133674747"/>
+       <match id="?E0001586298A" qid="Q72543240"/>
+       <match id="?E0000369223A" qid="Q590548"/>
+       <match id="?E0000313964A" qid="Q92557933"/>
+       <match id="?E0000443968A" qid="Q23760984"/>
+       <match id="?E0000356948A" qid="Q708544"/>
+       <match id="?E0000112881A" qid="Q94649749"/>
+       <match id="?E0000473460A" qid="Q130728762"/>
+       <match id="?E0000023807A" qid="Q78223711"/>
+       <match id="?E0000967202A" qid="Q16211385"/>
+       <match id="?E0000967205A" qid="Q130824338"/>
+       <match id="?E0000019430A" qid="Q50379269"/>
+       <match id="?E0000442556A" qid="Q95342701"/>
+       <match id="?E0001010011A" qid="Q22003156"/>
+       <match id="?E0000968768A" qid="Q3591440"/>
+       <match id="?E0000968769A" qid="Q3222963"/>
+       <match id="?E0000139462A" qid="Q78092830"/>
+       <match id="?E0000923851A" qid="Q134707485"/>
+       <match id="?E0000313468A" qid="Q2439673"/>
+       <match id="?E0000285418A" qid="Q130770566"/>
+       <match id="?E0000381138A" qid="Q55722808"/>
+       <match id="?E0000077877A" qid="Q3426720"/>
+       <match id="?E0000470822A" qid="Q133631311"/>
+       <match id="?E0000075731A" qid="Q124986970"/>
+       <match id="?E0000684896A" qid="Q6172025"/>
+       <match id="?E0000378309A" qid="Q7823361"/>
+       <match id="?E0000446763A" qid="Q85094347"/>
+       <match id="?E0000443460A" qid="Q87775023"/>
+       <match id="?E0000012446A" qid="Q2994504"/>
+       <match id="?E0000026846A" qid="Q77010589"/>
+       <match id="?E0000315822A" qid="Q3329783"/>
+       <match id="?E0000063303A" qid="Q133761582"/>
+       <match id="?E0000044626A" qid="Q102405415"/>
+       <match id="?E0000298911A" qid="Q23020872"/>
+       <match id="?E0000045748A" qid="Q380078"/>
+       <match id="?E0000034494A" qid="Q106990477"/>
+       <match id="?E0000028517A" qid="Q94122218"/>
+       <match id="?E0001091289A" qid="Q108477494"/>
+       <match id="?E0000313674A" qid="Q6310340"/>
+       <match id="?E0001080695A" qid="Q951624"/>
+       <match id="?E0001121959A" qid="Q1288608"/>
+       <match id="?E0001591009A" qid="Q130791862"/>
+       <match id="?E0001591007A" qid="Q137005895"/>
+       <match id="?E0000116781A" qid="Q124301711"/>
+       <match id="?E0000345778A" qid="Q138297025"/>
+       <match id="?E0000345730A" qid="Q138076416"/>
+       <match id="?E0000384976A" qid="Q55218818"/>
+       <match id="?E0000471713A" qid="Q3279760"/>
+       <match id="?E0000387644A" qid="Q137778748"/>
+  
+       <match id="?E0000279362A" qid="Q111206965"/>
+       <match id="?E0001178461A" qid="Q133889360"/>
+       <match id="?E0000445880A" qid=""/>
+       <match id="?E0001586533A" qid="Q20751523"/>
+       <match id="?E0000312868A" qid="Q135937271"/>
+       <match id="?E0001365046A" qid=""/>
+       <match id="?E0000005025A" qid="Q2822453"/>
+       <match id="?E0001442826A" qid="Q49505338"/>
+       <match id="?E0000936331A" qid="Q4650839"/>
+       <match id="?E0000342743A" qid=""/>
+       <match id="?E0001627665A" qid=""/>
+       <match id="?E0000443918A" qid=""/>
+       <match id="?E0001333178A" qid=""/>
+       <match id="?E0000004908A" qid="Q4693034"/>
+       <match id="?E0000889280A" qid="Q115578851"/>
+       <match id="?E0000897039A" qid=""/>
+       <match id="?E0000114713A" qid="Q138008720"/>
+       <match id="?E0000287410A" qid="Q138010402"/>
+       <match id="?E0000338113A" qid=""/>
+       <match id="?E0000431422A" qid=""/>
+       <match id="?E0000363690A" qid="Q4745666"/>
+       <match id="?E0000133477A" qid="Q924335"/>
+       <match id="?E0000116045A" qid="Q106832408"/>
+       <match id="?E0000969877A" qid="Q3329590"/>
+       <match id="?E0001659712A" qid=""/>
+       <match id="?E0000112794A" qid="Q116890758"/>
+       <match id="?E0000672693A" qid="Q99588977"/>
+       <match id="?E0000005898A" qid="Q129765375"/>
+       <match id="?E0000283474A" qid=""/>
+       <match id="?E0001035291A" qid="Q705545"/>
+       <match id="?E0001048822A" qid="Q59534656"/>
+       <match id="?E0000298464A" qid="Q4796830"/>
+       <match id="?E0001022719A" qid="Q670250"/>
+       <match id="?E0000092603A" qid="Q670250"/>
+       <match id="?E0000005915A" qid="Q108878047"/>
+       <match id="?E0000485200A" qid=""/>
+       <match id="?E0000680652A" qid="Q2864551"/>
+       <match id="?E0000829294A" qid=""/>
+       <match id="?E0000342331A" qid=""/>
+       <match id="?E0000676006A" qid=""/>
+       <match id="?E0000964719A" qid=""/>
+       <match id="?E0001300387A" qid="Q20876003"/>
+       <match id="?E0000005946A" qid="Q99589269"/>
+       <match id="?E0000281588A" qid=""/>
+       <match id="?E0000309248A" qid=""/>
+       <match id="?E0000308892A" qid=""/>
+       <match id="?E0001284152A" qid=""/>
+       <match id="?E0000991400A" qid=""/>
+       <match id="?E0000975680A" qid=""/>
+       <match id="?E0000926006A" qid="Q2980187"/>
+       <match id="?E0000974684A" qid=""/>
+       <match id="?E0000340045A" qid=""/>
+       <match id="?E0000786814A" qid=""/>
+       <match id="?E0000772046A" qid=""/>
+       <match id="?E0001030770A" qid=""/>
+       <match id="?E0000006021A" qid="Q30293242"/>
+       <match id="?E0000459569A" qid=""/>
+       <match id="?E0000846020A" qid=""/>
+       <match id="?E0000093434A" qid="Q2867702"/>
+       <match id="?E0000445802A" qid=""/>
+       <match id="?E0001326924A" qid=""/>
+       <match id="?E0000933232A" qid=""/>
+       <match id="?E0000388786A" qid=""/>
+       <match id="?E0000347005A" qid=""/>
+       <match id="?E0000444666A" qid=""/>
+       <match id="?E0000385957A" qid=""/>
+       <match id="?E0000803682A" qid=""/>
+       <match id="?E0000443714A" qid=""/>
+       <match id="?E0001193282A" qid=""/>
+       <match id="?E0000394962A" qid=""/>
+       <match id="?E0000682276A" qid=""/>
+       <match id="?E0000006759A" qid="Q110643224"/>
+       <match id="?E0000382229A" qid="Q100329477"/>
+       <match id="?E0000346923A" qid=""/>
+       <match id="?E0000344345A" qid=""/>
+       <match id="?E0000765771A" qid=""/>
+       <match id="?E0000780901A" qid=""/>
+       <match id="?E0000093871A" qid=""/>
+       <match id="?E0000439266A" qid=""/>
+       <match id="?E0000123991A" qid="Q99589371"/>
+       <match id="?E0000397032A" qid=""/>
+       <match id="?E0000403482A" qid=""/>
+       <match id="?E0000438511A" qid=""/>
+       <match id="?E0000363863A" qid=""/>
+       <match id="?E0000339454A" qid="Q137673172"/>
+       <match id="?E0000147690A" qid=""/>
+       <match id="?E0000443804A" qid=""/>
+       <match id="?E0001657591A" qid=""/>
+       <match id="?E0000096859A" qid=""/>
+       <match id="?E0000006761A" qid="Q106806259"/>
+       <match id="?E0000825432A" qid=""/>
+       <match id="?E0000124769A" qid="Q105947484"/>
+       <match id="?E0000344440A" qid=""/>
+       <match id="?E0000392960A" qid=""/>
+       <match id="?E0000341670A" qid=""/>
+       <match id="?E0000006763A" qid=""/>
+       <match id="?E0000484644A" qid=""/>
+       <match id="?E0000380824A" qid=""/>
+       <match id="?E0000682674A" qid=""/>
+       <match id="?E0000810048A" qid=""/>
+       <match id="?E0000380820A" qid=""/>
+       <match id="?E0000384915A" qid=""/>
+       <match id="?E0000137159A" qid=""/>
+       <match id="?E0000346877A" qid=""/>
+       <match id="?E0000433391A" qid=""/>
+       <match id="?E0000369103A" qid=""/>
+       <match id="?E0000484680A" qid=""/>
+       <match id="?E0000461423A" qid=""/>
+       <match id="?E0000380752A" qid=""/>
+       <match id="?E0000349963A" qid=""/>
+       <match id="?E0001136460A" qid="Q106847255"/>
+       <match id="?E0000434857A" qid=""/>
+       <match id="?E0000335715A" qid="Q133505715"/>
+       <match id="?E0000321892A" qid=""/>
+       <match id="?E0000373085A" qid=""/>
+       <match id="?E0000396099A" qid=""/>
+       <match id="?E0000403525A" qid=""/>
+       <match id="?E0000342584A" qid=""/>
+       <match id="?E0001384539A" qid=""/>
+       <match id="?E0000344367A" qid=""/>
+       <match id="?E0000430313A" qid=""/>
+       <match id="?E0000449290A" qid=""/>
+       <match id="?E0001657675A" qid=""/>
+       <match id="?E0000684459A" qid=""/>
+       <match id="?E0001052279A" qid="Q3215842"/>
+       <match id="?E0000350692A" qid=""/>
+       <match id="?E0000093898A" qid=""/>
+       <match id="?E0000113496A" qid="Q109476294"/>
+       <match id="?E0001136390A" qid="Q133505492"/>
+       <match id="?E0000006767A" qid=""/>
+       <match id="?E0000450448A" qid=""/>
+       <match id="?E0000435120A" qid=""/>
+       <match id="?E0000362738A" qid=""/>
+       <match id="?E0000340352A" qid=""/>
+       <match id="?E0000443896A" qid=""/>
+       <match id="?E0000390766A" qid=""/>
+       <match id="?E0000413806A" qid=""/>
+       <match id="?E0000470369A" qid=""/>
+       <match id="?E0000399068A" qid=""/>
+       <match id="?E0000380823A" qid=""/>
+       <match id="?E0000418631A" qid=""/>
+       <match id="?E0000346362A" qid=""/>
+       <match id="?E0001131556A" qid=""/>
+       <match id="?E0000461734A" qid=""/>
+       <match id="?E0000390025A" qid=""/>
+       <match id="?E0000385947A" qid=""/>
+       <match id="?E0001565781A" qid=""/>
+       <match id="?E0000357701A" qid=""/>
+       <match id="?E0000403483A" qid=""/>
+       <match id="?E0000357627A" qid=""/>
+       <match id="?E0000093901A" qid=""/>
+       <match id="?E0000367861A" qid=""/>
+       <match id="?E0000002917A" qid=""/>
+       <match id="?E0000382204A" qid=""/>
+       <match id="?E0000006768A" qid="Q99589521"/>
+       <match id="?E0000390074A" qid=""/>
+       <match id="?E0000379808A" qid=""/>
+       <match id="?E0000093905A" qid=""/>
+       <match id="?E0000443737A" qid=""/>
+       <match id="?E0000427176A" qid=""/>
+       <match id="?E0000392440A" qid=""/>
+       <match id="?E0000397041A" qid=""/>
+       <match id="?E0001390191A" qid=""/>
+       <match id="?E0000392399A" qid=""/>
+       <match id="?E0000444735A" qid=""/>
+       <match id="?E0001162156A" qid=""/>
+       <match id="?E0000349638A" qid=""/>
+       <match id="?E0000337769A" qid=""/>
+       <match id="?E0000487610A" qid=""/>
+       <match id="?E0000461931A" qid=""/>
+       <match id="?E0000417286A" qid=""/>
+       <match id="?E0000439166A" qid=""/>
+       <match id="?E0000385890A" qid=""/>
+       <match id="?E0000344143A" qid=""/>
+       <match id="?E0000485363A" qid=""/>
+       <match id="?E0000006816A" qid=""/>
+       <match id="?E0000048688A" qid=""/>
+       <match id="?E0001548292A" qid=""/>
+       <match id="?E0001075532A" qid="Q105547149"/>
+       <match id="?E0000112838A" qid="Q111359229"/>
+       <match id="?E0000469796A" qid="Q99589650"/>
+       <match id="?E0000000090A" qid="Q634298"/>
+       <match id="?E0000111335A" qid="Q25039572"/>
+       <match id="?E0000118773A" qid="Q887686"/>
+       <match id="?E0000877383A" qid=""/>
+       <match id="?E0000355884A" qid=""/>
+       <match id="?E0000392390A" qid=""/>
+       <match id="?E0000413887A" qid=""/>
+       <match id="?E0000878801A" qid=""/>
+       <match id="?E0000433191A" qid=""/>
+       <match id="?E0001421395A" qid=""/>
+       <match id="?E0000420555A" qid=""/>
+       <match id="?E0001406296A" qid=""/>
+       <match id="?E0000010719A" qid="Q2901573"/>
+       <match id="?E0001230030A" qid="Q56011668"/>
+       <match id="?E0000679036A" qid="Q39628"/>
+       <match id="?E0001007329A" qid=""/>
+       <match id="?E0001300228A" qid=""/>
+       <match id="?E0000010787A" qid="Q81843750"/>
+       <match id="?E0000321127A" qid="Q193563"/>
+       <match id="?E0000353481A" qid="Q3027515"/>
+       <match id="?E0000350770A" qid="Q67196165"/>
+       <match id="?E0000000002A" qid="Q63882068"/>
+       <match id="?E0000011114A" qid="Q2901310"/>
+       <match id="?E0001442508A" qid="Q2901908"/>
+       <match id="?E0000897649A" qid=""/>
+       <match id="?E0001071382A" qid=""/>
+       <match id="?E0000803164A" qid=""/>
+       <match id="?E0000471269A" qid=""/>
+       <match id="?E0001287936A" qid=""/>
+       <match id="?E0000446320A" qid=""/>
+       <match id="?E0000991642A" qid=""/>
+       <match id="?E0000099217A" qid="Q21658543"/>
+       <match id="?E0001388704A" qid="Q4974195"/>
+       <match id="?E0000350717A" qid=""/>
+       <match id="?E0000974959A" qid=""/>
+       <match id="?E0001161694A" qid="Q106980558"/>
+       <match id="?E0000108254A" qid="Q55137840"/>
+       <match id="?E0000386497A" qid=""/>
+       <match id="?E0000780702A" qid=""/>
+       <match id="?E0000359759A" qid="Q1026926"/>
+       <match id="?E0000285517A" qid="Q137798"/>
+       <match id="?E0000864900A" qid="Q5369599"/>
+       <match id="?E0000024914A" qid="Q11734722"/>
+       <match id="?E0000127711A" qid=""/>
+       <match id="?E0000908147A" qid="Q104820197"/>
+       <match id="?E0001295716A" qid=""/>
+       <match id="?E0000431761A" qid="Q6590378"/>
+       <match id="?E0000013489A" qid="Q109424479"/>
+       <match id="?E0000013529A" qid="Q1328640"/>
+       <match id="?E0000014092A" qid="Q3010002"/>
+       <match id="?E0001524628A" qid="Q3010002"/>
+       <match id="?E0001201031A" qid="Q3010002"/>
+       <match id="?E0000002071A" qid="Q3010010"/>
+       <match id="?E0000682908A" qid="Q592970"/>
+       <match id="?E0001181265A" qid="Q592970"/>
+       <match id="?E0001287624A" qid="Q592970"/>
+       <match id="?E0000015957A" qid="Q3010022"/>
+       <match id="?E0000414798A" qid="Q3010022"/>
+       <match id="?E0001217482A" qid="Q3010022"/>
+       <match id="?E0000320601A" qid="Q6461631"/>
+       <match id="?E0000013630A" qid="Q2944913"/>
+       <match id="?E0000439556A" qid=""/>
+       <match id="?E0000037841A" qid=""/>
+       <match id="?E0000283691A" qid=""/>
+       <match id="?E0000013643A" qid="Q1033705"/>
+       <match id="?E0000127262A" qid="Q89042946"/>
+       <match id="?E0001187710A" qid="Q124673598"/>
+       <match id="?E0000037919A" qid="Q130598439"/>
+       <match id="?E0001182534A" qid=""/>
+       <match id="?E0001168987A" qid="Q42417500"/>
+       <match id="?E0001168790A" qid=""/>
+       <match id="?E0000139002A" qid="Q2945061"/>
+       <match id="?E0000113560A" qid="Q138004099"/>
+       <match id="?E0001373841A" qid=""/>
+       <match id="?E0000279199A" qid=""/>
+       <match id="?E0001176879A" qid="Q3781326"/>
+       <match id="?E0000274281A" qid="Q100998705"/>
+       <match id="?E0000313788A" qid="Q99589802"/>
+       <match id="?E0000352176A" qid="Q115733328"/>
+       <match id="?E0001072386A" qid="Q98545206"/>
+       <match id="?E0000313370A" qid="Q59541543"/>
+       <match id="?E0000487987A" qid="Q107065206"/>
+       <match id="?E0000314191A" qid="Q18219959"/>
+       <match id="?E0000113186A" qid="Q3329585"/>
+       <match id="?E0000149731A" qid=""/>
+       <match id="?E0001192040A" qid=""/>
+       <match id="?E0001619372A" qid="Q108675504"/>
+       <match id="?E0000831082A" qid="Q2945101"/>
+       <match id="?E0000344713A" qid="Q2945260"/>
+       <match id="?E0000342894A" qid=""/>
+       <match id="?E0000129534A" qid="Q126365902"/>
+       <match id="?E0000308607A" qid="Q104887522"/>
+       <match id="?E0000137711A" qid="Q99590832"/>
+       <match id="?E0001357137A" qid="Q5159778"/>
+       <match id="?E0000313660A" qid="Q2944881"/>
+       <match id="?E0000388812A" qid="Q2944881"/>
+       <match id="?E0000349522A" qid="Q2944881"/>
+       <match id="?E0000687358A" qid=""/>
+       <match id="?E0001253159A" qid=""/>
+       <match id="?E0000752747A" qid="Q2013317"/>
+       <match id="?E0000390156A" qid="Q2945154"/>
+       <match id="?E0000083363A" qid="Q2945802"/>
+       <match id="?E0000294242A" qid="Q59535512"/>
+       <match id="?E0000145989A" qid="Q2974816"/>
+       <match id="?E0000920969A" qid="Q2946017"/>
+       <match id="?E0000118058A" qid="Q95691386"/>
+       <match id="?E0000038064A" qid="Q2944881"/>
+       <match id="?E0000125962A" qid="Q2944881"/>
+       <match id="?E0001214575A" qid=""/>
+       <match id="?E0001072407A" qid="Q5762082"/>
+       <match id="?E0001013220A" qid=""/>
+       <match id="?E0000008058A" qid="Q95690585"/>
+       <match id="?E0000014299A" qid="Q168737"/>
+       <match id="?E0000289144A" qid=""/>
+       <match id="?E0000450049A" qid="Q6506714"/>
+       <match id="?E0000039070A" qid="Q30338503"/>
+       <match id="?E0000140226A" qid=""/>
+       <match id="?E0000390123A" qid="Q775591"/>
+       <match id="?E0000893615A" qid=""/>
+       <match id="?E0000974972A" qid=""/>
+       <match id="?E0000689557A" qid=""/>
+       <match id="?E0000066210A" qid="Q3700321"/>
+       <match id="?E0000040797A" qid="Q2983559"/>
+       <match id="?E0000124919A" qid="Q2983727"/>
+       <match id="?E0000040323A" qid="Q118186795"/>
+       <match id="?E0000126216A" qid="Q138008931"/>
+       <match id="?E0000355968A" qid=""/>
+       <match id="?E0000981756A" qid="Q1517325"/>
+       <match id="?E0000313460A" qid=""/>
+       <match id="?E0000119299A" qid=""/>
+       <match id="?E0000014435A" qid="Q8908"/>
+       <match id="?E0000016798A" qid="Q87727973"/>
+       <match id="?E0000016845A" qid=""/>
+       <match id="?E0000000572A" qid=""/>
+       <match id="?E0000016066A" qid="Q2993823"/>
+       <match id="?E0000294888A" qid=""/>
+       <match id="?E0000111734A" qid="Q99588977"/>
+       <match id="?E0001035631A" qid="Q1127240"/>
+       <match id="?E0000012446A" qid="Q2994504"/>
+       <match id="?E0001033306A" qid="Q5164961"/>
+       <match id="?E0000422529A" qid=""/>
+       <match id="?E0000118328A" qid=""/>
+       <match id="?E0000390252A" qid=""/>
+       <match id="?E0001219209A" qid="Q23786353"/>
+       <match id="?E0000030525A" qid="Q68462430"/>
+       <match id="?E0000005743A" qid=""/>
+       <match id="?E0000484734A" qid=""/>
+       <match id="?E0000484665A" qid="Q2983587"/>
+       <match id="?E0001573360A" qid=""/>
+       <match id="?E0000133961A" qid="Q95692283"/>
+       <match id="?E0000360914A" qid=""/>
+       <match id="?E0000361097A" qid="Q1189960"/>
+       <match id="?E0000681858A" qid=""/>
+       <match id="?E0000002733A" qid="Q1504424"/>
+       <match id="?E0000842003A" qid="Q107105002"/>
+       <match id="?E0000390125A" qid=""/>
+       <match id="?E0001571697A" qid=""/>
+       <match id="?E0000907484A" qid="Q72084212"/>
+       <match id="?E0000411268A" qid=""/>
+       <match id="?E0000933139A" qid=""/>
+       <match id="?E0001657589A" qid=""/>
+       <match id="?E0000935118A" qid="Q107105456"/>
+       <match id="?E0000969896A" qid="Q111149667"/>
+       <match id="?E0001221833A" qid="Q104834747"/>
+       <match id="?E0000073761A" qid="Q41155955"/>
+       <match id="?E0000342582A" qid="Q41155955"/>
+       <match id="?E0000344595A" qid="Q3577923"/>
+       <match id="?E0000019200A" qid="Q3577923"/>
+       <match id="?E0000002339A" qid="Q273527"/>
+       <match id="?E0000129079A" qid="Q3577975"/>
+       <match id="?E0000393093A" qid="Q3578612"/>
+       <match id="?E0000390804A" qid=""/>
+       <match id="?E0001352631A" qid=""/>
+       <match id="?E0000000610A" qid="Q3234963"/>
+       <match id="?E0000385024A" qid=""/>
+       <match id="?E0000049558A" qid="Q133505338"/>
+       <match id="?E0000446766A" qid=""/>
+       <match id="?E0000388851A" qid=""/>
+       <match id="?E0000434545A" qid="Q3579570"/>
+       <match id="?E0000397265A" qid=""/>
+       <match id="?E0000346498A" qid=""/>
+       <match id="?E0000049591A" qid=""/>
+       <match id="?E0000049600A" qid=""/>
+       <match id="?E0000390822A" qid=""/>
+       <match id="?E0000007179A" qid="Q110946687"/>
+       <match id="?E0000344439A" qid=""/>
+       <match id="?E0000007221A" qid="Q108878238"/>
+       <match id="?E0000007240A" qid="Q80002315"/>
+       <match id="?E0000349964A" qid=""/>
+       <match id="?E0000429064A" qid=""/>
+       <match id="?E0000443932A" qid=""/>
+       <match id="?E0000691856A" qid=""/>
+       <match id="?E0000345696A" qid=""/>
+       <match id="?E0000022764A" qid="Q705545"/>
+       <match id="?E0001188176A" qid=""/>
+       <match id="?E0000275436A" qid="Q138009959"/>
+       <match id="?E0000355969A" qid="Q131465463"/>
+       <match id="?E0000383827A" qid=""/>
+       <match id="?E0001556819A" qid="Q105947484"/>
+       <match id="?E0000333130A" qid=""/>
+       <match id="?E0001179155A" qid=""/>
+       <match id="?E0000403662A" qid="Q124362754"/>
+       <match id="?E0001028095A" qid=""/>
+       <match id="?E0001284686A" qid=""/>
+       <match id="?E0000990373A" qid=""/>
+       <match id="?E0000471778A" qid="Q124433591"/>
+       <match id="?E0000289413A" qid=""/>
+       <match id="?E0000313611A" qid="Q5417350"/>
+       <match id="?E0000020120A" qid="Q1148233"/>
+       <match id="?E0000100311A" qid="Q104708960"/>
+       <match id="?E0001155316A" qid="Q26962518"/>
+       <match id="?E0000050620A" qid="Q3091501"/>
+       <match id="?E0000297797A" qid=""/>
+       <match id="?E0001603833A" qid=""/>
+       <match id="?E0000977862A" qid="Q3208845"/>
+       <match id="?E0001388705A" qid=""/>
+       <match id="?E0000962438A" qid="Q105947756"/>
+       <match id="?E0000122911A" qid="Q3075632"/>
+       <match id="?E0000923129A" qid="Q2871761"/>
+       <match id="?E0001606528A" qid=""/>
+       <match id="?E0001221050A" qid=""/>
+       <match id="?E0000275498A" qid="Q138009959"/>
+       <match id="?E0000147991A" qid="Q1435689"/>
+       <match id="?E0000293683A" qid=""/>
+       <match id="?E0000488257A" qid=""/>
+       <match id="?E0001208667A" qid="Q61781086"/>
+       <match id="?E0000446321A" qid=""/>
+       <match id="?E0001128317A" qid="Q3087629"/>
+       <match id="?E0001035636A" qid="Q137457275"/>
+       <match id="?E0001051786A" qid=""/>
+       <match id="?E0001110728A" qid=""/>
+       <match id="?E0000390238A" qid="Q99589521"/>
+       <match id="?E0000953611A" qid=""/>
+       <match id="?E0000485346A" qid=""/>
+       <match id="?E0000994011A" qid=""/>
+       <match id="?E0000131033A" qid="Q129652943"/>
+       <match id="?E0000461333A" qid=""/>
+       <match id="?E0001009161A" qid=""/>
+       <match id="?E0000419031A" qid="Q129654053"/>
+       <match id="?E0000275136A" qid="Q110729035"/>
+       <match id="?E0000317690A" qid=""/>
+       <match id="?E0000121659A" qid="Q129657851"/>
+       <match id="?E0000673239A" qid=""/>
+       <match id="?E0000087699A" qid=""/>
+       <match id="?E0000688013A" qid="Q129653344"/>
+       <match id="?E0000053877A" qid="Q129655550"/>
+       <match id="?E0000120023A" qid="Q3094641"/>
+       <match id="?E0000066899A" qid="Q104764319"/>
+       <match id="?E0000889382A" qid=""/>
+       <match id="?E0000148851A" qid="Q3094629"/>
+       <match id="?E0000861371A" qid="Q5159778"/>
+       <match id="?E0000688036A" qid=""/>
+       <match id="?E0000349529A" qid=""/>
+       <match id="?E0000021584A" qid=""/>
+       <match id="?E0000130168A" qid=""/>
+       <match id="?E0001172992A" qid="Q104764319"/>
+       <match id="?E0001016247A" qid="Q117795607"/>
+       <match id="?E0000301162A" qid=""/>
+       <match id="?E0001406280A" qid=""/>
+       <match id="?E0000448632A" qid="Q20006926"/>
+       <match id="?E0000402039A" qid=""/>
+       <match id="?E0000312846A" qid=""/>
+       <match id="?E0000949417A" qid=""/>
+       <match id="?E0000021595A" qid="Q30748589"/>
+       <match id="?E0000053916A" qid=""/>
+       <match id="?E0000130885A" qid=""/>
+       <match id="?E0000952561A" qid=""/>
+       <match id="?E0000046424A" qid="Q106717762"/>
+       <match id="?E0000021589A" qid="Q129659455"/>
+       <match id="?E0000280037A" qid=""/>
+       <match id="?E0000437811A" qid="Q3094666"/>
+       <match id="?E0000454383A" qid="Q6462707"/>
+       <match id="?E0000474883A" qid="Q3094629"/>
+       <match id="?E0000270147A" qid="Q138009926"/>
+       <match id="?E0000332988A" qid="Q95689308"/>
+       <match id="?E0000392455A" qid=""/>
+       <match id="?E0000138108A" qid=""/>
+       <match id="?E0001462787A" qid=""/>
+       <match id="?E0000445917A" qid="Q129653828"/>
+       <match id="?E0001045168A" qid="Q129654699"/>
+       <match id="?E0000301095A" qid=""/>
+       <match id="?E0001136426A" qid="Q111359188"/>
+       <match id="?E0000064569A" qid=""/>
+       <match id="?E0000298692A" qid=""/>
+       <match id="?E0001170342A" qid=""/>
+       <match id="?E0000685021A" qid=""/>
+       <match id="?E0000021591A" qid="Q17489128"/>
+       <match id="?E0000491462A" qid=""/>
+       <match id="?E0000390239A" qid=""/>
+       <match id="?E0000339258A" qid=""/>
+       <match id="?E0000682749A" qid=""/>
+       <match id="?E0000688032A" qid=""/>
+       <match id="?E0000944582A" qid="Q24192775"/>
+       <match id="?E0001212238A" qid=""/>
+       <match id="?E0000406179A" qid=""/>
+       <match id="?E0000996625A" qid=""/>
+       <match id="?E0000129397A" qid=""/>
+       <match id="?E0000680581A" qid="Q2742485"/>
+       <match id="?E0000390768A" qid="Q24192775"/>
+       <match id="?E0000675428A" qid=""/>
+       <match id="?E0000687359A" qid=""/>
+       <match id="?E0000953027A" qid="Q19061288"/>
+       <match id="?E0000146858A" qid="Q106729562"/>
+       <match id="?E0001079631A" qid="Q76631852"/>
+       <match id="?E0000021593A" qid="Q1068063"/>
+       <match id="?E0000443645A" qid="Q656296"/>
+       <match id="?E0000280090A" qid=""/>
+       <match id="?E0001214840A" qid="Q105806663"/>
+       <match id="?E0000053985A" qid=""/>
+       <match id="?E0000684554A" qid=""/>
+       <match id="?E0001199332A" qid=""/>
+       <match id="?E0000296860A" qid=""/>
+       <match id="?E0000053989A" qid="Q6461631"/>
+       <match id="?E0000921249A" qid=""/>
+       <match id="?E0000129536A" qid="Q106085049"/>
+       <match id="?E0000837334A" qid=""/>
+       <match id="?E0000753153A" qid="Q129659947"/>
+       <match id="?E0001018980A" qid="Q129659947"/>
+       <match id="?E0000469978A" qid="Q14629220"/>
+       <match id="?E0000148524A" qid="Q129656637"/>
+       <match id="?E0000866665A" qid=""/>
+       <match id="?E0000270013A" qid="Q129657195"/>
+       <match id="?E0001099855A" qid=""/>
+       <match id="?E0000284860A" qid=""/>
+       <match id="?E0000146286A" qid="Q129658216"/>
+       <match id="?E0000472959A" qid="Q17489128"/>
+       <match id="?E0000315444A" qid="Q107051263"/>
+       <match id="?E0000352194A" qid=""/>
+       <match id="?E0000866631A" qid="Q21187911"/>
+       <match id="?E0000021596A" qid="Q104764319"/>
+       <match id="?E0000934063A" qid="Q3094695"/>
+       <match id="?E0000296818A" qid="Q5519001"/>
+       <match id="?E0000447777A" qid="Q283498"/>
+       <match id="?E0000053564A" qid="Q96186884"/>
+       <match id="?E0000999370A" qid=""/>
+       <match id="?E0000901930A" qid="Q93605565"/>
+       <match id="?E0000022456A" qid="Q106847255"/>
+       <match id="?E0000432998A" qid="Q122921672"/>
+       <match id="?E0000055290A" qid=""/>
+       <match id="?E0000022620A" qid="Q222595"/>
+       <match id="?E0000055732A" qid="Q3115233"/>
+       <match id="?E0001533873A" qid=""/>
+       <match id="?E0000114289A" qid=""/>
+       <match id="?E0000285754A" qid=""/>
+       <match id="?E0000288354A" qid="Q5154092"/>
+       <match id="?E0000289146A" qid=""/>
+       <match id="?E0001361721A" qid=""/>
+       <match id="?E0000022801A" qid="Q111668302"/>
+       <match id="?E0000316234A" qid="Q100735035"/>
+       <match id="?E0000952565A" qid=""/>
+       <match id="?E0000852006A" qid=""/>
+       <match id="?E0001301105A" qid=""/>
+       <match id="?E0000346731A" qid=""/>
+       <match id="?E0000145846A" qid=""/>
+       <match id="?E0001492421A" qid="Q1641278"/>
+       <match id="?E0000445907A" qid="Q125729789"/>
+       <match id="?E0000422800A" qid=""/>
+       <match id="?E0000437843A" qid="Q136263004"/>
+       <match id="?E0000287098A" qid=""/>
+       <match id="?E0000945209A" qid="Q100329477"/>
+       <match id="?E0001022531A" qid=""/>
+       <match id="?E0000308891A" qid=""/>
+       <match id="?E0000342586A" qid="Q2983556"/>
+       <match id="?E0000317661A" qid=""/>
+       <match id="?E0001035635A" qid="Q1665209"/>
+       <match id="?E0000279206A" qid=""/>
+       <match id="?E0000446762A" qid=""/>
+       <match id="?E0001018663A" qid=""/>
+       <match id="?E0000461093A" qid=""/>
+       <match id="?E0001327260A" qid=""/>
+       <match id="?E0001010599A" qid="Q1683453"/>
+       <match id="?E0000996292A" qid="Q1683453"/>
+       <match id="?E0001312056A" qid=""/>
+       <match id="?E0001408611A" qid="Q107183378"/>
+       <match id="?E0001488302A" qid="Q3178200"/>
+       <match id="?E0000357643A" qid="Q135532445"/>
+       <match id="?E0001013224A" qid=""/>
+       <match id="?E0001465009A" qid=""/>
+       <match id="?E0001442833A" qid="Q20870269"/>
+       <match id="?E0000439771A" qid="Q6413526"/>
+       <match id="?E0000462681A" qid="Q97406119"/>
+       <match id="?E0001210431A" qid="Q1519715"/>
+       <match id="?E0001440888A" qid=""/>
+       <match id="?E0001428759A" qid="Q1668856"/>
+       <match id="?E0000968460A" qid="Q831173"/>
+       <match id="?E0001205915A" qid=""/>
+       <match id="?E0000145878A" qid=""/>
+       <match id="?E0000436415A" qid="Q110280367"/>
+       <match id="?E0000974769A" qid=""/>
+       <match id="?E0000323069A" qid="Q107106160"/>
+       <match id="?E0000003165A" qid="Q141810"/>
+       <match id="?E0000026085A" qid="Q3219757"/>
+       <match id="?E0000968769A" qid="Q3222963"/>
+       <match id="?E0000281500A" qid="Q95690827"/>
+       <match id="?E0001177668A" qid=""/>
+       <match id="?E0000367888A" qid=""/>
+       <match id="?E0000942985A" qid="Q99591542"/>
+       <match id="?E0000810238A" qid=""/>
+       <match id="?E0001211442A" qid="Q139398"/>
+       <match id="?E0000371456A" qid="Q1641836"/>
+       <match id="?E0000351140A" qid=""/>
+       <match id="?E0000392398A" qid=""/>
+       <match id="?E0001365064A" qid="Q59541543"/>
+       <match id="?E0000366399A" qid="Q7052540"/>
+       <match id="?E0000786031A" qid="Q6722000"/>
+       <match id="?E0000065911A" qid="Q6724624"/>
+       <match id="?E0000382230A" qid="Q95626537"/>
+       <match id="?E0000685229A" qid="Q6906244"/>
+       <match id="?E0000898022A" qid="Q104708972"/>
+       <match id="?E0001326925A" qid=""/>
+       <match id="?E0001096686A" qid=""/>
+       <match id="?E0001318680A" qid="Q3279750"/>
+       <match id="?E0000112549A" qid="Q3279765"/>
+       <match id="?E0000127999A" qid="Q3279759"/>
+       <match id="?E0000471713A" qid="Q125490767"/>
+       <match id="?E0001373835A" qid="Q3279763"/>
+       <match id="?E0000119781A" qid="Q3279769"/>
+       <match id="?E0001638258A" qid="Q3279752"/>
+       <match id="?E0001638257A" qid="Q124463805"/>
+       <match id="?E0000128001A" qid="Q3279755"/>
+       <match id="?E0000283981A" qid="Q3279757"/>
+       <match id="?E0001140709A" qid="Q3279762"/>
+       <match id="?E0000129743A" qid="Q57943665"/>
+       <match id="?E0000280503A" qid="Q57943665"/>
+       <match id="?E0001090735A" qid="Q111724635"/>
+       <match id="?E0000027528A" qid="Q3578612"/>
+       <match id="?E0001388439A" qid="Q25706933"/>
+       <match id="?E0000905744A" qid=""/>
+       <match id="?E0000810096A" qid=""/>
+       <match id="?E0000406094A" qid="Q14942938"/>
+       <match id="?E0000417245A" qid=""/>
+       <match id="?E0000346224A" qid=""/>
+       <match id="?E0001031191A" qid="Q6771667"/>
+       <match id="?E0000458920A" qid="Q130751531"/>
+       <match id="?E0000003393A" qid="Q201492"/>
+       <match id="?E0001107784A" qid="Q201492"/>
+       <match id="?E0000274504A" qid="Q101009330"/>
+       <match id="?E0000015532A" qid="Q62535993"/>
+       <match id="?E0000003429A" qid="Q6802196"/>
+       <match id="?E0000109393A" qid=""/>
+       <match id="?E0000484177A" qid=""/>
+       <match id="?E0000443931A" qid=""/>
+       <match id="?E0000320645A" qid=""/>
+       <match id="?E0000936071A" qid="Q1667781"/>
+       <match id="?E0001022883A" qid=""/>
+       <match id="?E0000112444A" qid=""/>
+       <match id="?E0000373083A" qid=""/>
+       <match id="?E0000984310A" qid=""/>
+       <match id="?E0001349638A" qid="Q3319265"/>
+       <match id="?E0000420300A" qid="Q13674616"/>
+       <match id="?E0000679436A" qid=""/>
+       <match id="?E0000445800A" qid="Q124463777"/>
+       <match id="?E0000003804A" qid="Q860812"/>
+       <match id="?E0000450538A" qid=""/>
+       <match id="?E0000299831A" qid="Q21619145"/>
+       <match id="?E0000028921A" qid="Q3329087"/>
+       <match id="?E0001501865A" qid="Q17989829"/>
+       <match id="?E0000288356A" qid="Q2355659"/>
+       <match id="?E0000105585A" qid="Q1032269"/>
+       <match id="?E0000001571A" qid="Q2235294"/>
+       <match id="?E0000946173A" qid="Q17512509"/>
+       <match id="?E0000101491A" qid="Q2235294"/>
+       <match id="?E0000489722A" qid="Q2235294"/>
+       <match id="?E0000283657A" qid="Q2235294"/>
+       <match id="?E0000473495A" qid="Q3329585"/>
+       <match id="?E0000880978A" qid="Q3329594"/>
+       <match id="?E0000071981A" qid="Q3329595"/>
+       <match id="?E0000028923A" qid="Q1955726"/>
+       <match id="?E0000293678A" qid="Q4796989"/>
+       <match id="?E0000454512A" qid=""/>
+       <match id="?E0000071993A" qid="Q857276"/>
+       <match id="?E0000121713A" qid="Q3330199"/>
+       <match id="?E0000410852A" qid="Q1952944"/>
+       <match id="?E0000315822A" qid="Q3329783"/>
+       <match id="?E0000071996A" qid="Q1996069"/>
+       <match id="?E0000991466A" qid="Q8323"/>
+       <match id="?E0000109504A" qid="Q1705530"/>
+       <match id="?E0001099085A" qid="Q3330050"/>
+       <match id="?E0000108253A" qid="Q3329726"/>
+       <match id="?E0000969268A" qid="Q3329726"/>
+       <match id="?E0001292360A" qid="Q127512489"/>
+       <match id="?E0000005909A" qid="Q670250"/>
+       <match id="?E0001194243A" qid="Q4135250"/>
+       <match id="?E0000887603A" qid="Q59541899"/>
+       <match id="?E0000003805A" qid="Q860812"/>
+       <match id="?E0000043961A" qid="Q860812"/>
+       <match id="?E0000105387A" qid="Q3330221"/>
+       <match id="?E0000098545A" qid="Q1068063"/>
+       <match id="?E0000472719A" qid="Q1955726"/>
+       <match id="?E0001555539A" qid="Q1955726"/>
+       <match id="?E0000299117A" qid="Q3330271"/>
+       <match id="?E0001029225A" qid="Q3330271"/>
+       <match id="?E0000013880A" qid="Q101137998"/>
+       <match id="?E0000828726A" qid="Q3330428"/>
+       <match id="?E0000072308A" qid="Q19675"/>
+       <match id="?E0000110175A" qid="Q3330357"/>
+       <match id="?E0000074541A" qid="Q59546080"/>
+       <match id="?E0000777079A" qid="Q167863"/>
+       <match id="?E0000001122A" qid="Q2338135"/>
+       <match id="?E0000072176A" qid="Q3329166"/>
+       <match id="?E0000920917A" qid="Q1423719"/>
+       <match id="?E0000390477A" qid=""/>
+       <match id="?E0000347284A" qid=""/>
+       <match id="?E0000028997A" qid="Q105075518"/>
+       <match id="?E0000028998A" qid="Q3330427"/>
+       <match id="?E0000028989A" qid="Q1128578"/>
+       <match id="?E0000115863A" qid="Q1128578"/>
+       <match id="?E0000320508A" qid="Q1128578"/>
+       <match id="?E0001174130A" qid="Q1128578"/>
+       <match id="?E0000151340A" qid="Q1128578"/>
+       <match id="?E0001493724A" qid="Q20795202"/>
+       <match id="?E0000275904A" qid="Q3330726"/>
+       <match id="?E0000459958A" qid="Q2338135"/>
+       <match id="?E0000319640A" qid="Q104764050"/>
+       <match id="?E0000319913A" qid="Q105339684"/>
+       <match id="?E0000029010A" qid="Q3330791"/>
+       <match id="?E0000362710A" qid="Q4745666"/>
+       <match id="?E0000001123A" qid="Q18414858"/>
+       <match id="?E0000072329A" qid="Q650519"/>
+       <match id="?E0000428152A" qid="Q16665615"/>
+       <match id="?E0000032883A" qid="Q649250"/>
+       <match id="?E0000300752A" qid="Q3032842"/>
+       <match id="?E0000390237A" qid=""/>
+       <match id="?E0000443646A" qid="Q1050032"/>
+       <match id="?E0001035627A" qid="Q3330551"/>
+       <match id="?E0000472018A" qid="Q3329681"/>
+       <match id="?E0000888475A" qid="Q1736071"/>
+       <match id="?E0000967206A" qid="Q690242"/>
+       <match id="?E0000072378A" qid="Q188740"/>
+       <match id="?E0000369326A" qid=""/>
+       <match id="?E0000436584A" qid="Q195311"/>
+       <match id="?E0001143216A" qid="Q942713"/>
+       <match id="?E0000461092A" qid="Q861608"/>
+       <match id="?E0000462142A" qid="Q861608"/>
+       <match id="?E0000279763A" qid="Q333515"/>
+       <match id="?E0000136500A" qid=""/>
+       <match id="?E0000462062A" qid=""/>
+       <match id="?E0000357684A" qid=""/>
+       <match id="?E0000027691A" qid="Q7052540"/>
+       <match id="?E0000320926A" qid="Q6507375"/>
+       <match id="?E0000390151A" qid="Q1131966"/>
+       <match id="?E0000346088A" qid=""/>
+       <match id="?E0001571696A" qid="Q1131966"/>
+       <match id="?E0000990759A" qid=""/>
+       <match id="?E0000892698A" qid="Q7072631"/>
+       <match id="?E0000408407A" qid=""/>
+       <match id="?E0000137156A" qid="Q48757581"/>
+       <match id="?E0000398277A" qid=""/>
+       <match id="?E0000279205A" qid="Q138010055"/>
+       <match id="?E0000390095A" qid=""/>
+       <match id="?E0001390278A" qid="Q3349541"/>
+       <match id="?E0000293404A" qid="Q138010422"/>
+       <match id="?E0001671516A" qid=""/>
+       <match id="?E0000387529A" qid="Q7096244"/>
+       <match id="?E0001099970A" qid=""/>
+       <match id="?E0000280331A" qid="Q284716"/>
+       <match id="?E0000003632A" qid="Q3355675"/>
+       <match id="?E0000288425A" qid=""/>
+       <match id="?E0000001182A" qid="Q107552813"/>
+       <match id="?E0000112641A" qid=""/>
+       <match id="?E0000684897A" qid=""/>
+       <match id="?E0000974811A" qid=""/>
+       <match id="?E0000888396A" qid=""/>
+       <match id="?E0001334142A" qid="Q3373119"/>
+       <match id="?E0000132293A" qid="Q8077976"/>
+       <match id="?E0000074535A" qid="Q18752218"/>
+       <match id="?E0000687826A" qid="Q18752218"/>
+       <match id="?E0001165576A" qid=""/>
+       <match id="?E0000408430A" qid=""/>
+       <match id="?E0000142579A" qid=""/>
+       <match id="?E0001342443A" qid=""/>
+       <match id="?E0000692102A" qid=""/>
+       <match id="?E0000810089A" qid=""/>
+       <match id="?E0000342945A" qid="Q138008931"/>
+       <match id="?E0001027824A" qid=""/>
+       <match id="?E0000449948A" qid=""/>
+       <match id="?E0000123259A" qid="Q7757923"/>
+       <match id="?E0000101492A" qid="Q1969155"/>
+       <match id="?E0000361470A" qid="Q86753894"/>
+       <match id="?E0000136572A" qid="Q7240975"/>
+       <match id="?E0000403629A" qid="Q105223544"/>
+       <match id="?E0000410355A" qid=""/>
+       <match id="?E0000314032A" qid=""/>
+       <match id="?E0000985140A" qid=""/>
+       <match id="?E0000408365A" qid=""/>
+       <match id="?E0001442507A" qid="Q3408570"/>
+       <match id="?E0000388698A" qid=""/>
+       <match id="?E0000369096A" qid=""/>
+       <match id="?E0000301307A" qid="Q3410768"/>
+       <match id="?E0001261067A" qid=""/>
+       <match id="?E0000076854A" qid="Q3315272"/>
+       <match id="?E0000001406A" qid="Q3315272"/>
+       <match id="?E0000777364A" qid=""/>
+       <match id="?E0000899085A" qid=""/>
+       <match id="?E0001210070A" qid=""/>
+       <match id="?E0001210047A" qid=""/>
+       <match id="?E0001210075A" qid=""/>
+       <match id="?E0001210059A" qid=""/>
+       <match id="?E0000280227A" qid="Q3423622"/>
+       <match id="?E0000032207A" qid="Q138003942"/>
+       <match id="?E0000472818A" qid="Q135010573"/>
+       <match id="?E0000397419A" qid="Q1188923"/>
+       <match id="?E0000079215A" qid="Q13360245"/>
+       <match id="?E0000446057A" qid=""/>
+       <match id="?E0000381044A" qid=""/>
+       <match id="?E0000969985A" qid="Q131982245"/>
+       <match id="?E0000810286A" qid="Q174911"/>
+       <match id="?E0001007337A" qid="Q7402342"/>
+       <match id="?E0000822349A" qid=""/>
+       <match id="?E0000033971A" qid="Q3296532"/>
+       <match id="?E0000004381A" qid="Q522379"/>
+       <match id="?E0000294105A" qid="Q99589932"/>
+       <match id="?E0000374457A" qid=""/>
+       <match id="?E0000284032A" qid="Q139473"/>
+       <match id="?E0000487464A" qid=""/>
+       <match id="?E0001342521A" qid=""/>
+       <match id="?E0000270152A" qid="Q138009932"/>
+       <match id="?E0000106543A" qid="Q3487719"/>
+       <match id="?E0001678567A" qid=""/>
+       <match id="?E0000934298A" qid="Q3487719"/>
+       <match id="?E0000933946A" qid="Q3487719"/>
+       <match id="?E0000059719A" qid=""/>
+       <match id="?E0000280036A" qid=""/>
+       <match id="?E0000023112A" qid="Q3487787"/>
+       <match id="?E0000428748A" qid=""/>
+       <match id="?E0001533872A" qid=""/>
+       <match id="?E0000033883A" qid="Q99984516"/>
+       <match id="?E0000318584A" qid="Q514652"/>
+       <match id="?E0001133086A" qid=""/>
+       <match id="?E0000335741A" qid="Q106978124"/>
+       <match id="?E0001222383A" qid=""/>
+       <match id="?E0000369223A" qid="Q590548"/>
+       <match id="?E0000299314A" qid="Q461761"/>
+       <match id="?E0000865901A" qid="Q7552119"/>
+       <match id="?E0000270827A" qid="Q7569602"/>
+       <match id="?E0000357487A" qid=""/>
+       <match id="?E0000840097A" qid=""/>
+       <match id="?E0000422592A" qid="Q85802922"/>
+       <match id="?E0001367164A" qid="Stereoscopic Co."/>
+       <match id="?E0001076264A" qid="Q76631852"/>
+       <match id="?E0001416383A" qid=""/>
+       <match id="?E0000417421A" qid=""/>
+       <match id="?E0000347014A" qid=""/>
+       <match id="?E0000989809A" qid=""/>
+       <match id="?E0000385863A" qid=""/>
+       <match id="?E0000996260A" qid=""/>
+       <match id="?E0000828672A" qid=""/>
+       <match id="?E0000321913A" qid="Q110280303"/>
+       <match id="?E0001217281A" qid=""/>
+       <match id="?E0000034738A" qid="Q522379"/>
+       <match id="?E0000285419A" qid="Q108576058"/>
+       <match id="?E0000380851A" qid=""/>
+       <match id="?E0000674292A" qid=""/>
+       <match id="?E0000346708A" qid=""/>
+       <match id="?E0000418721A" qid="Q116546923"/>
+       <match id="?E0000485291A" qid="Q697319"/>
+       <match id="?E0000438525A" qid=""/>
+       <match id="?E0000851014A" qid="Q7708469"/>
+       <match id="?E0000805998A" qid=""/>
+       <match id="?E0000781176A" qid=""/>
+       <match id="?E0000413911A" qid=""/>
+       <match id="?E0000390235A" qid=""/>
+       <match id="?E0000390124A" qid=""/>
+       <match id="?E0000982254A" qid="Q59510221"/>
+       <match id="?E0001023349A" qid=""/>
+       <match id="?E0001466374A" qid=""/>
+       <match id="?E0001022404A" qid="Q105223544"/>
+       <match id="?E0001168969A" qid="Q308963"/>
+       <match id="?E0000002824A" qid="Q326342"/>
+       <match id="?E0000446157A" qid="Q101009323"/>
+       <match id="?E0000271348A" qid="Q122975916"/>
+       <match id="?E0000001637A" qid="Q392189"/>
+       <match id="?E0000432081A" qid="Q104904446"/>
+       <match id="?E0000001648A" qid="Q392190"/>
+       <match id="?E0000004311A" qid="Q2579532"/>
+       <match id="?E0000037750A" qid="Q109017986"/>
+       <match id="?E0000120863A" qid="Q138008760"/>
+       <match id="?E0000133211A" qid="Q138009877"/>
+       <match id="?E0000011477A" qid="Q2562148"/>
+       <match id="?E0000280841A" qid="Q2945280"/>
+       <match id="?E0000819723A" qid="Q138018873"/>
+       <match id="?E0000312450A" qid="Q138018873"/>
+       <match id="?E0000004582A" qid="Q919256"/>
+       <match id="?E0000333616A" qid="Q919256"/>
+       <match id="?E0000004593A" qid="Q1067935"/>
+       <match id="?E0001464072A" qid="Q16635547"/>
+       <match id="?E0000010178A" qid="Q16635547"/>
+       <match id="?E0000469923A" qid="Q640694"/>
+       <match id="?E0000428927A" qid="Q1190812"/>
+       <match id="?E0001251357A" qid=""/>
+       <match id="?E0000335624A" qid=""/>
+       <match id="?E0000344446A" qid=""/>
+       <match id="?E0000088586A" qid="Q371960"/>
+       <match id="?E0000088814A" qid="Q95731308"/>
+       <match id="?E0001155315A" qid="Q4013975"/>
+       <match id="?E0000413723A" qid="Q105099771"/>
+       <match id="?E0000112890A" qid="Q95691007"/>
+       <match id="?E0000355768A" qid="Q95691007"/>
+       <match id="?E0001367174A" qid="Q2536590"/>
+       <match id="?E0001030278A" qid="Q111264642"/>
+       <match id="?E0000455270A" qid="Q700959"/>
+       <match id="?E0000691818A" qid=""/>
+       <match id="?E0001183396A" qid="Q7968924"/>
+       <match id="?E0000910317A" qid=""/>
+       <match id="?E0000468924A" qid="Q96386018"/>
+       <match id="?E0000036562A" qid="Q65554899"/>
+       <match id="?E0000036647A" qid="Q3813414"/>
+       <match id="?E0000974487A" qid=""/>
+       <match id="?E0000111361A" qid=""/>
+       <match id="?E0000114564A" qid="Q107287778"/>
+       <match id="?E0000422960A" qid=""/>
+       <match id="?E0000312850A" qid=""/>
+       <match id="?E0001181678A" qid=""/>
+       <match id="?E0000382887A" qid="Q104708965"/>
+       <match id="?E0000345886A" qid="Q55217770"/>
+       <match id="?E0000341727A" qid="Q96964971"/>
+  <match id="?E0000472631A" qid="Q54806905"/>
+  <match id="?E0000340040A" qid="Q138457057"/>
+       <match qid="Q1128578">Musée McCord d'histoire canadienne,</match>
+</matches>
diff --git a/matches_occupations.xml b/matches_occupations.xml
new file mode 100644 (file)
index 0000000..8d54afd
--- /dev/null
@@ -0,0 +1,207 @@
+<?xml version="1.0" encoding="utf-8"?>
+<matches>
+  <match qid="Q33999">Acteurs</match>
+  <match qid="Q17765219">Administrateurs coloniaux</match>
+  <match qid="Q739437">Affichistes</match>
+  <match qid="">Agents de développement</match>
+  <match qid="Q266569">Animateurs (Cinéma)</match>
+  <match qid="Q2722764">Animateurs de radio</match>
+  <match qid="Q947873">Animateurs de télévision</match>
+  <match qid="Q4773904">Anthropologues</match>
+  <match qid="Q10862983">Aquafortistes</match>
+  <match qid="Q17505902">Aquarellistes</match>
+  <match qid="Q3621491">Archéologues</match>
+  <match qid="Q42973">Architectes</match>
+  <match qid="Q635734">Archivistes</match>
+  <match qid="Q483501">Artiste</match>
+  <match qid="Q483501">Artistes</match>
+  <match qid="">Artistes$Professeurs d'universités</match>
+  <match qid="Q56884373">Artistes du livre</match>
+  <match qid="Q483501">Artistes enseignants</match>
+  <match qid="Q483501">Artsites</match>
+  <match qid="Q40348">Avocats</match>
+  <match qid="Q386854">Batteurs (Instrumentistes)</match>
+  <match qid="Q182436">Bibliothécaires</match>
+  <match qid="Q336221">Bijoutiers</match>
+  <match qid="Q3303330">Calligraphes</match>
+  <match qid="Q45722">Cardinaux</match>
+  <match qid="Q3658608">Caricaturistes</match>
+  <match qid="Q1734662">Cartographes</match>
+  <match qid="Q7541856">Céramistes</match>
+  <match qid="Q1104153">Chanoines</match>
+  <match qid="Q177220">Chanteurs</match>
+  <match qid="Q357813">Chargés de cours</match>
+  <match qid="Q2961975">Chefs d'entreprises</match>
+  <match qid="Q1650915">Chercheurs</match>
+  <match qid="Q2490358">Chorégraphes</match>
+  <match qid="Q1414443">Cinéastes</match>
+  <match qid="Q7501153">Commerçants</match>
+  <match qid="Q780596">Commissaire d'exposition</match>
+  <match qid="Q780596">Commissaires d'exposition</match>
+  <match qid="Q780596">Commissaires d'expositions</match>
+  <match qid="Q36834">compositeurs</match>
+  <match qid="Q36834">Compositeurs</match>
+  <match qid="Q9379869">Conférencières</match>
+  <match qid="Q9379869">Conférenciers</match>
+  <match qid="Q674426">Conservateurs de musée</match>
+  <match qid="Q674426">Conservateurs de musée d'art</match>
+  <match qid="Q674426">Conservatrices de musée</match>
+  <match qid="Q12869138">Conteurs</match>
+  <match qid="Q2034021">Couturiers (Créateurs de mode)</match>
+  <match qid="Q1323191">Créateurs de costumes</match>
+  <match qid="Q4164507">Critique d'art</match>
+  <match qid="Q6430706">Critiques</match>
+  <match qid="Q6430706">Critiques d'art</match>
+  <match qid="Q5716684">Danseurs</match>
+  <match qid="Q5716684">Danseuses</match>
+  <match qid="Q2962070">Décorateurs de cinéma</match>
+  <match qid="Q5322166">Designers</match>
+  <match qid="Q15296811">Dessinateur</match>
+  <match qid="Q15296811">Dessinateurs</match>
+  <match qid="Q17098559">Dessinateurs de bandes dessinées</match>
+  <match qid="Q1797162">Directeurs artistiques</match>
+  <match qid="Q1056391">Directeurs d'école secondaire</match>
+  <match qid="Q22132694">Directeurs de musée</match>
+  <match qid="Q22132694">Directeurs de musée d'art</match>
+  <match qid="Q12764792">Doctorants</match>
+  <match qid="Q487596">Dramaturges</match>
+  <match qid="Q559597">Ébénistes</match>
+  <match qid="Q188094">Économistes</match>
+  <match qid="Q36180">Écrivaines</match>
+  <match qid="Q36180">Écrivains</match>
+  <match qid="Q4164507">Écrivains critiques d'art</match>
+  <match qid="Q36180">Écrivains pour la jeunesse</match>
+  <match qid="">Éditeurs</match>
+  <match qid="">Éditrices</match>
+  <match qid="Q3580098">Éducateurs spécialisés</match>
+  <match qid="Q974144">Éducatrices</match>
+  <match qid="Q3580098">Éducatrices spécialisées</match>
+  <match qid="Q37226">Enseignantes</match>
+  <match qid="Q37226">Enseignants</match>
+  <match qid="Q11774202">Essayistes</match>
+  <match qid="Q1371378">Ethnologues</match>
+  <match qid="Q48282">Étudiants de deuxième cycle</match>
+  <match qid="Q11900058">Explorateurs</match>
+  <match qid="Q483501">Femmes artistes</match>
+  <match qid="Q6430706">Femmes critiques d'art</match>
+  <match qid="Q1930187">Femmes journalistes</match>
+  <match qid="Q1028181">Femmes peintres</match>
+  <match qid="Q33231">Femmes photographes</match>
+  <match qid="Q212238">Fonctionnaires</match>
+  <match qid="">fre</match>
+  <match qid="Q83460">Généraux</match>
+  <match qid="Q901402">Géographes</match>
+  <match qid="Q294126">Géomètres</match>
+  <match qid="Q627325">Graphistes</match>
+  <match qid="Q11569986">Graveurs</match>
+  <match qid="Q11569986">Graveurs d'estampes</match>
+  <match qid="Q11569986">Graveuses</match>
+  <match qid="Q855091">Guitaristes</match>
+  <match qid="Q201788">Historiennes</match>
+  <match qid="Q1792450">Historiennes d'art</match>
+  <match qid="Q201788">Historiens</match>
+  <match qid="Q1792450">Historiens d'art</match>
+  <match qid="Q1792450">Historiens de l'art</match>
+  <match qid="Q16063546">Historiens des sciences</match>
+  <match qid="Q43845">Hommes d'affaires</match>
+  <match qid="Q372436">Hommes d'État</match>
+  <match qid="Q82955">Hommes politiques</match>
+  <match qid="Q245068">Humoristes</match>
+  <match qid="Q644687">illustrateurs</match>
+  <match qid="Q644687">Illustrateurs</match>
+  <match qid="Q175151">Imprimeurs</match>
+  <match qid="Q21925567">Imprimeurs sérigraphes</match>
+  <match qid="Q81096">Ingénieurs</match>
+  <match qid="Q1930187">Journaliste</match>
+  <match qid="Q1930187">Journalistes</match>
+  <match qid="Q17433421">Journalistes scientifiques</match>
+  <match qid="Q998550">Libraires</match>
+  <match qid="Q16947657">Lithographes</match>
+  <match qid="Q462390">Maîtres de conférences</match>
+  <match qid="Q173950">Marchandes d'art</match>
+  <match qid="Q173950">Marchandes d'œuvres d'art</match>
+  <match qid="Q173950">Marchands d'œuvres d'art</match>
+  <match qid="Q25616553">Marinistes</match>
+  <match qid="">masculin</match>
+  <match qid="Q28947943">Miniaturistes</match>
+  <match qid="Q3374326">Muralistes</match>
+  <match qid="Q10333969">Muséologues</match>
+  <match qid="Q639669">Musiciens</match>
+  <match qid="Q2487799">Mycologues</match>
+  <match qid="Q18805">Naturalistes</match>
+  <match qid="Q15949613">Nouvellistes</match>
+  <match qid="Q189290">Officiers</match>
+  <match qid="Q10669499">Officiers de marine</match>
+  <match qid="Q211423">Orfèvres</match>
+  <match qid="Q822146">Paroliers</match>
+  <match qid="Q20857490">Pastellistes</match>
+  <match qid="">Paysagistes</match>
+  <match qid="Q28136886">Pédopsychiatres</match>
+  <match qid="Q1028181">Peintre</match>
+  <match qid="Q1028181">Peintres</match>
+  <match qid="Q11569986">Peintres-graveurs d'estampes</match>
+  <match qid="Q713200">Performers</match>
+  <match qid="Q713200">Performeuses (Artistes)</match>
+  <match qid="Q105186">Pharmaciens</match>
+  <match qid="Q12362622">Philanthropes</match>
+  <match qid="Q4964182">Philosophes</match>
+  <match qid="Q33231">Photographe</match>
+  <match qid="Q33231">Photographes</match>
+  <match qid="Q486748">Pianistes</match>
+  <match qid="">Planificateurs d'événements</match>
+  <match qid="Q49757">Poètes</match>
+  <match qid="Q49757">Poètes québécois</match>
+  <match qid="Q1238570">Politologues</match>
+  <match qid="Q42603">Prêtres</match>
+  <match qid="">Producteurs et metteurs en scène de théâtre</match>
+  <match qid="">Producteurs et réalisateurs de cinéma</match>
+  <match qid="">Producteurs et réalisateurs de radio</match>
+  <match qid="">Producteurs et réalisateurs de télévision</match>
+  <match qid="Q1622272">Professeure d'université</match>
+  <match qid="Q37226">Professeur (Enseignement supérieur)</match>
+  <match qid="Q1622272">Professeurs</match>
+  <match qid="Q5669847">Professeurs adjoints</match>
+  <match qid="Q3406827">Professeurs agrégés</match>
+  <match qid="Q15977927">Professeurs d'art</match>
+  <match qid="/Q3054730">Professeurs de cégep</match>
+  <match qid="Q7939609">Professeurs de chant</match>
+  <match qid="Q11333691">Professeurs de littérature</match>
+  <match qid="Q2675537">Professeurs de musique</match>
+  <match qid="Q48930480">Professeurs de philosophie</match>
+  <match qid="Q58209937">Professeurs d'histoire</match>
+  <match qid="Q1622272">Professeurs d'université</match>
+  <match qid="Q1622272">Professeurs d'universités</match>
+  <match qid="">Professeurs émérites</match>
+  <match qid="Q3054730">Professeurs (Enseignement collégial)</match>
+  <match qid="Q37226">Professeurs (Enseignement supéieur)</match>
+  <match qid="Q37226">Professeurs (Enseignement supérieur)</match>
+  <match qid="Q3410028">Psychanalystes</match>
+  <match qid="Q211346">Psychiatres</match>
+  <match qid="Q2252262">Rappeurs</match>
+  <match qid="Q2526255">Réalisateurs de cinéma</match>
+  <match qid="Q2145981">Restaurateurs (Art)</match>
+  <match qid="Q6625963">Romanciers</match>
+  <match qid="Q6625963">Romanciers québécois</match>
+  <match qid="Q28389">Scénaristes</match>
+  <match qid="Q11892507">Scénaristes de bandes dessinées</match>
+  <match qid="Q1281618">Sculpteurs</match>
+  <match qid="Q6138343">Sculpteurs sur bois</match>
+  <match qid="Q1281618">Sculptrices</match>
+  <match qid="Q21925567">Sérigraphiste</match>
+  <match qid="Q21925567">Sérigraphistes</match>
+  <match qid="Q2306091">Sociologues</match>
+  <match qid="Q4991371">Soldats</match>
+  <match qid="Q98834068">Sopranos (Chanteurs)</match>
+  <match qid="Q26759595">Spécialistes de l'information</match>
+  <match qid="Q1234713">Théologiens</match>
+  <match qid="Q437512">Tisserands</match>
+  <match qid="Q333634">Traducteurs</match>
+  <match qid="Q333634">Traductrices</match>
+  <match qid="Q7019111">Travailleurs sociaux</match>
+  <match qid="Q1229025">Typographes</match>
+  <match qid="Q131062">Urbanistes</match>
+  <match qid="Q2865798">Verriers d'art</match>
+  <match qid="Q202883">Vétérinaires</match>
+  <match qid="Q2737906">Vidéastes</match>
+  <match qid="Q2205972">Vitraillistes</match>
+</matches>
diff --git a/matches_places.xml b/matches_places.xml
new file mode 100644 (file)
index 0000000..c3f79c1
--- /dev/null
@@ -0,0 +1,1054 @@
+<?xml version="1.0" encoding="utf-8"?>
+<matches>
+  <match qid="Q1017" fuzzy-qid="Q183">Aachen [Allemagne] [etc.] :</match>
+  <match qid="Q189912" fuzzy-qid="Q145">Aberdeenshire (Écosse)</match>
+  <match qid="Q321513" fuzzy-qid="Q176">Abitibi (Québec : Région)</match>
+  <match qid="Q141960" fuzzy-qid="Q176">Acton Vale (Québec)</match>
+  <match qid="Q47465" fuzzy-qid="Q142">Aix-en-Provence (France)</match>
+  <match qid="Q24861" fuzzy-qid="Q1384">Albany (N.Y.)</match>
+  <match qid="Q34804" fuzzy-qid="Q1522">Albuquerque :</match>
+  <match qid="Q34804" fuzzy-qid="Q1522">Albuquerque (N.-M.)</match>
+  <match qid="Q87" fuzzy-qid="Q79">Alexandrie (Égypte)</match>
+  <match qid="Q3561" fuzzy-qid="Q262">Alger (Algérie)</match>
+  <match qid="Q262" fuzzy-qid="Q262">Algérie</match>
+  <match qid="Q183" fuzzy-qid="Q183">Allemagne</match>
+  <match qid="Q141973" fuzzy-qid="Q176">[Alma :</match>
+  <match qid="Q141973" fuzzy-qid="Q176">Alma :</match>
+  <match qid="Q141973" fuzzy-qid="Q176">[Alma, Québec] :</match>
+  <match qid="Q141973" fuzzy-qid="Q176">[Alma, Québec],</match>
+  <match qid="Q141973" fuzzy-qid="Q176">Alma (Québec)</match>
+  <match qid="Q141973" fuzzy-qid="Q176">Alma, Québec</match>
+  <match qid="Q141973" fuzzy-qid="Q176">Alma, Québec :</match>
+  <match qid="Q141973" fuzzy-qid="Q176">Alma (Québec) : Toronto (Ontario) :</match> <!-- Registered as Alma -->
+  <match qid="Q141973" fuzzy-qid="Q176">Amos (Québec)</match>
+  <match qid="Q141973" fuzzy-qid="Q176">Amos (Québec) :</match>
+  <match qid="Q727" fuzzy-qid="Q29999">[Amsterdam :</match>
+  <match qid="Q727" fuzzy-qid="Q29999">Amsterdam (Pays-Bas)</match>
+  <match qid="Q38380" fuzzy-qid="Q142">Angers (France)</match>
+  <match qid="Q38380" fuzzy-qid="Q142">Angers (France) :</match>
+  <match qid="Q21" fuzzy-qid="Q145">Angleterre</match>
+  <match qid="Q916" fuzzy-qid="Q916">Angola</match>
+  <match qid="Q50189" fuzzy-qid="Q142">[Annecy (France) :</match>
+  <match qid="Q50189" fuzzy-qid="Q142">Annecy (France)</match>
+  <match qid="Q90" fuzzy-qid="Q142">A Paris :</match>
+  <match qid="Q12101" fuzzy-qid="Q29">[Arenys de Munt, Espagne] :</match>
+  <match qid="Q414" fuzzy-qid="Q414">Argentine</match>
+  <match qid="Q48292" fuzzy-qid="Q142">[Arles, France] :</match>
+  <match qid="Q707993" fuzzy-qid="Q176">Arthabaska (Québec)</match>
+  <match qid="Q2866069" fuzzy-qid="Q176">Arvida (Québec)</match>
+  <match qid="Q13320" fuzzy-qid="Q38">à Savona :</match>
+  <match qid="Q48785" fuzzy-qid="Q176">Asbestos (Québec)</match>
+  <match qid="Q1524" fuzzy-qid="Q41">Athènes (Grèce)</match>
+  <match qid="Q369911" fuzzy-qid="Q27">Athlone (Irlande)</match>
+  <match qid="Q2749" fuzzy-qid="Q183">[Augsburg :</match>
+  <match qid="Q2749" fuzzy-qid="Q183">Augsburg (Allemagne)</match>
+  <match qid="Q408" fuzzy-qid="Q408">Australie</match>
+  <match qid="Q40" fuzzy-qid="Q40">Autriche</match>
+  <match qid="Q213474" fuzzy-qid="Q145">Aylesbury (Angleterre)</match>
+  <match qid="Q63939" fuzzy-qid="Q39">Baden (Switzerland) :</match>
+  <match qid="Q139654" fuzzy-qid="Q176">Baie-Comeau (Québec)</match>
+  <match qid="Q2879382" fuzzy-qid="Q176">Baie-Johan-Beetz (Québec)</match>
+  <match qid="Q139231" fuzzy-qid="Q176">[Baie-Saint-Paul] :</match>
+  <match qid="Q139231" fuzzy-qid="Q176">Baie-Saint-Paul :</match>
+  <match qid="Q139231" fuzzy-qid="Q176">Baie-Saint-Paul (Québec)</match>
+  <match qid="Q139231" fuzzy-qid="Q176">Baie-Saint-Paul (Québec) :</match>
+  <match qid="" fuzzy-qid="">Baie-Saint-Paul, Région de (Québec)</match>
+  <match qid="Q78" fuzzy-qid="Q39">Bâle :</match>
+  <match qid="Q244" fuzzy-qid="Q244">Barbade</match>
+  <match qid="Q1492" fuzzy-qid="Q29">[Barcelona] :</match>
+  <match qid="Q1492" fuzzy-qid="Q29">Barcelona :</match>
+  <match qid="Q1492" fuzzy-qid="Q29">Barcelone :</match>
+  <match qid="Q1492" fuzzy-qid="Q29">Barcelone (Espagne)</match>
+  <match qid="Q62823" fuzzy-qid="Q739">Barranquilla (Atlántico, Colombie)</match>
+  <match qid="Q34183" fuzzy-qid="Q1904">Barrie (Ontario) :</match>
+  <match qid="Q78" fuzzy-qid="Q39">[Basel :</match>
+  <match qid="Q78" fuzzy-qid="Q39">Basel [Schweiz] :</match>
+  <match qid="Q183910" fuzzy-qid="Q142">Bayeux (France)</match>
+  <match qid="Q813348" fuzzy-qid="Q176">Beauce-Sartigan (Québec)</match>
+  <match qid="Q10686" fuzzy-qid="Q145">Belfast :</match>
+  <match qid="Q31" fuzzy-qid="Q31">[Belgique] :</match>
+  <match qid="Q31" fuzzy-qid="Q31">Belgique</match>
+  <match qid="Q3711" fuzzy-qid="Q403">Belgrade (Serbie)</match>
+  <match qid="Q18331545" fuzzy-qid="Q176">Bellefeuille (Saint-Jérôme, Québec)</match>
+  <match qid="Q34227" fuzzy-qid="Q1904">Belleville (Ont.)</match>
+  <match qid="Q3711" fuzzy-qid="Q403">Beograd [etc.] :</match>
+  <match qid="Q64" fuzzy-qid="Q183">Berlin :</match>
+  <match qid="Q64" fuzzy-qid="Q183">Berlin (Allemagne)</match>
+  <match qid="Q64" fuzzy-qid="Q183">Berlin, Germany :</match>
+  <match qid="Q70" fuzzy-qid="Q39">Berne (Suisse)</match>
+  <match qid="Q139046" fuzzy-qid="Q176">Berthierville (Québec)</match>
+  <match qid="Q2112" fuzzy-qid="Q183">Bielefeld, Allemagne :</match>
+  <match qid="Q2112" fuzzy-qid="Q183">Bielefeld, Germany :</match>
+  <match qid="Q4905868" fuzzy-qid="Q1384">Big Indian (N.Y.)</match>
+  <match qid="Q8692" fuzzy-qid="Q29">[Bilbao :</match>
+  <match qid="Q2256" fuzzy-qid="Q145">Birmingham (Angleterre)</match>
+  <match qid="Q2905390" fuzzy-qid="Q176">Black Lake (Thetford Mines, Québec)</match>
+  <match qid="Q2909084" fuzzy-qid="Q176">Boischatel (Québec)</match>
+  <match qid="Q1891" fuzzy-qid="Q38">Bologne (Italie)</match>
+  <match qid="Q141627" fuzzy-qid="Q176">[Bonaventure],</match>
+  <match qid="Q141627" fuzzy-qid="Q176">Bonaventure (Québec)</match>
+  <match qid="Q141924" fuzzy-qid="Q176">Boucherville :</match>
+  <match qid="Q141924" fuzzy-qid="Q176">[Boucherville, Québec] :</match>
+  <match qid="Q132404" fuzzy-qid="Q142">Bourges (France)</match>
+  <match qid="Q34180" fuzzy-qid="Q1904">Brantford (Ont.)</match>
+  <match qid="Q34180" fuzzy-qid="Q1904">Brantford (Ont.) :</match>
+  <match qid="Q34180" fuzzy-qid="Q1904">Brantford, Ont. :</match>
+  <match qid="Q34180" fuzzy-qid="Q1904">Brantford, Ontario Canada :</match>
+  <match qid="Q12193" fuzzy-qid="Q142">Brest (France)</match>
+  <match qid="Q23154" fuzzy-qid="Q145">Bristol ;</match>
+  <match qid="Q23154" fuzzy-qid="Q145">Bristol (Angleterre)</match>
+  <match qid="Q14960" fuzzy-qid="Q213">Brno (République tchèque)</match>
+  <match qid="Q2926025" fuzzy-qid="Q176">Bromptonville (Sherbrooke, Québec)</match>
+  <match qid="Q18426" fuzzy-qid="Q1384">Bronx (New York, N.Y.)</match>
+  <match qid="Q18419" fuzzy-qid="Q1384">[Brooklyn, N.Y.] ;</match>
+  <match qid="Q18419" fuzzy-qid="Q1384">Brooklyn, N.Y. ;</match>
+  <match qid="Q1055838" fuzzy-qid="Q1951">Brooks (Alb.)</match>
+  <match qid="Q139104" fuzzy-qid="Q176">Brossard :</match>
+  <match qid="Q12994" fuzzy-qid="Q31">Bruges (Belgique)</match>
+  <match qid="Q244025" fuzzy-qid="Q1973">Brurnaby, C.-B.</match>
+  <match qid="Q239" fuzzy-qid="Q31">[Bruxelles] :</match>
+  <match qid="Q239" fuzzy-qid="Q31">Bruxelles :</match>
+  <match qid="Q239" fuzzy-qid="Q31">[Bruxelles, Belgique] :</match>
+  <match qid="Q239" fuzzy-qid="Q31">Bruxelles (Belgique)</match>
+  <match qid="Q239" fuzzy-qid="Q31">Bruxelles [Belgique] :</match>
+  <match qid="Q19660" fuzzy-qid="Q218">Bucarest (Roumanie)</match>
+  <match qid="Q2886719" fuzzy-qid="Q142">Buch, Pays de (France)</match>
+  <match qid="Q1781" fuzzy-qid="Q28">Budapest (Hongrie)</match>
+  <match qid="Q1486" fuzzy-qid="Q414">Buenos Aires (Argentine)</match>
+  <match qid="Q31058" fuzzy-qid="Q16551">Burlington (Verm.) :</match>
+  <match qid="Q244025" fuzzy-qid="Q1973">Burnaby, B.C. :</match>
+  <match qid="Q244025" fuzzy-qid="Q1973">Burnaby, C.-B.</match>
+  <match qid="Q660899" fuzzy-qid="Q142">Busigny [France] :</match>
+  <match qid="Q41185" fuzzy-qid="Q142">Caen (France)</match>
+  <match qid="Q36312" fuzzy-qid="Q1951">[Calgary] :</match>
+  <match qid="Q36312" fuzzy-qid="Q1951">Calgary :</match>
+  <match qid="Q36312" fuzzy-qid="Q1951">Calgary (Alb.)</match>
+  <match qid="Q2934041" fuzzy-qid="Q176">[Calixa-Lavallée] :</match>
+  <match qid="Q16" fuzzy-qid="Q16">[Canada :</match>
+  <match qid="Q16" fuzzy-qid="Q16">[Canada] :</match>
+  <match qid="Q16" fuzzy-qid="Q16">Canada</match>
+  <match qid="Q142076" fuzzy-qid="Q176">[Candiac] :</match>
+  <match qid="Q142076" fuzzy-qid="Q176">[Candiac],</match>
+  <match qid="" fuzzy-qid="">Candiac, France</match>
+  <match qid="Q5032907" fuzzy-qid="Q1904">Canoe, Lac (Nipissing, Ont.)</match>
+  <match qid="Q16572" fuzzy-qid="Q148">Canton (Chine)</match>
+  <match qid="Q1122368" fuzzy-qid="Q176">Cantons-de-l'Est (Québec)</match>
+  <match qid="Q1122368" fuzzy-qid="Q176">Cantons-de-l'Est, Québec</match>
+  <match qid="Q142360" fuzzy-qid="Q176">Cap-Chat (Québec)</match>
+  <match qid="Q2936979" fuzzy-qid="Q176">Cap-de-la-Madeleine (Trois-Rivières, Québec)</match>
+  <match qid="Q665280" fuzzy-qid="Q176">Cape Dorset :</match>
+  <match qid="Q2936966" fuzzy-qid="Q176">[Cap-Rouge] :</match>
+  <match qid="Q1533" fuzzy-qid="Q717">Caracas (Venezuela)</match>
+  <match qid="Q1010699" fuzzy-qid="Q724">Caribou (Maine)</match>
+  <match qid="Q624330" fuzzy-qid="Q142">Carignan :</match>
+  <match qid="Q141558" fuzzy-qid="Q176">Carleton :</match>
+  <match qid="Q1454" fuzzy-qid="Q1454">Caroline du Nord</match>
+  <match qid="Q4215620" fuzzy-qid="Q1904">Carp, Ontario, Canada :</match>
+  <match qid="Q7903" fuzzy-qid="Q717">Casablanca (Maroc)</match>
+  <match qid="Q5705" fuzzy-qid="Q29">Catalogne (Espagne)</match>
+  <match qid="Q112458419" fuzzy-qid="Q1965">Centre-Saint-Simon (N.-B.)</match>
+  <match qid="Q142069" fuzzy-qid="Q176">Chambly (Québec)</match>
+  <match qid="Q2957549" fuzzy-qid="Q1904">Chapleau (Ont.)</match>
+  <match qid="Q1660491" fuzzy-qid="Q176">Charlesbourg :</match>
+  <match qid="Q201141" fuzzy-qid="Q176">Charlevoix (Québec)</match>
+  <match qid="Q2127" fuzzy-qid="Q1978">[Charlottetown] :</match>
+  <match qid="Q2127" fuzzy-qid="Q1978">Charlottetown (Î.-P.-É.)</match>
+  <match qid="Q130272" fuzzy-qid="Q142">[Chartres] :</match>
+  <match qid="Q141918" fuzzy-qid="Q176">Chibougamau :</match>
+  <match qid="Q141918" fuzzy-qid="Q176">Chibougamau (Québec)</match>
+  <match qid="Q1297" fuzzy-qid="Q1204">Chicago :</match>
+  <match qid="Q1297" fuzzy-qid="Q1204">Chicago (États-Unis)</match>
+  <match qid="Q1297" fuzzy-qid="Q1204">Chicago (Ill.)</match>
+  <match qid="Q952269" fuzzy-qid="Q176">[Chicoutimi :</match>
+  <match qid="Q952269" fuzzy-qid="Q176">[Chicoutimi] :</match>
+  <match qid="Q952269" fuzzy-qid="Q176">Chicoutimi :</match>
+  <match qid="Q2963416" fuzzy-qid="Q176">Chicoutimi-Nord (Saguenay, Québec)</match>
+  <match qid="Q952269" fuzzy-qid="Q176">Chicoutimi (Québec)</match>
+  <match qid="Q952269" fuzzy-qid="Q176">Chicoutimi, Québec</match>
+  <match qid="Q952269" fuzzy-qid="Q176">Chicoutimi (Saguenay, Québec)</match>
+  <match qid="Q148" fuzzy-qid="Q148">Chine</match>
+  <match qid="Q43196" fuzzy-qid="Q1397">Cincinnati (Ohio)</match>
+  <match qid="Q1489" fuzzy-qid="Q96">Ciudad de Mexico :</match>
+  <match qid="Q1095333" fuzzy-qid="Q1904">Claremont (Ont.)</match>
+  <match qid="Q142053" fuzzy-qid="Q176">Coaticook (Québec)</match>
+  <match qid="Q1108185" fuzzy-qid="Q145">Coleraine (Irlande du Nord)</match>
+  <match qid="Q365" fuzzy-qid="Q183">Cologne, Allemagne :</match>
+  <match qid="Q739" fuzzy-qid="Q739">Colombie</match>
+  <match qid="Q1973" fuzzy-qid="Q1973">Colombie-Britanique :</match>
+  <match qid="Q1973" fuzzy-qid="Q1973">Colombie-Britannique</match>
+  <match qid="Q1973" fuzzy-qid="Q1973">Colombie-Britannique :</match>
+  <match qid="Q3834" fuzzy-qid="Q183">Constance (Allemagne)</match>
+  <match qid="Q142239" fuzzy-qid="Q176">Cookshire (Cookshire-Eaton, Québec)</match>
+  <match qid="Q1748" fuzzy-qid="Q35">Copenhague (Danemark)</match>
+  <match qid="" fuzzy-qid="">Córdoba</match>
+  <match qid="Q36647" fuzzy-qid="Q27">Cork (Irlande)</match>
+  <match qid="Q142107" fuzzy-qid="Q176">Cowansvile (Québec)</match>
+  <match qid="Q142107" fuzzy-qid="Q176">Cowansville (Québec)</match>
+  <match qid="Q31487" fuzzy-qid="Q36">[Cracovie] :</match>
+  <match qid="Q211760" fuzzy-qid="Q96">Culiacán (Sinaloa, Mexique)</match>
+  <match qid="Q35" fuzzy-qid="Q35">Danemark</match>
+  <match qid="Q142481" fuzzy-qid="Q176">Danville (Québec)</match>
+  <match qid="Q142481" fuzzy-qid="Q176">Danvillle (Québec) :</match>
+  <match qid="Q858775" fuzzy-qid="Q145">Dartford, Angleterre</match>
+  <match qid="Q497373" fuzzy-qid="Q1952">Dartmouth (N.-É.)</match>
+  <match qid="Q80021" fuzzy-qid="Q211">Daugavpils (Lettonie)</match>
+  <match qid="Q3267284" fuzzy-qid="Q1904">Deep River (Ont.)</match>
+  <match qid="Q16554" fuzzy-qid="Q1261">Denver (CO) :</match>
+  <match qid="Q16554" fuzzy-qid="Q1261">Denver (Col.)</match>
+  <match qid="Q12439" fuzzy-qid="Q1166">Détroit (Mich.)</match>
+  <match qid="Q141943" fuzzy-qid="Q176">Deux-Montagnes (Québec)</match>
+  <match qid="Q26296883" fuzzy-qid="Q29999">Deventer (Pays-Bas)</match>
+  <match qid="Q7003" fuzzy-qid="Q142">Dijon, France :</match>
+  <match qid="Q141393" fuzzy-qid="Q176">Dolbeau (Québec)</match>
+  <match qid="" fuzzy-qid="">Dorset :</match>
+  <match qid="Q141963" fuzzy-qid="Q176">Dorval :</match>
+  <match qid="Q142410" fuzzy-qid="Q142">Dreux (France)</match>
+  <match qid="Q141940" fuzzy-qid="Q176">[Drummondville] :</match>
+  <match qid="Q141940" fuzzy-qid="Q176">Drummondville :</match>
+  <match qid="Q141940" fuzzy-qid="Q176">[Drummondville, Québec] :</match>
+  <match qid="Q141940" fuzzy-qid="Q176">Drummondville (Québec)</match>
+  <match qid="Q1761" fuzzy-qid="Q27">Dublin (Irlande)</match>
+  <match qid="Q2100" fuzzy-qid="Q183">Duisburg :</match>
+  <match qid="Q142229" fuzzy-qid="Q176">Dumham (Québec)</match>
+  <match qid="Q142229" fuzzy-qid="Q176">Dunham :</match>
+  <match qid="Q142229" fuzzy-qid="Q176">[Dunham, Québec] :</match>
+  <match qid="Q142229" fuzzy-qid="Q176">Dunham (Québec)</match>
+  <match qid="Q142229" fuzzy-qid="Q176">Dunham [Québec] :</match>
+  <match qid="Q45797" fuzzy-qid="Q142">Dunkirk (France)</match>
+  <match qid="Q3041562" fuzzy-qid="Q176">Durham-Sud, Qc :</match>
+  <match qid="Q3046582" fuzzy-qid="Q176">Eastman :</match>
+  <match qid="Q22" fuzzy-qid="Q145">Écosse</match>
+  <match qid="Q23436" fuzzy-qid="Q145">[Édimbourg, Écosse] :</match>
+  <match qid="Q23436" fuzzy-qid="Q145">Édimbourg (Écosse)</match>
+  <match qid="Q23436" fuzzy-qid="Q145">Édimbourg, Écosse</match>
+  <match qid="Q2096" fuzzy-qid="Q1951">Edmondon, Alberta :</match>
+  <match qid="Q2096" fuzzy-qid="Q1951">Edmondton (Alb.)</match>
+  <match qid="Q2096" fuzzy-qid="Q1951">Edmonton :</match>
+  <match qid="Q2096" fuzzy-qid="Q1951">Edmonton (Alb.)</match>
+  <match qid="Q2096" fuzzy-qid="Q1951">Edmonton (Alberta)</match>
+  <match qid="Q79" fuzzy-qid="Q79">Égypte</match>
+  <match qid="Q702259" fuzzy-qid="Q183">Elberfeld (Wuppertal, Allemagne)</match>
+  <match qid="Q29" fuzzy-qid="Q29">Espagne</match>
+  <match qid="Q29" fuzzy-qid="Q29">Espagne :</match>
+  <match qid="Q1122368" fuzzy-qid="Q176">Estrie (Québec)</match>
+  <match qid="Q30" fuzzy-qid="Q30">États-Unis</match>
+  <match qid="Q30" fuzzy-qid="Q30">États-Unis :</match>
+  <match qid="Q30" fuzzy-qid="Q30">É.-U.</match>
+  <match qid="Q134672" fuzzy-qid="Q145">Exeter (Angleterre)</match>
+  <match qid="Q1078961" fuzzy-qid="Q142">Eymoutiers [France] :</match>
+  <match qid="Q141743" fuzzy-qid="Q176">[Farnham, Québec] :</match>
+  <match qid="Q141743" fuzzy-qid="Q176">[Farnham, Québec] ;</match>
+  <match qid="Q141743" fuzzy-qid="Q176">Farnham (Québec)</match>
+  <match qid="Q332026" fuzzy-qid="Q142">Fère-en-Tardenois (France)</match>
+  <match qid="Q33" fuzzy-qid="Q33">Finlande</match>
+  <match qid="Q3078488" fuzzy-qid="Q176">Fortierville (Québec)</match>
+  <match qid="Q142" fuzzy-qid="Q142">[France :</match>
+  <match qid="Q142" fuzzy-qid="Q142">France</match>
+  <match qid="Q142" fuzzy-qid="Q142">France :</match>
+  <match qid="Q1794" fuzzy-qid="Q183">Francfort-sur-le-Main (Allemagne)</match>
+  <match qid="Q1794" fuzzy-qid="Q183">Frankfurt/Main, Germany :</match>
+  <match qid="Q2138" fuzzy-qid="Q1965">Fredericton (N.-B.)</match>
+  <match qid="Q2138" fuzzy-qid="Q1965">Fredericton (N.-B.) :</match>
+  <match qid="Q2138" fuzzy-qid="Q1965">Fredericton (Nouveau-Brunswick) Canada :</match>
+  <match qid="Q2138" fuzzy-qid="Q1965">Fredericton, Nouveau-Brunswick, Canada :</match>
+  <match qid="Q3087431" fuzzy-qid="Q176">Frelighsburg, QC :</match>
+  <match qid="Q15982096" fuzzy-qid="Q1904">Galt (Cambridge, Ont.)</match>
+  <match qid="Q1296" fuzzy-qid="Q31">Gand :</match>
+  <match qid="Q141903" fuzzy-qid="Q176">Gaspé (Québec)</match>
+  <match qid="Q728139" fuzzy-qid="Q176">Gaspésie-Îles-de-la-Madeleine (Québec)</match>
+  <match qid="Q141844" fuzzy-qid="Q176">Gatineau :</match>
+  <match qid="Q141844" fuzzy-qid="Q176">[Gatineau, Québec] :</match>
+  <match qid="Q141844" fuzzy-qid="Q176">Gatineau (Québec)</match>
+  <match qid="Q141844" fuzzy-qid="Q176">Gatineau (Québec) Canada :</match>
+  <match qid="Q1792" fuzzy-qid="Q36">Gdańsk (Pologne)</match>
+  <match qid="Q71" fuzzy-qid="Q39">Genève :</match>
+  <match qid="" fuzzy-qid="">Glatz (Allemagne)</match>
+  <match qid="Q141881" fuzzy-qid="Q176">Granby (Québec)</match>
+  <match qid="Q141881" fuzzy-qid="Q176">Granby (Québec)</match>
+  <match qid="Q145" fuzzy-qid="Q145">Grande-Bretagne</match>
+  <match qid="Q291278" fuzzy-qid="Q176">Grand-Mère (Shawinigan, Québec)</match>
+  <match qid="Q3113451" fuzzy-qid="Q176">[Grand-Métis, Québec] :</match>
+  <match qid="Q3113451" fuzzy-qid="Q176">Grand-Métis (Québec)</match>
+  <match qid="Q41" fuzzy-qid="Q41">Grèce</match>
+  <match qid="Q1289" fuzzy-qid="Q142">Grenoble :</match>
+  <match qid="Q1289" fuzzy-qid="Q142">Grenoble (France)</match>
+  <match qid="Q985593" fuzzy-qid="Q176">Grondines (Deschambault-Grondines, Québec)</match>
+  <match qid="Q16572" fuzzy-qid="Q148">Guangzhou [China] :</match>
+  <match qid="Q774" fuzzy-qid="Q774">Guatemala :</match>
+  <match qid="Q3122367" fuzzy-qid="Q1952">Guysborough, N.-É.</match>
+  <match qid="Q210907" fuzzy-qid="Q1973">Haida Gwaii (C.-B.)</match>
+  <match qid="Q41621" fuzzy-qid="Q801">Haïfa (Israël)</match>
+  <match qid="Q9284985" fuzzy-qid="Q1904">Haileybury (Ont.)</match>
+  <match qid="Q790" fuzzy-qid="Q790">Haïti</match>
+  <match qid="Q2141" fuzzy-qid="Q1952">Halifax :</match>
+  <match qid="Q2141" fuzzy-qid="Q1952">Halifax (N.-É.)</match>
+  <match qid="Q2141" fuzzy-qid="Q1952">[Halifax, Nouvelle-Écosse] :</match>
+  <match qid="Q2141" fuzzy-qid="Q1952">Halifax, Nova Scotia :</match>
+  <match qid="Q1055" fuzzy-qid="Q183">Hambourg (Allemagne)</match>
+  <match qid="Q1055" fuzzy-qid="Q183">Hamburgh :</match>
+  <match qid="Q133116" fuzzy-qid="Q1904">Hamilton :</match>
+  <match qid="Q133116" fuzzy-qid="Q1904">Hamilton (Ont.)</match>
+  <match qid="Q139101" fuzzy-qid="Q176">[Hampstead, Québec] :</match>
+  <match qid="Q33486" fuzzy-qid="Q779">Hartford (Conn.)</match>
+  <match qid="Q28029338" fuzzy-qid="Q176">Havre-aux-Maisons :</match>
+  <match qid="Q2966" fuzzy-qid="Q183">Heidelberg ;</match>
+  <match qid="Q504348" fuzzy-qid="Q183">[Hildburghausen, Allemagne] :</match>
+  <match qid="Q244154" fuzzy-qid="Q241">Holguin, Cuba</match>
+  <match qid="Q8646" fuzzy-qid="Q8646">Hongkong</match>
+  <match qid="Q28" fuzzy-qid="Q28">Hongrie</match>
+  <match qid="Q141445" fuzzy-qid="Q176">Hudson (Québec)</match>
+  <match qid="Q2995979" fuzzy-qid="Q176">Hull :</match>
+  <match qid="Q2995979" fuzzy-qid="Q176">Hull (Québec)</match>
+  <match qid="Q46852" fuzzy-qid="Q218">Iaşi (Roumanie)</match>
+  <match qid="Q1204" fuzzy-qid="Q1204">Illinois</match>
+  <match qid="Q668" fuzzy-qid="Q668">Inde</match>
+  <match qid="Q991143" fuzzy-qid="Q176">Inukjuak (Québec)</match>
+  <match qid="Q794" fuzzy-qid="Q794">Iran</match>
+  <match qid="Q27" fuzzy-qid="Q27">Irlande</match>
+  <match qid="Q12559" fuzzy-qid="Q142">Isère (France)</match>
+  <match qid="Q801" fuzzy-qid="Q801">Israël</match>
+  <match qid="Q210772" fuzzy-qid="Q142">Issoudun (France)</match>
+  <match qid="Q38" fuzzy-qid="Q38">Italie</match>
+  <match qid="Q35997" fuzzy-qid="Q43">Izmir (Turquie)</match>
+  <match qid="Q17" fuzzy-qid="Q17">[Japon :</match>
+  <match qid="Q17" fuzzy-qid="Q17">Japon</match>
+  <match qid="Q17" fuzzy-qid="Q17">Japon :</match>
+  <match qid="Q141760" fuzzy-qid="Q176">[Joliette :</match>
+  <match qid="Q141760" fuzzy-qid="Q176">[Joliette] :</match>
+  <match qid="Q141760" fuzzy-qid="Q176">Joliette :</match>
+  <match qid="Q141760" fuzzy-qid="Q176">Joliette, Qué. :</match>
+  <match qid="Q141760" fuzzy-qid="Q176">[Joliette, Québec] :</match>
+  <match qid="Q141760" fuzzy-qid="Q176">Joliette (Québec)</match>
+  <match qid="Q141760" fuzzy-qid="Q176">Joliette (Québec) :</match>
+  <match qid="Q2593109" fuzzy-qid="Q176">Jonquière (Québec)</match>
+  <match qid="" fuzzy-qid="">Kabylie (Algérie)</match>
+  <match qid="Q1014394" fuzzy-qid="Q176">Kahnawake (Québec : Réserve indienne)</match>
+  <match qid="Q2795" fuzzy-qid="Q183">Karl-Marx-Stadt (Allemagne)</match>
+  <match qid="Q725029" fuzzy-qid="Q31">Kasterlee :</match>
+  <match qid="Q725029" fuzzy-qid="Q31">Kasterlee, Belgique :</match>
+  <match qid="Q4115712" fuzzy-qid="Q37">Kaunas (Lituanie)</match>
+  <match qid="Q232226" fuzzy-qid="Q1973">Kelowna, B.C. :</match>
+  <match qid="Q232226" fuzzy-qid="Q1973">Kelowna (C.-B.)</match>
+  <match qid="Q288781" fuzzy-qid="Q145">Kensington (Londres, Angleterre)</match>
+  <match qid="Q67479626" fuzzy-qid="Q145">Kent (Angleterre)</match>
+  <match qid="Q1186" fuzzy-qid="Q668">Kerala (Inde)</match>
+  <match qid="Q202973" fuzzy-qid="Q1904">Kingston ;</match>
+  <match qid="Q202973" fuzzy-qid="Q1904">Kingston (Ont.)</match>
+  <match qid="Q202973" fuzzy-qid="Q1904">Kingston [Ont.] :</match>
+  <match qid="Q973112" fuzzy-qid="Q724">Kittery (Maine : Ville)</match>
+  <match qid="Q4872637" fuzzy-qid="Q1904">Kleinburg, Ont. :</match>
+  <match qid="Q4872637" fuzzy-qid="Q1904">Kleinburg (Ontario) Canada :</match>
+  <match qid="Q4872637" fuzzy-qid="Q1904">Kleinburg, Ontario, Canada :</match>
+  <match qid="Q31487" fuzzy-qid="Q36">Kraków :</match>
+  <match qid="Q2090352" fuzzy-qid="Q176">La Baie (Saguenay, Québec)</match>
+  <match qid="Q142246" fuzzy-qid="Q176">Lac-Brome (Québec)</match>
+  <match qid="Q142246" fuzzy-qid="Q176">Lac-Brome [Québec] :</match>
+  <match qid="Q1474128" fuzzy-qid="Q176">Lachine :</match>
+  <match qid="Q142250" fuzzy-qid="Q176">Lachute, Québec</match>
+  <match qid="Q1743833" fuzzy-qid="Q1951">Lacombe (Alb.)</match>
+  <match qid="Q6479050" fuzzy-qid="Q1166">Lakeside [Mich.] :</match>
+  <match qid="Q3217608" fuzzy-qid="Q176">Lanoraie (Québec)</match>
+  <match qid="Q112855438" fuzzy-qid="Q176">L'Anse-de-Roche (Québec)</match>
+  <match qid="Q142355" fuzzy-qid="Q176">La Pocatière :</match>
+  <match qid="Q142355" fuzzy-qid="Q176">[La Pocatière, Québec] :</match>
+  <match qid="Q142092" fuzzy-qid="Q176">La Prairie :</match>
+  <match qid="Q82185" fuzzy-qid="Q142">La Rochelle (France)</match>
+  <match qid="Q1629121" fuzzy-qid="Q176">[LaSalle :</match>
+  <match qid="Q1629121" fuzzy-qid="Q176">La Salle :</match>
+  <match qid="Q1629121" fuzzy-qid="Q176">LaSalle :</match>
+  <match qid="Q1629121" fuzzy-qid="Q176">LaSalle (Montréal, Québec)</match>
+  <match qid="Q1629121" fuzzy-qid="Q176">[LaSalle, Québec] :</match>
+  <match qid="Q141933" fuzzy-qid="Q176">La Sarre (Québec)</match>
+  <match qid="Q141754" fuzzy-qid="Q176">L'Assomption :</match>
+  <match qid="Q141754" fuzzy-qid="Q176">L'Assomption, QC :</match>
+  <match qid="Q141754" fuzzy-qid="Q176">L'Assomption (Québec)</match>
+  <match qid="Q141769" fuzzy-qid="Q176">La Tuque (Québec)</match>
+  <match qid="Q807" fuzzy-qid="Q39">Lausanne :</match>
+  <match qid="Q807" fuzzy-qid="Q39">[Lausanne, Suisse] :</match>
+  <match qid="Q807" fuzzy-qid="Q39">Lausanne (Suisse)</match>
+  <match qid="Q3219729" fuzzy-qid="Q176">Lauzon (Lévis, Québec)</match>
+  <match qid="Q141810" fuzzy-qid="Q176">[Laval :</match>
+  <match qid="Q141810" fuzzy-qid="Q176">[Laval] :</match>
+  <match qid="Q141810" fuzzy-qid="Q176">Laval :</match>
+  <match qid="Q141810" fuzzy-qid="Q176">Laval,</match>
+  <match qid="Q141810" fuzzy-qid="Q176">Laval, QC :</match>
+  <match qid="Q141810" fuzzy-qid="Q176">[Laval, Québec] :</match>
+  <match qid="Q141810" fuzzy-qid="Q176">Laval (Québec)</match>
+  <match qid="Q141810" fuzzy-qid="Q176">Laval (Québec) :</match>
+  <match qid="Q23106" fuzzy-qid="Q145">Leicestershire (Angleterre)</match>
+  <match qid="Q2079" fuzzy-qid="Q183">Leipzig (Allemagne)</match>
+  <match qid="Q475519" fuzzy-qid="Q142">[Le Relecq-Kerhuon, France],</match>
+  <match qid="Q3236497" fuzzy-qid="Q176">Les Éboulements (Québec)</match>
+  <match qid="Q1628875" fuzzy-qid="Q176">Le Sud-Ouest (Montréal, Québec)</match>
+  <match qid="Q270887" fuzzy-qid="Q1951">Lethbridge (Alberta) :</match>
+  <match qid="Q139208" fuzzy-qid="Q176">Lévis :</match>
+  <match qid="Q139208" fuzzy-qid="Q176">[Lévis, Québec] :</match>
+  <match qid="Q139208" fuzzy-qid="Q176">Lévis (Québec)</match>
+  <match qid="" fuzzy-qid="">[Lieu de production non identifié],</match>
+  <match qid="Q2868" fuzzy-qid="Q419">Lima (Pérou)</match>
+  <match qid="Q281272" fuzzy-qid="Q29">Linares (Espagne)</match>
+  <match qid="Q597" fuzzy-qid="Q45">Lisbonne, Portugal</match>
+  <match qid="Q37" fuzzy-qid="Q37">Lituanie</match>
+  <match qid="Q84" fuzzy-qid="Q145">[London :</match>
+  <match qid="Q84" fuzzy-qid="Q145">[London] :</match>
+  <match qid="Q84" fuzzy-qid="Q145">London :</match>
+  <match qid="Q84" fuzzy-qid="Q145">London ;</match>
+  <match qid="Q84" fuzzy-qid="Q145">London [England] :</match>
+  <match qid="Q92561" fuzzy-qid="Q1904">London (Ont.)</match>
+  <match qid="Q84" fuzzy-qid="Q145">London, United Kingdom :</match>
+  <match qid="Q84" fuzzy-qid="Q145">[Londres] :</match>
+  <match qid="Q84" fuzzy-qid="Q145">Londres :</match>
+  <match qid="Q84" fuzzy-qid="Q145">[Londres, Angleterre] :</match>
+  <match qid="Q84" fuzzy-qid="Q145">Londres (Angleterre)</match>
+  <match qid="Q84" fuzzy-qid="Q145">Londres, Royaume-Uni :</match>
+  <match qid="Q16739" fuzzy-qid="Q99">[Long Beach (Calif.)] :</match>
+  <match qid="Q16739" fuzzy-qid="Q99">Long Beach (Calif.)</match>
+  <match qid="Q139398" fuzzy-qid="Q176">[Longueuil] :</match>
+  <match qid="Q139398" fuzzy-qid="Q176">[Longueuil] ;</match>
+  <match qid="Q139398" fuzzy-qid="Q176">[Longueuil],</match>
+  <match qid="Q139398" fuzzy-qid="Q176">Longueuil :</match>
+  <match qid="Q139398" fuzzy-qid="Q176">[Longueuil, Québec] :</match>
+  <match qid="Q139398" fuzzy-qid="Q176">Longueuil (Québec)</match>
+  <match qid="Q139398" fuzzy-qid="Q176">Longueuil, Québec</match>
+  <match qid="Q139398" fuzzy-qid="Q176">Longueuil (Québec) Canada :</match>
+  <match qid="Q139398" fuzzy-qid="Q176">Longueuil (Québec), Canada :</match>
+  <match qid="Q139398" fuzzy-qid="Q176">Longueuil Québec, Canada :</match>
+  <match qid="Q139398" fuzzy-qid="Q176">Longueuil, Québec, Canada :</match>
+  <match qid="Q318535" fuzzy-qid="Q142">Longwy (France)</match>
+  <match qid="Q142162" fuzzy-qid="Q176">Lorraine :</match>
+  <match qid="Q1137" fuzzy-qid="Q142">Lorraine (France)</match>
+  <match qid="Q65" fuzzy-qid="Q99">Los Angeles :</match>
+  <match qid="Q65" fuzzy-qid="Q99">Los Angeles (Calif.)</match>
+  <match qid="Q3259966" fuzzy-qid="Q176">Lotbinière (Québec)</match>
+  <match qid="Q141410" fuzzy-qid="Q176">Louiseville (Québec)</match>
+  <match qid="Q456" fuzzy-qid="Q142">[Lyon] :</match>
+  <match qid="Q456" fuzzy-qid="Q142">Lyon :</match>
+  <match qid="Q456" fuzzy-qid="Q142">[Lyon (France) :</match>
+  <match qid="Q456" fuzzy-qid="Q142">Lyon (France)</match>
+  <match qid="Q141576" fuzzy-qid="Q176">Macamic (Québec)</match>
+  <match qid="Q2807" fuzzy-qid="Q29">Madrid (Espagne)</match>
+  <match qid="Q142004" fuzzy-qid="Q176">[Magog :</match>
+  <match qid="Q142004" fuzzy-qid="Q176">Magog :</match>
+  <match qid="Q142004" fuzzy-qid="Q176">Magog (Québec)</match>
+  <match qid="Q142004" fuzzy-qid="Q176">Magog, Québec</match>
+  <match qid="Q3285285" fuzzy-qid="Q176">Manawan (Québec : Réserve indienne)</match>
+  <match qid="Q3285492" fuzzy-qid="Q176">Mandeville :</match>
+  <match qid="Q1948" fuzzy-qid="Q1948">Manitoba</match>
+  <match qid="Q1948" fuzzy-qid="Q1948">Manitoba :</match>
+  <match qid="Q1948" fuzzy-qid="Q1948">Manitoba (Province)</match>
+  <match qid="Q1579913" fuzzy-qid="Q176">Maria (Québec)</match>
+  <match qid="Q141420" fuzzy-qid="Q176">Marieville (Québec</match>
+  <match qid="Q1028" fuzzy-qid="Q1028">Maroc</match>
+  <match qid="Q23482" fuzzy-qid="Q142">Marseille (France)</match>
+  <match qid="Q17054" fuzzy-qid="Q142">Martinique</match>
+  <match qid="Q141748" fuzzy-qid="Q176">[Mascouche :</match>
+  <match qid="Q1907079" fuzzy-qid="Q176">[Mashteuiatsh] :</match>
+  <match qid="Q2957112" fuzzy-qid="Q1973">[Masset, Colombie-Britannique] :</match>
+  <match qid="Q142029" fuzzy-qid="Q176">Matane :</match>
+  <match qid="Q142029" fuzzy-qid="Q176">[Matane, Québec] :</match>
+  <match qid="Q142029" fuzzy-qid="Q176">Matane (Québec)</match>
+  <match qid="Q510572" fuzzy-qid="Q176">Mauricie (Québec)</match>
+  <match qid="Q1570283" fuzzy-qid="Q1973">Mayne, Île (C.-B.)</match>
+  <match qid="Q48278" fuzzy-qid="Q739">Medellín (Colombie)</match>
+  <match qid="Q16563" fuzzy-qid="Q1509">Memphis (Tenn.)</match>
+  <match qid="Q3307071" fuzzy-qid="Q176">Messines (Québec)</match>
+  <match qid="Q22690" fuzzy-qid="Q142">Metz, France :</match>
+  <match qid="Q234735" fuzzy-qid="Q142">Meudon (France)</match>
+  <match qid="Q1489" fuzzy-qid="Q96">Mexico :</match>
+  <match qid="Q1489" fuzzy-qid="Q96">Mexico (Mexique)</match>
+  <match qid="Q96" fuzzy-qid="Q96">Mexique</match>
+  <match qid="Q8652" fuzzy-qid="Q812">Miami (Flor.)</match>
+  <match qid="Q490" fuzzy-qid="Q38">Milan :</match>
+  <match qid="Q490" fuzzy-qid="Q38">Milan (Italie)</match>
+  <match qid="Q490" fuzzy-qid="Q38">Milan (Italie) :</match>
+  <match qid="Q490" fuzzy-qid="Q38">Milano :</match>
+  <match qid="Q557643" fuzzy-qid="Q1973">Mission (C.-B.)</match>
+  <match qid="Q50816" fuzzy-qid="Q1904">Mississauga (Ont.)</match>
+  <match qid="Q235" fuzzy-qid="Q235">Monaco</match>
+  <match qid="Q235" fuzzy-qid="Q235">Monaco :</match>
+  <match qid="Q457334" fuzzy-qid="Q1965">Moncton :</match>
+  <match qid="Q457334" fuzzy-qid="Q1965">[Moncton, N.-B.] :</match>
+  <match qid="Q457334" fuzzy-qid="Q1965">[Moncton, N.B. :</match>
+  <match qid="Q457334" fuzzy-qid="Q1965">Moncton (N.-B.)</match>
+  <match qid="Q457334" fuzzy-qid="Q1965">Moncton (N.-B.) :</match>
+  <match qid="Q457334" fuzzy-qid="Q1965">Moncton, N.-B.</match>
+  <match qid="Q457334" fuzzy-qid="Q1965">Moncton, N.B. :</match>
+  <match qid="Q457334" fuzzy-qid="Q1965">[Moncton, Nouveau-Brunswick],</match>
+  <match qid="Q457334" fuzzy-qid="Q1965">Moncton, Nouveau-Brunswick (Canada) :</match>
+  <match qid="Q1055861" fuzzy-qid="Q1223">Monroe (Wash.)</match>
+  <match qid="Q154715" fuzzy-qid="Q142">Montbéliard (France) :</match>
+  <match qid="Q931679" fuzzy-qid="Q176">Montérégie (Québec)</match>
+  <match qid="Q141717" fuzzy-qid="Q176">[Mont-Joli :</match>
+  <match qid="Q141717" fuzzy-qid="Q176">Mont-Joli (Québec)</match>
+  <match qid="Q141946" fuzzy-qid="Q176">[Montmagny, Québec] :</match>
+  <match qid="Q141946" fuzzy-qid="Q176">Montmagny (Québec)</match>
+  <match qid="Q6441" fuzzy-qid="Q142">[Montpellier, France] :</match>
+  <match qid="Q6441" fuzzy-qid="Q142">Montpellier (France)</match>
+  <match qid="Q6441" fuzzy-qid="Q176">[Montpellier, Québec] :</match>
+  <match qid="Q340" fuzzy-qid="Q176">[Montréa] :</match>
+  <match qid="Q340" fuzzy-qid="Q176">[Montreal :</match>
+  <match qid="Q340" fuzzy-qid="Q176">[Montreal] :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montreal :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montreal ;</match>
+  <match qid="Q340" fuzzy-qid="Q176">[Montréal :</match>
+  <match qid="Q340" fuzzy-qid="Q176">[Montréal,</match>
+  <match qid="Q340" fuzzy-qid="Q176">[Montréal: :</match>
+  <match qid="Q340" fuzzy-qid="Q176">[Montréal] :</match>
+  <match qid="Q340" fuzzy-qid="Q176">[Montréal],</match>
+  <match qid="Q340" fuzzy-qid="Q176">[Montréal], :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal ;</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal,</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montreal, Canada :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal (Canada)</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal, Canada :</match>
+  <match qid="Q1714436" fuzzy-qid="Q176">Montréal-Nord, QC :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montreal, QC :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal (Qc) :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal, Qc :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal (QC) :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal, Qc, Canada :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal, QC Canada :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal, QC, Canada :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montreal, Quebec :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montreal (Québec) :</match>
+  <match qid="Q340" fuzzy-qid="Q176">[Montréal, Québec] :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal (Québec)</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal (Québec) :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal (Québec] :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal(Québec)</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal, Québec</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal, Québec :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal, Québec ;</match>
+  <match qid="Q340" fuzzy-qid="Q176">MOntréal (Québec)</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montreal (Quebec) Canada :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montreal, Quebec, Canada :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montreal, Québec, Canada :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal (Québec) Canada :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal (Québec), Canada :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Montréal, Québec, Canada :</match>
+  <match qid="Q193370" fuzzy-qid="Q142">Montreuil, France :</match>
+  <match qid="Q139406" fuzzy-qid="Q176">[Mont-Saint-Hilaire] :</match>
+  <match qid="Q139406" fuzzy-qid="Q176">[Mont-Saint-Hilaire, Québec] :</match>
+  <match qid="Q139406" fuzzy-qid="Q176">Mont-Saint-Hilaire (Québec)</match>
+  <match qid="Q139406" fuzzy-qid="Q176">Mont-Saint-Hilaire (Québec) Canada :</match>
+  <match qid="Q340" fuzzy-qid="Q176">Mtl :</match>
+  <match qid="Q340" fuzzy-qid="Q176">MTL, Québec, CA,</match>
+  <match qid="Q1156" fuzzy-qid="Q668">Mumbai (Inde)</match>
+  <match qid="Q1726" fuzzy-qid="Q183">Munich (Allemagne)</match>
+  <match qid="" fuzzy-qid="">Nagasawa :</match>
+  <match qid="Q980084" fuzzy-qid="Q145">Naim (Écosse)</match>
+  <match qid="Q16461" fuzzy-qid="Q1973">Nanaimo (C.-B.)</match>
+  <match qid="Q12191" fuzzy-qid="Q142">Nantes (France)</match>
+  <match qid="Q2634" fuzzy-qid="Q38">Naples, Italie</match>
+  <match qid="" fuzzy-qid="">Nassau (N.Y.)</match>
+  <match qid="Q3336474" fuzzy-qid="Q176">Natashquan (Québec)</match>
+  <match qid="Q1965" fuzzy-qid="Q1965">N.-B.</match>
+  <match qid="Q759" fuzzy-qid="Q759">New Hampshire</match>
+  <match qid="Q3339136" fuzzy-qid="Q176">Newport :</match>
+  <match qid="Q142295" fuzzy-qid="Q176">New Richmond (Québec)</match>
+  <match qid="Q142295" fuzzy-qid="Q176">New Richmond (Québec) :</match>
+  <match qid="Q60" fuzzy-qid="Q1384">[New York] :</match>
+  <match qid="Q60" fuzzy-qid="Q1384">New York :</match>
+  <match qid="Q60" fuzzy-qid="Q1384">New York ;</match>
+  <match qid="Q60" fuzzy-qid="Q1384">[New York, N.Y.] :</match>
+  <match qid="Q60" fuzzy-qid="Q1384">New York (N.Y.)</match>
+  <match qid="Q60" fuzzy-qid="Q1384">New York, N.Y.</match>
+  <match qid="Q60" fuzzy-qid="Q1384">New-York (N.Y.)</match>
+  <match qid="Q274120" fuzzy-qid="Q1904">Niagara Falls (Ont.)</match>
+  <match qid="Q141595" fuzzy-qid="Q176">[Nicolet :</match>
+  <match qid="Q141595" fuzzy-qid="Q176">[Nicolet] :</match>
+  <match qid="Q141595" fuzzy-qid="Q176">Nicolet :</match>
+  <match qid="Q141595" fuzzy-qid="Q176">Nicolet,</match>
+  <match qid="Q141595" fuzzy-qid="Q176">Nicolet (Québec)</match>
+  <match qid="Q141595" fuzzy-qid="Q176">Nicolet-Sud :</match>
+  <match qid="Q1436530" fuzzy-qid="Q1904">Nipissing (Ont. : Canton)</match>
+  <match qid="Q3343919" fuzzy-qid="Q176">Normétal (Québec)</match>
+  <match qid="Q1001626" fuzzy-qid="Q1973">North Vancouver :</match>
+  <match qid="Q1188951" fuzzy-qid="Q1904">North York (Ont.) :</match>
+  <match qid="Q20" fuzzy-qid="Q20">Norvège</match>
+  <match qid="Q1965" fuzzy-qid="Q1965">Nouveau-Brunswick</match>
+  <match qid="Q987" fuzzy-qid="Q668">Nouvelle-Delhi :</match>
+  <match qid="Q60" fuzzy-qid="Q1384">N.Y. :</match>
+  <match qid="Q1904" fuzzy-qid="Q1904">Ont.</match>
+  <match qid="Q1904" fuzzy-qid="Q1904">Ontario</match>
+  <match qid="Q14916" fuzzy-qid="Q183">Osfildern, Germany :</match>
+  <match qid="Q211867" fuzzy-qid="Q1904">Oshawa :</match>
+  <match qid="Q1930" fuzzy-qid="Q1904">[Ottawa :</match>
+  <match qid="Q1930" fuzzy-qid="Q1904">[Ottawa] :</match>
+  <match qid="Q1930" fuzzy-qid="Q1904">Ottawa :</match>
+  <match qid="Q1930" fuzzy-qid="Q1904">Ottawa (Ont.)</match>
+  <match qid="Q1930" fuzzy-qid="Q1904">Ottawa, Ont.</match>
+  <match qid="Q1930" fuzzy-qid="Q1904">Ottawa (Ontario)</match>
+  <match qid="Q2042095" fuzzy-qid="Q176">[Outremont :</match>
+  <match qid="Q2042095" fuzzy-qid="Q176">[Outremont] :</match>
+  <match qid="Q2042095" fuzzy-qid="Q176">Outremont :</match>
+  <match qid="Q2042095" fuzzy-qid="Q176">Outremont (Montréal, Québec)</match>
+  <match qid="Q34217" fuzzy-qid="Q145">Oxford (Angleterre)</match>
+  <match qid="Q211870" fuzzy-qid="Q145">Paisley (Écosse)</match>
+  <match qid="Q2656" fuzzy-qid="Q38">Palerme (Italie)</match>
+  <match qid="Q219060" fuzzy-qid="Q219060">Palestine</match>
+  <match qid="Q90" fuzzy-qid="Q142">[Paris] :</match>
+  <match qid="Q90" fuzzy-qid="Q142">[Paris],</match>
+  <match qid="Q90" fuzzy-qid="Q142">Paris</match>
+  <match qid="Q90" fuzzy-qid="Q142">Paris :</match>
+  <match qid="Q90" fuzzy-qid="Q142">Paris ;</match>
+  <match qid="Q90" fuzzy-qid="Q142">Paris,</match>
+  <match qid="Q90" fuzzy-qid="Q142">Paris, :</match>
+  <match qid="Q90" fuzzy-qid="Q142">(Paris (France)</match>
+  <match qid="Q90" fuzzy-qid="Q142">(Paris) France</match>
+  <match qid="Q90" fuzzy-qid="Q142">[Paris, France] :</match>
+  <match qid="Q90" fuzzy-qid="Q142">[Paris, France],</match>
+  <match qid="Q90" fuzzy-qid="Q142">Paris (France)</match>
+  <match qid="Q90" fuzzy-qid="Q142">Paris [France] :</match>
+  <match qid="Q90" fuzzy-qid="Q142">Paris(France)</match>
+  <match qid="Q90" fuzzy-qid="Q142">Paris, France</match>
+  <match qid="Q90" fuzzy-qid="Q142">Paris, France :</match>
+  <match qid="Q90" fuzzy-qid="Q142">Paris (FRance)</match>
+  <match qid="Q29999" fuzzy-qid="Q29999">Pays-Bas</match>
+  <match qid="Q1083423" fuzzy-qid="Q1408">Pemberton, N.J.</match>
+  <match qid="Q141991" fuzzy-qid="Q176">Percé :</match>
+  <match qid="Q141991" fuzzy-qid="Q176">Percé (Québec)</match>
+  <match qid="Q419" fuzzy-qid="Q419">Pérou</match>
+  <match qid="Q2428683" fuzzy-qid="Q1904">Perth (Ont.)</match>
+  <match qid="Q3377323" fuzzy-qid="Q176">Petite-Rivière-Saint-François (Québec)</match>
+  <match qid="Q1345" fuzzy-qid="Q1400">Philadelphie, Penns.</match>
+  <match qid="Q928" fuzzy-qid="Q928">Philippines</match>
+  <match qid="Q3382642" fuzzy-qid="Q176">Piémont (Québec)</match>
+  <match qid="Q2360927" fuzzy-qid="Q176">Pierrefonds (Montréal, Québec)</match>
+  <match qid="Q3387912" fuzzy-qid="Q176">Pierreville (Québec)</match>
+  <match qid="Q3388940" fuzzy-qid="Q176">[Piopolis, Québec] :</match>
+  <match qid="Q3388940" fuzzy-qid="Q176">Piopolis (Québec)</match>
+  <match qid="Q3388940" fuzzy-qid="Q176">PIopolis (Québec)</match>
+  <match qid="Q309343" fuzzy-qid="Q403">Pirot (Serbie)</match>
+  <match qid="Q1342" fuzzy-qid="Q1400">Pittsburgh (Penns.)</match>
+  <match qid="Q141378" fuzzy-qid="Q176">Plessisville (Québec)</match>
+  <match qid="Q3393516" fuzzy-qid="Q176">Pointe-aux-Trembles (Montréal, Québec)</match>
+  <match qid="Q142271" fuzzy-qid="Q176">Pointe-Claire :</match>
+  <match qid="Q142271" fuzzy-qid="Q176">Pointe-Claire (Montréal)</match>
+  <match qid="Q3393527" fuzzy-qid="Q176">Pointe-du-Lac :</match>
+  <match qid="Q21007786" fuzzy-qid="Q176">Pointe Gatineau, Québec</match>
+  <match qid="Q36" fuzzy-qid="Q36">Pologne</match>
+  <match qid="Q631960" fuzzy-qid="Q142">Pont-en-Royans :</match>
+  <match qid="Q12411" fuzzy-qid="Q29">Pontevedra, España :</match>
+  <match qid="Q3463385" fuzzy-qid="Q176">Port-au-Persil :</match>
+  <match qid="Q34261" fuzzy-qid="Q790">Port-au-Prince (Haïti)</match>
+  <match qid="Q142430" fuzzy-qid="Q176">[Portneuf],</match>
+  <match qid="Q142430" fuzzy-qid="Q176">Portneuf (Québec)</match>
+  <match qid="Q45" fuzzy-qid="Q45">Portugal</match>
+  <match qid="Q3400241" fuzzy-qid="Q176">Poularies (Québec)</match>
+  <match qid="Q1012728" fuzzy-qid="Q176">Povungnituk :</match>
+  <match qid="Q1085" fuzzy-qid="Q213">Prague (République tchèque)</match>
+  <match qid="Q590205" fuzzy-qid="Q1973">Prince George (C.-B.)</match>
+  <match qid="Q590205" fuzzy-qid="Q1973">Prince George (C.-B.) :</match>
+  <match qid="Q79923" fuzzy-qid="Q96">[Puebla, Mexique],</match>
+  <match qid="Q69738" fuzzy-qid="Q39">Pully :</match>
+  <match qid="Q69738" fuzzy-qid="Q39">Pully (Suisse)</match>
+  <match qid="Q1012728" fuzzy-qid="Q176">Puvinitu Kaipi Kanata [i.e. Puvirnituq, Québec, Canada] :</match>
+  <match qid="Q1012728" fuzzy-qid="Q176">Puvirnituk,</match>
+  <match qid="Q1012728" fuzzy-qid="Q176">[Puvirnituq, Québec] :</match>
+  <match qid="Q1012728" fuzzy-qid="Q176">Puvirnituq (Québec)</match>
+  <match qid="Q2145" fuzzy-qid="Q176">[Québec :</match>
+  <match qid="Q2145" fuzzy-qid="Q176">[Québec] :</match>
+  <match qid="Q2145" fuzzy-qid="Q176">[Québec],</match>
+  <match qid="Q2145" fuzzy-qid="Q176">Québec</match>
+  <match qid="Q2145" fuzzy-qid="Q176">Québec :</match>
+  <match qid="Q2145" fuzzy-qid="Q176">Québec,</match>
+  <match qid="Q2145" fuzzy-qid="Q176">Québec,,</match>
+  <match qid="Q2145" fuzzy-qid="Q176">QUébec</match>
+  <match qid="Q2145" fuzzy-qid="Q176">Québec, Canada :</match>
+  <match qid="Q176" fuzzy-qid="Q176">Québec, P.Q. :</match>
+  <match qid="Q176" fuzzy-qid="Q176">Quebec (Province) :</match>
+  <match qid="Q176" fuzzy-qid="Q176">Québec (province)</match>
+  <match qid="Q176" fuzzy-qid="Q176">(Québec Province)</match>
+  <match qid="Q176" fuzzy-qid="Q176">[Québec (Province) :</match>
+  <match qid="Q176" fuzzy-qid="Q176">[Québec (Province),</match>
+  <match qid="Q176" fuzzy-qid="Q176">[Québec (Province): :</match>
+  <match qid="Q176" fuzzy-qid="Q176">[Québec (Province)] :</match>
+  <match qid="Q176" fuzzy-qid="Q176">[Québec (Province)],</match>
+  <match qid="Q176" fuzzy-qid="Q176">Québec (Province)</match>
+  <match qid="Q176" fuzzy-qid="Q176">Québec (Province) :</match>
+  <match qid="Q176" fuzzy-qid="Q176">Québec (Province),</match>
+  <match qid="Q176" fuzzy-qid="Q176">Québec(Province) :</match>
+  <match qid="Q176" fuzzy-qid="Q176">[Québec, Québec] :</match>
+  <match qid="Q176" fuzzy-qid="Q176">[Québec, Québec],</match>
+  <match qid="Q176" fuzzy-qid="Q176">Québec (Québec)</match>
+  <match qid="Q176" fuzzy-qid="Q176">Québec (Québec) :</match>
+  <match qid="Q176" fuzzy-qid="Q176">Québec, Québec</match>
+  <match qid="Q176" fuzzy-qid="Q176">Québec (Québec) Canada :</match>
+  <match qid="Q342" fuzzy-qid="Q142">Quimper (France)</match>
+  <match qid="Q40340" fuzzy-qid="Q1537">Racine (Wisc.)</match>
+  <match qid="Q3420451" fuzzy-qid="Q176">Rawdon (Québec)</match>
+  <match qid="Q23025" fuzzy-qid="Q1951">Red Deer (Alb.)</match>
+  <match qid="Q2123" fuzzy-qid="Q1989">Regina :</match>
+  <match qid="Q2123" fuzzy-qid="Q1989">Regina (Sask.)</match>
+  <match qid="Q2123" fuzzy-qid="Q1989">Regina (Sask.) :</match>
+  <match qid="Q139427" fuzzy-qid="Q176">[Repentigny :</match>
+  <match qid="Q139427" fuzzy-qid="Q176">[Repentigny] :</match>
+  <match qid="Q139427" fuzzy-qid="Q176">Repentigny (Québec)</match>
+  <match qid="Q139427" fuzzy-qid="Q176">Repentigny, Québec</match>
+  <match qid="Q213" fuzzy-qid="Q213">République tchèque</match>
+  <match qid="Q3085" fuzzy-qid="Q183">Reutlingen :</match>
+  <match qid="Q142306" fuzzy-qid="Q176">[Richelieu] :</match>
+  <match qid="Q142306" fuzzy-qid="Q176">[Richelieu, Québec],</match>
+  <match qid="Q142306" fuzzy-qid="Q176">Richelieu (Québec)</match>
+  <match qid="Q43421" fuzzy-qid="Q1370">Richmond (Virg.)</match>
+  <match qid="Q1336" fuzzy-qid="Q176">[Rimouski :</match>
+  <match qid="Q1336" fuzzy-qid="Q176">[Rimouski] :</match>
+  <match qid="Q1336" fuzzy-qid="Q176">Rimouski :</match>
+  <match qid="Q1336" fuzzy-qid="Q176">[Rimouski, Québec] :</match>
+  <match qid="Q1336" fuzzy-qid="Q176">Rimouski (Québec)</match>
+  <match qid="Q1336" fuzzy-qid="Q176">Rimouski (Québec) :</match>
+  <match qid="Q1336" fuzzy-qid="Q176">Rimouski, Québec</match>
+  <match qid="Q142024" fuzzy-qid="Q176">Rivière-du-Loup :</match>
+  <match qid="Q142024" fuzzy-qid="Q176">Rivière-du-Loup (Québec)</match>
+  <match qid="Q3433564" fuzzy-qid="Q176">Rivière-Koksoak (Québec)</match>
+  <match qid="Q141954" fuzzy-qid="Q176">Roberval (Québec)</match>
+  <match qid="Q220" fuzzy-qid="Q38">Roma :</match>
+  <match qid="Q220" fuzzy-qid="Q38">Rome (Italie)</match>
+  <match qid="Q142196" fuzzy-qid="Q176">[Rosemère] :</match>
+  <match qid="Q2861" fuzzy-qid="Q183">Rostock (Allemagne)</match>
+  <match qid="Q34370" fuzzy-qid="Q29999">Rotterdam (Pays-Bas)</match>
+  <match qid="Q30974" fuzzy-qid="Q142">Rouen (France)</match>
+  <match qid="Q218" fuzzy-qid="Q218">Roumanie</match>
+  <match qid="Q3445509" fuzzy-qid="Q176">Rouyn :</match>
+  <match qid="Q141804" fuzzy-qid="Q176">Rouyn-Noranda :</match>
+  <match qid="Q141804" fuzzy-qid="Q176">Rouyn-Noranda, Qc, Canada :</match>
+  <match qid="Q141804" fuzzy-qid="Q176">Rouyn-Noranda (Québec)</match>
+  <match qid="Q141804" fuzzy-qid="Q176">Rouyn-Noranda (Québec) :</match>
+  <match qid="Q103717" fuzzy-qid="Q33">Rovaniemi (Finlande)</match>
+  <match qid="Q3445698" fuzzy-qid="Q176">Roxboro :</match>
+  <match qid="Q145" fuzzy-qid="Q145">Royaume-Uni</match>
+  <match qid="Q193920" fuzzy-qid="Q142">Rueil-Malmaison [France] :</match>
+  <match qid="Q159" fuzzy-qid="Q159">Russie</match>
+  <match qid="Q2028824" fuzzy-qid="Q1965">Sackville (N.-B.)</match>
+  <match qid="Q139229" fuzzy-qid="Q176">[Saguenay] :</match>
+  <match qid="Q139229" fuzzy-qid="Q176">Saguenay :</match>
+  <match qid="Q615914" fuzzy-qid="Q176">Saguenay-Lac-Saint-Jean (Québec)</match>
+  <match qid="Q139229" fuzzy-qid="Q176">Saguenay, Québec</match>
+  <match qid="Q3461699" fuzzy-qid="Q176">Saint-Alban :</match>
+  <match qid="Q3461717" fuzzy-qid="Q176">Saint-Alexis-de-Matapédia (Québec)</match>
+  <match qid="Q3461731" fuzzy-qid="Q176">Saint-Alphonse-Rodriguez (Québec)</match>
+  <match qid="Q3461790" fuzzy-qid="Q176">Saint-Antoine-de-l'Isle-aux-Grues (Québec)</match>
+  <match qid="Q3461792" fuzzy-qid="Q176">Saint-Antoine-sur-le-Richelieu :</match>
+  <match qid="Q3461792" fuzzy-qid="Q176">Saint-Antoine-sur-Richelieu (Québec)</match>
+  <match qid="Q3461800" fuzzy-qid="Q176">Saint-Apollinaire (Québec)</match>
+  <match qid="Q3461800" fuzzy-qid="Q176">Saint-Apollinaire, Québec :</match>
+  <match qid="Q3461803" fuzzy-qid="Q176">[Saint-Armand, Québec] :</match>
+  <match qid="Q3461803" fuzzy-qid="Q176">Saint-Armand (Québec)</match>
+  <match qid="Q142102" fuzzy-qid="Q176">Saint-Augustin-de-Desmaures (Québec)</match>
+  <match qid="Q3461850" fuzzy-qid="Q176">Saint-Barthélemy</match>
+  <match qid="Q142170" fuzzy-qid="Q176">Saint-Basile-le-Grand :</match>
+  <match qid="Q3461876" fuzzy-qid="Q176">Saint-Benoît (Mirabel, Québec)</match>
+  <match qid="Q3461900" fuzzy-qid="Q176">Saint-Boniface :</match>
+  <match qid="Q3461900" fuzzy-qid="Q176">Saint-Boniface-de-Shawinigan (Québec)</match>
+  <match qid="Q1004192" fuzzy-qid="Q1948">Saint-Boniface (Man.) :</match>
+  <match qid="Q3461942" fuzzy-qid="Q176">Saint-Casimir (Québec)</match>
+  <match qid="Q3461950" fuzzy-qid="Q176">Saint-Charles-de-Bellechasse (Québec)</match>
+  <match qid="Q3461951" fuzzy-qid="Q176">Saint-Charles-de-Bourget (Québec) :</match>
+  <match qid="Q142064" fuzzy-qid="Q176">[Saint-Constant :</match>
+  <match qid="Q1451329" fuzzy-qid="Q176">Saint-Damien (Québec)</match>
+  <match qid="Q788410" fuzzy-qid="Q176">[Saint-Denis-sur-Richelieu, Québec] :</match>
+  <match qid="" fuzzy-qid="">Saint-Donat :</match>
+  <match qid="Q142560" fuzzy-qid="Q176">Sainte-Adèle (Québec)</match>
+  <match qid="Q141738" fuzzy-qid="Q176">Sainte-Agathe des Monts (Québec)</match>
+  <match qid="Q141738" fuzzy-qid="Q176">Sainte-Agathe-des-Monts (Québec)</match>
+  <match qid="Q141927" fuzzy-qid="Q176">Sainte-Anne-de-Beaupré :</match>
+  <match qid="Q141927" fuzzy-qid="Q176">Sainte-Anne-de-Beaupré (Québec)</match>
+  <match qid="Q3464159" fuzzy-qid="Q176">Sainte-Anne-de-la-Pérade (Québec)</match>
+  <match qid="Q51557" fuzzy-qid="Q176">Sainte-Anne-des-Monts (Québec)</match>
+  <match qid="Q141565" fuzzy-qid="Q176">Sainte-Catherine-de-la-Jacques-Cartier (Québec)</match>
+  <match qid="Q141565" fuzzy-qid="Q176">Sainte-Catherine (La Jacques-Cartier, Québec)</match>
+  <match qid="Q3464236" fuzzy-qid="Q176">[Sainte-Cécile-de-Lévrard :</match>
+  <match qid="Q70090" fuzzy-qid="Q39">Sainte-Croix (Suisse)</match>
+  <match qid="Q3462103" fuzzy-qid="Q176">Saint-Edmond-de-Grantham (Québec)</match>
+  <match qid="Q3462103" fuzzy-qid="Q176">Saint-Edmond-de-Grantham, Québec :</match>
+  <match qid="Q14875569" fuzzy-qid="Q176">Sainte-Foy (Québec)</match>
+  <match qid="Q14875569" fuzzy-qid="Q176">Sainte-Foy, Québec</match>
+  <match qid="Q3464302" fuzzy-qid="Q176">[Sainte-Hélène-de-Kamouraska, Québec] :</match>
+  <match qid="Q3464300" fuzzy-qid="Q176">[Sainte-Hélène-de-Mancebourg :</match>
+  <match qid="Q3464300" fuzzy-qid="Q176">[Sainte-Hélène-de-Mancebourg] :</match>
+  <match qid="Q3464300" fuzzy-qid="Q176">[Sainte-Hélène-de-Mancebourg],</match>
+  <match qid="Q3464300" fuzzy-qid="Q176">Sainte-Hélène-de-Mancebourg :</match>
+  <match qid="Q3464300" fuzzy-qid="Q176">[Sainte-Hélène-de-Mancebourg, Québec],</match>
+  <match qid="Q142156" fuzzy-qid="Q176">Sainte-Julie :</match>
+  <match qid="Q3464318" fuzzy-qid="Q176">Sainte-Justine (Québec)</match>
+  <match qid="Q3464337" fuzzy-qid="Q176">Sainte-Marguerite-Marie (Mistassini, Québec)</match>
+  <match qid="Q141652" fuzzy-qid="Q176">Sainte-Marie (La Nouvelle-Beauce, Québec)</match>
+  <match qid="Q3464378" fuzzy-qid="Q176">Sainte-Mélanie (Québec)</match>
+  <match qid="Q3464390" fuzzy-qid="Q176">Sainte-Perpétue :</match>
+  <match qid="Q3464399" fuzzy-qid="Q176">[Sainte-Pétronille, Québec] :</match>
+  <match qid="Q3464411" fuzzy-qid="Q176">Sainte-Rose (Laval, Québec)</match>
+  <match qid="Q142087" fuzzy-qid="Q176">Sainte-Thérèse :</match>
+  <match qid="" fuzzy-qid="">[Saint-Étienne :</match>
+  <match qid="Q142113" fuzzy-qid="Q176">Saint-Étienne-de-la-Malbaie (La Malbaie, Québec)</match>
+  <match qid="Q3463602" fuzzy-qid="Q176">[Saint-Étienne-de-Lauzon :</match>
+  <match qid="Q3463602" fuzzy-qid="Q176">Saint-Étienne-de-Lauzon (Lévis, Québec)</match>
+  <match qid="Q3462127" fuzzy-qid="Q176">Saint-Eugène-de-Guigues (Québec)</match>
+  <match qid="" fuzzy-qid="">Saint-Germain (Québec)</match>
+  <match qid="Q3462398" fuzzy-qid="Q176">Saint-Hermas (Québec)</match>
+  <match qid="Q139406" fuzzy-qid="Q176">Saint-Hilaire (Québec)</match>
+  <match qid="Q3462423" fuzzy-qid="Q176">Saint-Honoré de Chicoutimi :</match>
+  <match qid="Q3462426" fuzzy-qid="Q176">Saint-Hubert (Longueuil, Québec)</match>
+  <match qid="Q141873" fuzzy-qid="Q176">[Saint-Hyacinthe] :</match>
+  <match qid="Q141873" fuzzy-qid="Q176">Saint-Hyacinthe</match>
+  <match qid="Q141873" fuzzy-qid="Q176">Saint-Hyacinthe :</match>
+  <match qid="Q141873" fuzzy-qid="Q176">Saint-Hyacinthe (Québec)</match>
+  <match qid="Q141873" fuzzy-qid="Q176">Saint-Hyacinthe (Québec) :</match>
+  <match qid="Q141873" fuzzy-qid="Q176">Saint-Hyacinthe, Québec</match>
+  <match qid="Q141873" fuzzy-qid="Q176">Saint-Hyacinthe (Québec) Canada :</match>
+  <match qid="Q141873" fuzzy-qid="Q176">Saint-Hyacinthe (Québec) : Expression, Centre d'exposition de Saint-Hyacinthe ;</match>
+  <match qid="Q3462475" fuzzy-qid="Q176">[Saint-Jacques-le-Mineur, Québec],</match>
+  <match qid="" fuzzy-qid="">Saint-Jean :</match>
+  <match qid="Q3462533" fuzzy-qid="Q176">[Saint-Jean-de-Matha :</match>
+  <match qid="Q3462533" fuzzy-qid="Q176">[Saint-Jean-de-Matha] :</match>
+  <match qid="Q3462551" fuzzy-qid="Q176">[Saint-Jean-des-Piles :</match>
+  <match qid="Q3462551" fuzzy-qid="Q176">[Saint-Jean-des-Piles] :</match>
+  <match qid="Q3462551" fuzzy-qid="Q176">Saint-Jean-des-Piles (Shawinigan, Québec)</match>
+  <match qid="Q3462513" fuzzy-qid="Q176">[Saint-Jean-Port-Joli] :</match>
+  <match qid="Q3462513" fuzzy-qid="Q176">Saint-Jean-Port-Joli (Québec)</match>
+  <match qid="Q3462513" fuzzy-qid="Q176">Saint-Jean-Port-Joli (Québec)2rvm</match>
+  <match qid="Q141977" fuzzy-qid="Q176">[Saint-Jean-sur-Richelieu] :</match>
+  <match qid="Q141977" fuzzy-qid="Q176">[Saint-Jean-sur-Richelieu],</match>
+  <match qid="Q141977" fuzzy-qid="Q176">Saint-Jean-sur-Richelieu :</match>
+  <match qid="Q141977" fuzzy-qid="Q176">[Saint-Jean-sur-Richelieu, Québec] :</match>
+  <match qid="Q141977" fuzzy-qid="Q176">Saint-Jean-sur-Richelieu (Québec)</match>
+  <match qid="Q141977" fuzzy-qid="Q176">Saint-Jean-sur-Richelieu (Québec) Canada :</match>
+  <match qid="Q141724" fuzzy-qid="Q176">[Saint-Jérôme :</match>
+  <match qid="Q141724" fuzzy-qid="Q176">[Saint-Jérôme] :</match>
+  <match qid="Q141724" fuzzy-qid="Q176">Saint-Jérôme :</match>
+  <match qid="Q141724" fuzzy-qid="Q176">Saint-Jérôme (La Rivière-du-Nord, Québec)</match>
+  <match qid="Q141724" fuzzy-qid="Q176">Saint-Jérôme (Québec)</match>
+  <match qid="Q141724" fuzzy-qid="Q176">Saint-Jérôme (Québec) :</match>
+  <match qid="Q141613" fuzzy-qid="Q176">Saint-Joseph-de-Beauce :</match>
+  <match qid="Q30322676" fuzzy-qid="Q176">Saint-Joseph-de-la-Rive :</match>
+  <match qid="Q3462683" fuzzy-qid="Q176">[Saint-Lambert] :</match>
+  <match qid="Q3462683" fuzzy-qid="Q176">Saint-Lambert :</match>
+  <match qid="Q3462683" fuzzy-qid="Q176">Saint-Lambert [Québec] :</match>
+  <match qid="Q3462683" fuzzy-qid="Q176">[Saint-Laurent :</match>
+  <match qid="Q3462683" fuzzy-qid="Q176">[Saint-Laurent] :</match>
+  <match qid="Q2117999" fuzzy-qid="Q176">Saint-Laurent (Montréal, Québec)</match>
+  <match qid="Q3462847" fuzzy-qid="Q176">Saint-Majorique-de-Grantham (Québec)</match>
+  <match qid="Q163108" fuzzy-qid="Q142">Saint-Malo (France)</match>
+  <match qid="Q511005" fuzzy-qid="Q176">Saint-Mathieu-de-Rioux (Québec)</match>
+  <match qid="Q3462962" fuzzy-qid="Q176">Saint-Maurice :</match>
+  <match qid="Q3462962" fuzzy-qid="Q176">Saint-Maurice (Québec)</match>
+  <match qid="Q208260" fuzzy-qid="Q142">Saint-Paul (Alpes-Maritimes, France)</match>
+  <match qid="Q3463104" fuzzy-qid="Q176">[Saint-Paul-d'Abbotsford] :</match>
+  <match qid="Q3463104" fuzzy-qid="Q176">[Saint-Paul-d'Abbotsford, Québec] :</match>
+  <match qid="Q3463104" fuzzy-qid="Q176">Saint-Paul-d'Abbotsford (Québec)</match>
+  <match qid="Q208260" fuzzy-qid="Q142">Saint-Paul de Vence :</match>
+  <match qid="Q208260" fuzzy-qid="Q142">Saint-Paul [France] :</match>
+  <match qid="Q656" fuzzy-qid="Q159">Saint-Pétersbourg (Russie)</match>
+  <match qid="Q3463170" fuzzy-qid="Q176">Saint-Pierre-de-Broughton (Québec)</match>
+  <match qid="Q3463276" fuzzy-qid="Q176">Saint-Robert (Québec)</match>
+  <match qid="Q3463283" fuzzy-qid="Q176">Saint-Roch-de-l'Achigan (Québec)</match>
+  <match qid="Q3463432" fuzzy-qid="Q176">[Saint-Sévère, Québec],</match>
+  <match qid="Q3463430" fuzzy-qid="Q176">Saint-Séverin (Mékinac, Québec)</match>
+  <match qid="Q3463379" fuzzy-qid="Q176">Saint-Simon :</match>
+  <match qid="Q134635" fuzzy-qid="Q17">Saitama (Japon)</match>
+  <match qid="Q142039" fuzzy-qid="Q176">Salaberry-de-Valleyfield (Québec)</match>
+  <match qid="Q15695" fuzzy-qid="Q29">[Salamanque, Espagne] :</match>
+  <match qid="Q15695" fuzzy-qid="Q29">Salamanque (Espagne)</match>
+  <match qid="Q1658715" fuzzy-qid="Q96">San Agustín Etla (Mexique)</match>
+  <match qid="Q975" fuzzy-qid="Q1439">San Antonio (Tex.)</match>
+  <match qid="Q975" fuzzy-qid="Q1439">[San Antonio, Texas] :</match>
+  <match qid="Q62" fuzzy-qid="Q99">San Francisco (Calif.)</match>
+  <match qid="Q44253" fuzzy-qid="Q414">Santiego del Estero (Argentine)</match>
+  <match qid="Q209036" fuzzy-qid="Q45">São Miguel (Açores)</match>
+  <match qid="Q22642" fuzzy-qid="Q142">Sarreguemines (France)</match>
+  <match qid="Q1989" fuzzy-qid="Q1989">Saskatchewan</match>
+  <match qid="Q10566" fuzzy-qid="Q1989">Saskatoon :</match>
+  <match qid="Q13320" fuzzy-qid="Q38">Savona :</match>
+  <match qid="Q13320" fuzzy-qid="Q38">Savone :</match>
+  <match qid="Q13320" fuzzy-qid="Q38">Savone (Italie) :</match>
+  <match qid="Q957746" fuzzy-qid="Q176">Sayabec (Québec)</match>
+  <match qid="Q49221" fuzzy-qid="Q816">Scottsdale (Ariz.) :</match>
+  <match qid="Q1041" fuzzy-qid="Q1041">Sénégal</match>
+  <match qid="Q8684" fuzzy-qid="Q18097">Séoul (Corée)</match>
+  <match qid="Q141699" fuzzy-qid="Q176">Sept-Îles :</match>
+  <match qid="Q403" fuzzy-qid="Q403">Serbie</match>
+  <match qid="Q8717" fuzzy-qid="Q29">Séville (Espagne)</match>
+  <match qid="Q3481424" fuzzy-qid="Q176">Shannon :</match>
+  <match qid="Q141980" fuzzy-qid="Q176">Shawinigan (Québec)</match>
+  <match qid="Q11720" fuzzy-qid="Q148">Shenyang (Chine)</match>
+  <match qid="Q15174" fuzzy-qid="Q148">[Shenzhen, Chine] :</match>
+  <match qid="Q139473" fuzzy-qid="Q176">[Sherbrooke :</match>
+  <match qid="Q139473" fuzzy-qid="Q176">[Sherbrooke] :</match>
+  <match qid="Q139473" fuzzy-qid="Q176">Sherbrooke :</match>
+  <match qid="Q139473" fuzzy-qid="Q176">Sherbrooke, Qc :</match>
+  <match qid="Q139473" fuzzy-qid="Q176">Sherbrooke, QC :</match>
+  <match qid="Q139473" fuzzy-qid="Q176">[Sherbrooke (Québec)] :</match>
+  <match qid="Q139473" fuzzy-qid="Q176">[Sherbrooke, Québec] :</match>
+  <match qid="Q139473" fuzzy-qid="Q176">Sherbrooke (Québec)</match>
+  <match qid="Q139473" fuzzy-qid="Q176">Sherbrooke (Québec) :</match>
+  <match qid="Q139473" fuzzy-qid="Q176">Sherbrooke, Québec</match>
+  <match qid="Q23103" fuzzy-qid="Q145">Shropshire (Angleterre)</match>
+  <match qid="Q3483898" fuzzy-qid="Q176">[Sillery] :</match>
+  <match qid="" fuzzy-qid="">[S.l. :</match>
+  <match qid="" fuzzy-qid="">S.l. :</match>
+  <match qid="" fuzzy-qid="">[S.n. :</match>
+  <match qid="Q68965" fuzzy-qid="Q39">Soleure, Suisse</match>
+  <match qid="Q29386656" fuzzy-qid="Q176">[Sorel] :</match>
+  <match qid="Q29386656" fuzzy-qid="Q176">Sorel (Québec)</match>
+  <match qid="Q29386656" fuzzy-qid="Q176">Sorel (Sorel-Tracy, Québec)</match>
+  <match qid="Q142010" fuzzy-qid="Q176">Sorel-Tracy (Québec)</match>
+  <match qid="Q1663" fuzzy-qid="Q224">Split (Croatie)</match>
+  <match qid="Q23105" fuzzy-qid="Q145">Staffordshire (Angleterre)</match>
+  <match qid="Q173813" fuzzy-qid="Q99">Stanford (Calif.)</match>
+  <match qid="Q142375" fuzzy-qid="Q176">Stanstead (Québec)</match>
+  <match qid="Q502250" fuzzy-qid="Q1370">Staunton (Virg.)</match>
+  <match qid="Q1004192" fuzzy-qid="Q1948">St. Boniface (Winnipeg, Man.)</match>
+  <match qid="Q3463602" fuzzy-qid="Q176">St-Étienne, Lévis [Québec] :</match>
+  <match qid="" fuzzy-qid="">Stettin (Allemagne)</match>
+  <match qid="" fuzzy-qid="">St-Hilaire-sur-Richelieu (Québec)</match>
+  <match qid="Q141873" fuzzy-qid="Q176">St-Hyacinthe :</match>
+  <match qid="Q141873" fuzzy-qid="Q176">St-Hyacinthe (Québec)</match>
+  <match qid="Q2082" fuzzy-qid="Q2003">St. John's, T.-N. :</match>
+  <match qid="Q2082" fuzzy-qid="Q2003">St. John's (T.-N.-L.)</match>
+  <match qid="Q2082" fuzzy-qid="Q2003">St. John's, T.-N.-L.</match>
+  <match qid="Q2117999" fuzzy-qid="Q176">[St-Laurent] :</match>
+  <match qid="Q2542731" fuzzy-qid="Q1904">St. Marys (Ont.)</match>
+  <match qid="" fuzzy-qid="">St. Michael's, T.-N. :</match>
+  <match qid="Q1754" fuzzy-qid="Q34">Stockholm :</match>
+  <match qid="Q86727989" fuzzy-qid="Q176">Stoneham (Québec)</match>
+  <match qid="Q6602" fuzzy-qid="Q142">Strasbourg :</match>
+  <match qid="Q6602" fuzzy-qid="Q142">Strasbourg (France)</match>
+  <match qid="Q6602" fuzzy-qid="Q142">Strasbourg, France</match>
+  <match qid="Q740756" fuzzy-qid="Q1904">Stratford (Ont.) :</match>
+  <match qid="Q1022" fuzzy-qid="Q183">Stuttgart (Allemagne)</match>
+  <match qid="Q383434" fuzzy-qid="Q1904">Sudbury :</match>
+  <match qid="Q383434" fuzzy-qid="Q1904">Sudbury (Ont.) :</match>
+  <match qid="Q39" fuzzy-qid="Q39">Suisse</match>
+  <match qid="Q50157" fuzzy-qid="Q38">Sulmona (Italie)</match>
+  <match qid="Q188304" fuzzy-qid="Q145">Sunderland (Tyne and Wear, Angleterre)</match>
+  <match qid="Q390583" fuzzy-qid="Q1973">Surrey (C.-B.) :</match>
+  <match qid="Q142521" fuzzy-qid="Q176">Sutton :</match>
+  <match qid="Q142521" fuzzy-qid="Q176">[Sutton, Québec],</match>
+  <match qid="Q142521" fuzzy-qid="Q176">Sutton (Québec)</match>
+  <match qid="Q142521" fuzzy-qid="Q176">Sutton, Québec, Canada :</match>
+  <match qid="Q1009298" fuzzy-qid="Q145">Swanage (Angleterre)</match>
+  <match qid="Q3130" fuzzy-qid="Q408">Sydney :</match>
+  <match qid="Q1867" fuzzy-qid="Q865">Taipei :</match>
+  <match qid="Q1867" fuzzy-qid="Q865">Taipei (Taiwan)</match>
+  <match qid="Q3616" fuzzy-qid="Q794">Téhéran, Iran</match>
+  <match qid="Q48335" fuzzy-qid="Q48335">Terre-Neuve</match>
+  <match qid="Q2003" fuzzy-qid="Q2003">Terre-Neuve-et-Labrador :</match>
+  <match qid="Q869" fuzzy-qid="Q869">Thaïlande</match>
+  <match qid="Q141995" fuzzy-qid="Q176">Thetford-Mines (Québec)</match>
+  <match qid="Q22640" fuzzy-qid="Q142">Thionville (France)</match>
+  <match qid="Q1490" fuzzy-qid="Q1490">Tokyo :</match>
+  <match qid="Q1490" fuzzy-qid="Q17">Tōkyō (Japon)</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Tonronto (Ont.)</match>
+  <match qid="Q172" fuzzy-qid="Q1904">[Toronto :</match>
+  <match qid="Q172" fuzzy-qid="Q1904">[Toronto] :</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Toronto :</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Toronto, Canada :</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Toronto, ON :</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Toronto, ON. ;</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Toronto (Ont.)</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Toronto, Ont. :</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Toronto (Ontario)</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Toronto, Ontario :</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Toronto (Ontario) Canada :</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Toronto, Ontario, Canada :</match>
+  <match qid="Q386991" fuzzy-qid="Q96">Torreón (Coahuila, Mexique)</match>
+  <match qid="Q172" fuzzy-qid="Q1904">Totonto (Ont.)</match>
+  <match qid="Q7880" fuzzy-qid="Q142">[Toulouse] :</match>
+  <match qid="Q7880" fuzzy-qid="Q142">Toulouse :</match>
+  <match qid="Q182481" fuzzy-qid="Q142">Tourcoing :</match>
+  <match qid="Q182481" fuzzy-qid="Q142">Tourcoing (France)</match>
+  <match qid="Q173219" fuzzy-qid="Q31">Tournai (Belgique)</match>
+  <match qid="Q173219" fuzzy-qid="Q31">Tournai (Belgique) :</match>
+  <match qid="Q288" fuzzy-qid="Q142">Tours (France)</match>
+  <match qid="Q112836851" fuzzy-qid="Q176">Tracy (Québec)</match>
+  <match qid="Q546" fuzzy-qid="Q38">Trieste (Italie)</match>
+  <match qid="Q128323" fuzzy-qid="Q754">Trinité (Île)</match>
+  <match qid="Q44012" fuzzy-qid="Q176">[Trois-Rivières] :</match>
+  <match qid="Q44012" fuzzy-qid="Q176">[Trois-Rivières],</match>
+  <match qid="Q44012" fuzzy-qid="Q176">Trois-Rivières</match>
+  <match qid="Q44012" fuzzy-qid="Q176">Trois-Rivières :</match>
+  <match qid="Q44012" fuzzy-qid="Q176">[Trois-Rivières, Québec] :</match>
+  <match qid="Q44012" fuzzy-qid="Q176">Trois-Rivières (Québec)</match>
+  <match qid="Q44012" fuzzy-qid="Q176">Trois-Rivières (Québec) :</match>
+  <match qid="Q600301" fuzzy-qid="Q1384">Troy (N.Y.)</match>
+  <match qid="Q283064" fuzzy-qid="Q1952">Truro (N.-É.)</match>
+  <match qid="Q3806" fuzzy-qid="Q183">Tübingen (Allemagne)</match>
+  <match qid="Q948" fuzzy-qid="Q948">Tunisie</match>
+  <match qid="Q43" fuzzy-qid="Q43">Turquie</match>
+  <match qid="Q829" fuzzy-qid="Q829">Utah</match>
+  <match qid="Q141813" fuzzy-qid="Q176">[Valcourt] :</match>
+  <match qid="Q141813" fuzzy-qid="Q176">Valcourt :</match>
+  <match qid="Q141813" fuzzy-qid="Q176">Valcourt (Québec)</match>
+  <match qid="Q3553367" fuzzy-qid="Q176">[Val-David :</match>
+  <match qid="Q3553367" fuzzy-qid="Q176">[Val-David] :</match>
+  <match qid="Q3553367" fuzzy-qid="Q176">Val-David :</match>
+  <match qid="Q3553367" fuzzy-qid="Q176">[Val-David, Québec] :</match>
+  <match qid="Q3553367" fuzzy-qid="Q176">Val-David (Québec)</match>
+  <match qid="Q3553367" fuzzy-qid="Q176">Val-David, Québec</match>
+  <match qid="Q141937" fuzzy-qid="Q176">Val d'Or (Québec)</match>
+  <match qid="Q141937" fuzzy-qid="Q176">Val-d'Or (Québec)</match>
+  <match qid="Q8818" fuzzy-qid="Q29">Valence (Espagne)</match>
+  <match qid="Q3553918" fuzzy-qid="Q176">Vallée-Jonction :</match>
+  <match qid="Q1667428" fuzzy-qid="Q176">[Val-Morin, Québec] :</match>
+  <match qid="Q7909049" fuzzy-qid="Q176">Val-Paradis (Baie-James, Québec)</match>
+  <match qid="Q24639" fuzzy-qid="Q1973">[Vancouver :</match>
+  <match qid="Q24639" fuzzy-qid="Q1973">[Vancouver] :</match>
+  <match qid="Q24639" fuzzy-qid="Q1973">Vancouver :</match>
+  <match qid="Q24639" fuzzy-qid="Q1973">Vancouver (B.C.)</match>
+  <match qid="Q24639" fuzzy-qid="Q1973">Vancouver (C.-B.)</match>
+  <match qid="Q24639" fuzzy-qid="Q1973">Vancouver, C.-B.</match>
+  <match qid="Q3554614" fuzzy-qid="Q1904">Vankleek Hill (Ont.)</match>
+  <match qid="Q234728" fuzzy-qid="Q142">Vanves [France] :</match>
+  <match qid="Q142014" fuzzy-qid="Q176">Varennes :</match>
+  <match qid="" fuzzy-qid="">Vaucluse (France)</match>
+  <match qid="Q141711" fuzzy-qid="Q176">[Vaudreuil-Dorion] :</match>
+  <match qid="Q141711" fuzzy-qid="Q176">Vaudreuil-Dorion :</match>
+  <match qid="Q141711" fuzzy-qid="Q176">Vaudreuil-Dorion, Qc :</match>
+  <match qid="Q141711" fuzzy-qid="Q176">Vaudreuil-Dorion (Québec)</match>
+  <match qid="Q1517624" fuzzy-qid="Q176">Vaudreuil-Soulanges (Québec)</match>
+  <match qid="Q44013" fuzzy-qid="Q1904">Vaughan (Ont.)</match>
+  <match qid="Q192368" fuzzy-qid="Q142">Vence :</match>
+  <match qid="Q2514459" fuzzy-qid="Q176">Verchères :</match>
+  <match qid="Q518076" fuzzy-qid="Q176">Verdun (Québec)</match>
+  <match qid="Q985671" fuzzy-qid="Q1973">Vernon (C.-B.)</match>
+  <match qid="Q2028" fuzzy-qid="Q38">Vérone (Italie)</match>
+  <match qid="Q68160" fuzzy-qid="Q39">Vevey (Suisse)</match>
+  <match qid="Q141731" fuzzy-qid="Q176">Victoriaville, Qc :</match>
+  <match qid="Q141731" fuzzy-qid="Q176">Victoriaville (Québec)</match>
+  <match qid="Q1741" fuzzy-qid="Q40">Vienne (Autriche)</match>
+  <match qid="Q1529351" fuzzy-qid="Q176">Vieux-Montréal, Québec, Canada :</match>
+  <match qid="Q2114279" fuzzy-qid="Q176">[Vieux-Québec] :</match>
+  <match qid="Q1912688" fuzzy-qid="Q38">Villafranca (Italy) :</match>
+  <match qid="Q674237" fuzzy-qid="Q39">Villars-sur-Ollon (Suisse)</match>
+  <match qid="Q193819" fuzzy-qid="Q142">Vincennes (France)</match>
+  <match qid="Q102217" fuzzy-qid="Q184">Vitebsk (Biélorussie)</match>
+  <match qid="Q72248" fuzzy-qid="Q142">[Vitry-sur-Seine, France] :</match>
+  <match qid="Q2420185" fuzzy-qid="Q759">Walpole (N.H.) [etc.] :</match>
+  <match qid="" fuzzy-qid="">Washington :</match>
+  <match qid="Q61" fuzzy-qid="Q61">Washington D.C. :</match>
+  <match qid="Q61" fuzzy-qid="Q61">Washington D.C. ; :</match>
+  <match qid="Q142289" fuzzy-qid="Q176">Waterloo (Québec)</match>
+  <match qid="Q676581" fuzzy-qid="Q176">Wemotaci (Québec : Réserve indienne)</match>
+  <match qid="Q139497" fuzzy-qid="Q176">[Westmount] :</match>
+  <match qid="Q139497" fuzzy-qid="Q176">Westmount :</match>
+  <match qid="Q139497" fuzzy-qid="Q176">Westmount (Québec)</match>
+  <match qid="Q139497" fuzzy-qid="Q176">Westmount, Québec :</match>
+  <match qid="Q139497" fuzzy-qid="Q176">Westmount, Québec, Canada :</match>
+  <match qid="Q386338" fuzzy-qid="Q1904">Whitby (Ont.)</match>
+  <match qid="Q139415" fuzzy-qid="Q176">Windsor (Québec)</match>
+  <match qid="Q2135" fuzzy-qid="Q1948">Winnipeg :</match>
+  <match qid="" fuzzy-qid="">Winnipeg : Galerie d'art de Winnipeg,</match>
+  <match qid="Q2135" fuzzy-qid="Q1948">Winnipeg (Man.)</match>
+  <match qid="Q2135" fuzzy-qid="Q1948">Winnipeg (Manitoba) :</match>
+  <match qid="Q12816" fuzzy-qid="Q142">[Yonne, France],</match>
+  <match qid="Q12816" fuzzy-qid="Q142">Yonne (France)</match>
+  <match qid="Q42462" fuzzy-qid="Q145">York (Angleterre)</match>
+  <match qid="Q163" fuzzy-qid="Q145">Yorkshire (Angleterre)</match>
+  <match qid="Q36704" fuzzy-qid="Q36704">Yougoslavie</match>
+  <match qid="Q3370" fuzzy-qid="Q224">Zadar (Croatie)</match>
+  <match qid="Q953" fuzzy-qid="Q953">Zambie</match>
+  <match qid="Q72" fuzzy-qid="Q39">Zurich, Suisse :</match>
+  <match qid="Q72" fuzzy-qid="Q39">Zurich, Switzerland :</match>
+</matches>
diff --git a/matches_roles.xml b/matches_roles.xml
new file mode 100644 (file)
index 0000000..8a12752
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<matches>
+  <match qid="Q42973" pid="P84">architecte</match>
+  <match qid="Q483501" pid="P170">artiste</match>
+  <match qid="Q482980" pid="P50">auteur</match>
+  <match qid="Q36180" pid="P50">auteur de texte ajouté</match>
+  <match qid="Q11569986" pid="P170">graveur</match>
+  <match qid="Q16947657" pid="P170">lithographe</match>
+  <match qid="Q33231" pid="P170">photographe</match>
+  <match qid="Q1281618" pid="P170">sculpteur</match>
+</matches>
diff --git a/merge_fixes.xslt b/merge_fixes.xslt
deleted file mode 100644 (file)
index cf5ce43..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<xsl:stylesheet version="1.0" xmlns:marc="http://www.loc.gov/MARC21/slim"
-                xmlns:xml="http://www.w3.org/XML/1998/namespace"
-                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
-  <!-- merge_fixes.xslt - Merge title fixes for bibliographic entries.
-    Copyright (C) 2025  Pierre Choffet
-
-    This program is free software: you can redistribute it and/or modify
-    it under the terms of version 3 of the GNU General Public License as
-    published by the Free Software Foundation.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program.  If not, see <http://www.gnu.org/licenses/>.
-    -->
-       <xsl:output indent="yes" method="xml" encoding="utf-8" />
-       
-       <xsl:param name="fixes-path" />
-       <xsl:param name="leader" />
-       <xsl:param name="original-title" />
-       <xsl:param name="title-lang" />
-       <xsl:param name="fixed-title" />
-       <xsl:param name="original-subtitle" />
-       <xsl:param name="subtitle-lang" />
-       <xsl:param name="fixed-subtitle" />
-       
-       <xsl:variable name="doublequote-workaround">%DOUBLEQUOTE-WORKAROUND%</xsl:variable>
-       <xsl:variable name="original-title-clean">
-               <xsl:call-template name="string-replace-all">
-                       <xsl:with-param name="text" select="$original-title" />
-                       <xsl:with-param name="replace" select="$doublequote-workaround" />
-                       <xsl:with-param name="by" select="'&quot;'" />
-               </xsl:call-template>
-       </xsl:variable>
-       <xsl:variable name="fixed-title-clean">
-               <xsl:call-template name="string-replace-all">
-                       <xsl:with-param name="text" select="$fixed-title" />
-                       <xsl:with-param name="replace" select="$doublequote-workaround" />
-                       <xsl:with-param name="by" select="'&quot;'" />
-               </xsl:call-template>
-       </xsl:variable>
-       <xsl:variable name="original-subtitle-clean">
-               <xsl:call-template name="string-replace-all">
-                       <xsl:with-param name="text" select="$original-subtitle" />
-                       <xsl:with-param name="replace" select="$doublequote-workaround" />
-                       <xsl:with-param name="by" select="'&quot;'" />
-               </xsl:call-template>
-       </xsl:variable>
-       <xsl:variable name="fixed-subtitle-clean">
-               <xsl:call-template name="string-replace-all">
-                       <xsl:with-param name="text" select="$fixed-subtitle" />
-                       <xsl:with-param name="replace" select="$doublequote-workaround" />
-                       <xsl:with-param name="by" select="'&quot;'" />
-               </xsl:call-template>
-       </xsl:variable>
-       
-       <xsl:key name="record-by-id" match="/records/record" use="@id" />
-       
-       <xsl:template match="node()|@*">
-               <xsl:copy>
-                       <xsl:apply-templates select="node()|@*" />
-               </xsl:copy>
-       </xsl:template>
-       
-       <xsl:template match="/records">
-               <!-- Rewrite  -->
-               
-               <xsl:choose>
-                       <xsl:when test="key('record-by-id', $leader)">
-                               <!-- Fix document has an entry with the given leader -->
-                               <xsl:copy>
-                                       <xsl:apply-templates select="node()|@*" />
-                               </xsl:copy>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <!-- No entry with the given leader in fix document -->
-                               <xsl:copy select=".">
-                                       <xsl:copy-of select="record" />
-                                       <xsl:element name="record">
-                                               <xsl:attribute name="id">
-                                                       <xsl:value-of select="$leader" />
-                                               </xsl:attribute>
-                                               
-                                               <!-- Add title -->
-                                               <!-- TODO: Deal with "[Sans titre]" -->
-                                               <xsl:if test="$original-title-clean and $title-lang and $fixed-title-clean">
-                                                       <xsl:call-template name="write-title" />
-                                               </xsl:if>
-                                               
-                                               <!-- Add subtitle -->
-                                               <xsl:if test="$original-subtitle-clean and $subtitle-lang and $fixed-subtitle-clean">
-                                                       <xsl:element name="fix">
-                                                               <xsl:attribute name="type">
-                                                                       <xsl:text>subtitle</xsl:text>
-                                                               </xsl:attribute>
-                                                               <xsl:attribute name="source">
-                                                                       <xsl:value-of select="$original-subtitle-clean" />
-                                                               </xsl:attribute>
-                                                               <xsl:attribute name="xml:lang">
-                                                                       <xsl:value-of select="$subtitle-lang" />
-                                                               </xsl:attribute>
-                                                               <xsl:value-of select="$fixed-subtitle-clean" />
-                                                       </xsl:element>
-                                               </xsl:if>
-                                       </xsl:element>
-                               </xsl:copy>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-       
-       <xsl:template match="/records/record">
-               <xsl:choose>
-                       <xsl:when test="@id != $leader">
-                               <xsl:copy-of select="." />
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:copy select=".">
-                                       <xsl:copy-of select="@*" />
-                                       <!-- Keep any title in another language but warn for them -->
-                                       <xsl:copy-of select="fix[@type='title' and @xml:lang != $title-lang]" />
-                                       <xsl:for-each select="fix[@type='title' and @xml:lang != $title-lang]">
-                                               <xsl:message terminate="no">
-                                                       <xsl:text>L’entrée avec le leader </xsl:text>
-                                                       <xsl:value-of select="../@id" />
-                                                       <xsl:text>a un titre dans la langue « </xsl:text>
-                                                       <xsl:value-of select="@xml:lang" />
-                                                       <xsl:text> » qui a été conservé en plus du nouveau titre en « </xsl:text>
-                                                       <xsl:value-of select="$title-lang" />
-                                                       <xsl:text> ».</xsl:text>
-                                               </xsl:message>
-                                       </xsl:for-each>
-                                       <!-- Add new title -->
-                                       <xsl:call-template name="write-title" />
-                               </xsl:copy>
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-       
-       <xsl:template name="write-title">
-               <xsl:element name="fix">
-                       <xsl:attribute name="type">
-                               <xsl:text>title</xsl:text>
-                       </xsl:attribute>
-                       <xsl:attribute name="source">
-                               <xsl:value-of select="$original-title-clean" />
-                       </xsl:attribute>
-                       <xsl:attribute name="xml:lang">
-                               <xsl:value-of select="$title-lang" />
-                       </xsl:attribute>
-                       <xsl:value-of select="$fixed-title-clean" />
-               </xsl:element>
-       </xsl:template>
-       <xsl:template match="fix" mode="title">
-               <xsl:choose>
-                       <!-- Same type and language -->
-                       <xsl:when test="@type='title' and @xml:lang=$title-lang">
-                               <xsl:call-template name="write-title" />
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:copy-of select="." />
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-       
-       <xsl:template name="string-replace-all">
-               <xsl:param name="text" />
-               <xsl:param name="replace" />
-               <xsl:param name="by" />
-               <xsl:choose>
-                       <xsl:when test="$text = '' or $replace = ''or not($replace)" >
-                               <xsl:value-of select="$text" />
-                       </xsl:when>
-                       <xsl:when test="contains($text, $replace)">
-                               <xsl:value-of select="substring-before($text,$replace)" />
-                               <xsl:value-of select="$by" />
-                               <xsl:call-template name="string-replace-all">
-                                       <xsl:with-param name="text" select="substring-after($text,$replace)" />
-                                       <xsl:with-param name="replace" select="$replace" />
-                                       <xsl:with-param name="by" select="$by" />
-                               </xsl:call-template>
-                       </xsl:when>
-                       <xsl:otherwise>
-                               <xsl:value-of select="$text" />
-                       </xsl:otherwise>
-               </xsl:choose>
-       </xsl:template>
-</xsl:stylesheet>
index 1fb114e13e6fa079dcae5a42dab502dfdb331737..f4b681457c288d5d45aa2cee0805e6013f770e1e 100644 (file)
@@ -3,7 +3,7 @@
                 xmlns:xml="http://www.w3.org/XML/1998/namespace"
                 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <!-- merge_marcxml.xslt - Merge two MARCXML files, removing duplicate records.
-    Copyright (C) 2025  Pierre Choffet
+    Copyright (C) 2025, 2026  Pierre Choffet
 
     This program is free software: you can redistribute it and/or modify
     it under the terms of version 3 of the GNU General Public License as
@@ -22,7 +22,9 @@
        <xsl:param name="marcxml-path" />
        
        <xsl:variable name="merge-doc" select="document($marcxml-path)" />
-       <xsl:key name="record-control-number" match="/marc:collection/marc:record" use="marc:controlfield[@tag='001']" />
+       <xsl:key name="authority-record-by-001" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) = 'z']" use="marc:controlfield[@tag='001']" />
+       <xsl:key name="bibliographic-record-by-001" match="/marc:collection/marc:record[substring(marc:leader, 7, 1) != 'z']" use="marc:controlfield[@tag='001']" />
+       <xsl:key name="record-uid" match="/marc:collection/marc:record" use="concat(marc:controlfield[@tag='001'], marc:leader)" />
        
        <xsl:template match="node()|@*">
                <xsl:copy>
        
        <xsl:template match="/marc:collection/marc:record" mode="source-doc">
                <xsl:variable name="source" select="current()" />
-               <xsl:variable name="leader" select="current()/marc:controlfield[@tag='001']" />
+               <xsl:variable name="controlfield-001" select="current()/marc:controlfield[@tag='001']" />
+               <xsl:variable name="leader" select="current()/marc:leader" />
+               <xsl:variable name="notice-type">
+                       <xsl:apply-templates select="current()" mode="record-type" />
+               </xsl:variable>
                
-               <xsl:for-each select="$merge-doc">
-                       <xsl:if test="count(key('record-control-number', $leader)) = 0">
-                               <xsl:copy-of select="$source" />
-                       </xsl:if>
-               </xsl:for-each>
+               <xsl:choose>
+                       <xsl:when test="$notice-type = 'authority'">
+                               <xsl:for-each select="$merge-doc">
+                                       <xsl:variable name="merge-record" select="key('authority-record-by-001', $controlfield-001)" />
+                                       
+                                       <xsl:choose>
+                                               <xsl:when test="count($merge-record) = 0">
+                                                       <xsl:copy-of select="$source" />
+                                               </xsl:when>
+                                               <xsl:when test="count($merge-record) = 1">
+                                                       <xsl:if test="$merge-record/marc:leader != $leader">
+                                                               <xsl:message terminate="yes">
+                                                                       <xsl:text>Le fichier à fusionner (</xsl:text>
+                                                                       <xsl:value-of select="$marcxml-path" />
+                                                                       <xsl:text>) contient une version différente de la notice d’autorité </xsl:text>
+                                                                       <xsl:value-of select="$controlfield-001" />
+                                                                       <xsl:text>.</xsl:text>
+                                                               </xsl:message>
+                                                       </xsl:if>
+                                               </xsl:when>
+                                               <xsl:otherwise>
+                                                       <xsl:message terminate="yes">
+                                                               <xsl:text>Le fichier à fusionner (</xsl:text>
+                                                               <xsl:value-of select="$marcxml-path" />
+                                                               <xsl:text>) contient l’entrée</xsl:text>
+                                                               <xsl:value-of select="$controlfield-001" />
+                                                               <xsl:text>en plusieurs exemplaires.</xsl:text>
+                                                       </xsl:message>
+                                               </xsl:otherwise>
+                                       </xsl:choose>
+                               </xsl:for-each>
+                       </xsl:when>
+                       <xsl:when test="$notice-type = 'bibliographic'">
+                               <xsl:for-each select="$merge-doc">
+                                       <xsl:variable name="merge-record" select="key('bibliographic-record-by-001', $controlfield-001)" />
+                                       
+                                       <xsl:choose>
+                                               <xsl:when test="count($merge-record) = 0">
+                                                       <xsl:copy-of select="$source" />
+                                               </xsl:when>
+                                               <xsl:when test="count($merge-record) = 1">
+                                                       <xsl:if test="$merge-record/marc:leader != $leader">
+                                                               <xsl:message terminate="no">
+                                                                       <xsl:text>Le fichier à fusionner (</xsl:text>
+                                                                       <xsl:value-of select="$marcxml-path" />
+                                                                       <xsl:text>) contient une version différente de la notice bibliographique </xsl:text>
+                                                                       <xsl:value-of select="$controlfield-001" />
+                                                                       <xsl:text>.</xsl:text>
+                                                               </xsl:message>
+                                                       </xsl:if>
+                                               </xsl:when>
+                                               <xsl:otherwise>
+                                                       <xsl:message terminate="yes">
+                                                               <xsl:text>Le fichier à fusionner (</xsl:text>
+                                                               <xsl:value-of select="$marcxml-path" />
+                                                               <xsl:text>) contient l’entrée</xsl:text>
+                                                               <xsl:value-of select="$controlfield-001" />
+                                                               <xsl:text>en plusieurs exemplaires.</xsl:text>
+                                                       </xsl:message>
+                                               </xsl:otherwise>
+                                       </xsl:choose>
+                               </xsl:for-each>
+                       </xsl:when>
+                       <xsl:otherwise>
+                               <xsl:message terminate="yes">
+                                       <xsl:text>Impossible de déterminer le type de notice pour l’entrée suivante :</xsl:text>
+                                       <xsl:value-of select="$controlfield-001" />
+                               </xsl:message>
+                       </xsl:otherwise>
+               </xsl:choose>
        </xsl:template>
        
        <xsl:template match="marc:collection/marc:record" mode="merge-doc">
                <xsl:copy-of select="current()" />
        </xsl:template>
+       
+       <xsl:template match="marc:collection/marc:record" mode="record-type">
+               <xsl:choose>
+                       <xsl:when test="substring(marc:leader, 7, 1) = 'z'">authority</xsl:when>
+                       <xsl:otherwise>bibliographic</xsl:otherwise>
+               </xsl:choose>
+       </xsl:template>
 </xsl:stylesheet>
diff --git a/property_with_no_qids.xslt b/property_with_no_qids.xslt
new file mode 100644 (file)
index 0000000..88b2c34
--- /dev/null
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xsl:stylesheet version="1.0" xmlns:marc="http://www.loc.gov/MARC21/slim"
+                xmlns:wdef="https://purl.choffet.net/wdef"
+                xmlns:xml="http://www.w3.org/XML/1998/namespace"
+                xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+  <!-- property_with_no_qids.xslt- Return IDs of elements with ISNI and no Wikidata QIDs.
+    Copyright (C) 2026  Pierre Choffet
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of version 3 of the GNU General Public License as
+    published by the Free Software Foundation.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+    -->
+       <xsl:output indent="yes" method="text" encoding="utf-8" />
+       
+       <xsl:param name="matches-path" />
+       <xsl:param name="pid" />
+       
+       <xsl:variable name="matches-doc" select="document($matches-path)" />
+       
+       <xsl:template match="text()" />
+       
+       <xsl:template match="/wdef:knowledge/wdef:element[substring(@wdef:id, 1, 1) = '?']">
+               <!-- Check there is no match recorded in file -->
+               <xsl:variable name="id" select="@wdef:id" />
+               <xsl:variable name="has-property">
+                       <xsl:value-of select="count(wdef:property[@wdef:pid = $pid]/wdef:value/wdef:literal)" />
+               </xsl:variable>
+               <xsl:variable name="known-qid">
+                       <xsl:for-each select="$matches-doc">
+                               <xsl:value-of select="/matches/match[@id = $id]/@qid" />
+                       </xsl:for-each>
+               </xsl:variable>
+               
+               <xsl:if test="$has-property = 1 and $known-qid = ''">
+                       <xsl:value-of select="@wdef:id" />
+                       <xsl:text>&#xa;</xsl:text>
+               </xsl:if>
+       </xsl:template>
+</xsl:stylesheet>