From 0e19079123c59619e868f184fa0b4eda2c196ff9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 13 May 2024 08:19:13 +0000 Subject: [PATCH] Deploy to GitHub pages --- rp-vp-kid/en/.buildinfo | 4 + rp-vp-kid/en/.doctrees/algorithms.doctree | Bin 0 -> 80139 bytes rp-vp-kid/en/.doctrees/backup-restore.doctree | Bin 0 -> 30401 bytes rp-vp-kid/en/.doctrees/contribute.doctree | Bin 0 -> 38991 bytes rp-vp-kid/en/.doctrees/defined-terms.doctree | Bin 0 -> 54582 bytes rp-vp-kid/en/.doctrees/environment.pickle | Bin 0 -> 102402 bytes rp-vp-kid/en/.doctrees/index.doctree | Bin 0 -> 34014 bytes .../en/.doctrees/pid-eaa-data-model.doctree | Bin 0 -> 209793 bytes .../en/.doctrees/pid-eaa-issuance.doctree | Bin 0 -> 426115 bytes rp-vp-kid/en/.doctrees/proximity-flow.doctree | Bin 0 -> 89138 bytes rp-vp-kid/en/.doctrees/pseudonyms.doctree | Bin 0 -> 30353 bytes .../.doctrees/relying-party-solution.doctree | Bin 0 -> 283287 bytes rp-vp-kid/en/.doctrees/remote-flow.doctree | Bin 0 -> 194698 bytes .../en/.doctrees/revocation-lists.doctree | Bin 0 -> 178525 bytes .../en/.doctrees/ssi-introduction.doctree | Bin 0 -> 38570 bytes rp-vp-kid/en/.doctrees/standards.doctree | Bin 0 -> 49829 bytes rp-vp-kid/en/.doctrees/trust.doctree | Bin 0 -> 182137 bytes .../en/.doctrees/wallet-attestation.doctree | Bin 0 -> 175299 bytes .../en/.doctrees/wallet-solution.doctree | Bin 0 -> 76121 bytes .../en/_images/Eo_circle_green_checkmark.svg | 2 + .../en/_images/Eo_circle_red_letter-x.svg | 1 + .../High-Level-Flow-ITWallet-PID-Issuance.svg | 3 + ...h-Level-Flow-ITWallet-Presentation-ISO.svg | 1 + ...High-Level-Flow-ITWallet-QEAA-Issuance.svg | 3 + .../High-Level-Flow-Status-Attestation.svg | 4 + ...-Level-Flow-ITWallet-PID-QEAA-Issuance.svg | 2 + .../Low-Level-Flow-Revocation-Attestation.svg | 1 + .../en/_images/Low-Level-Flow-Revocation.svg | 1 + .../_images/cross_device_auth_seq_diagram.svg | 1 + ...tatic_view_wallet_instance_attestation.svg | 1 + rp-vp-kid/en/_images/trust-roles.svg | 426 + rp-vp-kid/en/_images/verifier_qr_code.svg | 2 + .../_images/wallet_instance_acquisition.svg | 1 + .../wallet_instance_initialization.svg | 1 + .../en/_images/wallet_instance_lifecycle.svg | 1 + rp-vp-kid/en/_sources/algorithms.rst.txt | 130 + rp-vp-kid/en/_sources/backup-restore.rst.txt | 57 + rp-vp-kid/en/_sources/contribute.rst.txt | 63 + rp-vp-kid/en/_sources/defined-terms.rst.txt | 95 + rp-vp-kid/en/_sources/index.rst.txt | 51 + .../en/_sources/pid-eaa-data-model.rst.txt | 883 ++ .../en/_sources/pid-eaa-issuance.rst.txt | 1224 ++ rp-vp-kid/en/_sources/proximity-flow.rst.txt | 412 + rp-vp-kid/en/_sources/pseudonyms.rst.txt | 57 + .../_sources/relying-party-solution.rst.txt | 20 + rp-vp-kid/en/_sources/remote-flow.rst.txt | 922 ++ .../en/_sources/revocation-lists.rst.txt | 557 + .../en/_sources/ssi-introduction.rst.txt | 41 + rp-vp-kid/en/_sources/standards.rst.txt | 1 + rp-vp-kid/en/_sources/trust.rst.txt | 661 + .../en/_sources/wallet-attestation.rst.txt | 579 + rp-vp-kid/en/_sources/wallet-solution.rst.txt | 278 + .../_sphinx_javascript_frameworks_compat.js | 134 + rp-vp-kid/en/_static/basic.css | 932 ++ rp-vp-kid/en/_static/css/theme.css | 1 + rp-vp-kid/en/_static/data/glossary.json | 1 + rp-vp-kid/en/_static/doctools.js | 264 + rp-vp-kid/en/_static/documentation_options.js | 14 + rp-vp-kid/en/_static/file.png | Bin 0 -> 286 bytes rp-vp-kid/en/_static/font/docs-italia.eot | Bin 0 -> 11192 bytes rp-vp-kid/en/_static/font/docs-italia.svg | 68 + rp-vp-kid/en/_static/font/docs-italia.ttf | Bin 0 -> 11012 bytes rp-vp-kid/en/_static/font/docs-italia.woff | Bin 0 -> 11092 bytes .../en/_static/font/italia-icon-font.eot | Bin 0 -> 23672 bytes .../en/_static/font/italia-icon-font.svg | 134 + .../en/_static/font/italia-icon-font.ttf | Bin 0 -> 23472 bytes .../en/_static/font/italia-icon-font.woff | Bin 0 -> 13888 bytes .../en/_static/font/italia-icon-font.woff2 | Bin 0 -> 11952 bytes rp-vp-kid/en/_static/images/agid-logo.svg | 25 + rp-vp-kid/en/_static/images/may.svg | 37 + rp-vp-kid/en/_static/images/must.svg | 71 + rp-vp-kid/en/_static/images/must_not.svg | 65 + rp-vp-kid/en/_static/images/should.svg | 52 + rp-vp-kid/en/_static/images/should_not.svg | 52 + .../en/_static/images/team-digitale-logo.svg | 15 + rp-vp-kid/en/_static/jquery-3.6.0.js | 10881 ++++++++++++++++ rp-vp-kid/en/_static/jquery.js | 2 + rp-vp-kid/en/_static/js/theme.js | 1 + rp-vp-kid/en/_static/language_data.js | 199 + rp-vp-kid/en/_static/minus.png | Bin 0 -> 90 bytes rp-vp-kid/en/_static/pkce.py | 21 + rp-vp-kid/en/_static/plus.png | Bin 0 -> 90 bytes rp-vp-kid/en/_static/pygments.css | 74 + rp-vp-kid/en/_static/searchtools.js | 531 + rp-vp-kid/en/_static/underscore-1.13.1.js | 2042 +++ rp-vp-kid/en/_static/underscore.js | 6 + rp-vp-kid/en/algorithms.html | 1600 +++ rp-vp-kid/en/backup-restore.html | 1477 +++ rp-vp-kid/en/contribute.html | 1481 +++ rp-vp-kid/en/defined-terms.html | 1554 +++ rp-vp-kid/en/genindex.html | 1504 +++ rp-vp-kid/en/index.html | 1642 +++ rp-vp-kid/en/objects.inv | Bin 0 -> 1689 bytes rp-vp-kid/en/pid-eaa-data-model.html | 2394 ++++ rp-vp-kid/en/pid-eaa-issuance.html | 2788 ++++ rp-vp-kid/en/proximity-flow.html | 1840 +++ rp-vp-kid/en/pseudonyms.html | 1477 +++ rp-vp-kid/en/relying-party-solution.html | 2793 ++++ rp-vp-kid/en/remote-flow.html | 2350 ++++ rp-vp-kid/en/revocation-lists.html | 2013 +++ rp-vp-kid/en/search.html | 1436 ++ rp-vp-kid/en/searchindex.js | 1 + rp-vp-kid/en/ssi-introduction.html | 1460 +++ rp-vp-kid/en/standards.html | 1513 +++ rp-vp-kid/en/trust.html | 2104 +++ rp-vp-kid/en/wallet-attestation.html | 2036 +++ rp-vp-kid/en/wallet-solution.html | 1725 +++ rp-vp-kid/it/.buildinfo | 4 + rp-vp-kid/it/.doctrees/backup-restore.doctree | Bin 0 -> 30401 bytes rp-vp-kid/it/.doctrees/contribute.doctree | Bin 0 -> 25859 bytes rp-vp-kid/it/.doctrees/defined-terms.doctree | Bin 0 -> 37003 bytes rp-vp-kid/it/.doctrees/environment.pickle | Bin 0 -> 57395 bytes rp-vp-kid/it/.doctrees/index.doctree | Bin 0 -> 30418 bytes rp-vp-kid/it/.doctrees/issuance.doctree | Bin 0 -> 30329 bytes rp-vp-kid/it/.doctrees/pid-eaa-data.doctree | Bin 0 -> 30377 bytes .../it/.doctrees/pid-eaa-mdoc-cbor.doctree | Bin 0 -> 30437 bytes rp-vp-kid/it/.doctrees/pid-eaa-sd-jwt.doctree | Bin 0 -> 30401 bytes rp-vp-kid/it/.doctrees/pseudonyms.doctree | Bin 0 -> 30353 bytes .../it/.doctrees/revocation-lists.doctree | Bin 0 -> 30425 bytes .../it/.doctrees/ssi-introduction.doctree | Bin 0 -> 30425 bytes rp-vp-kid/it/.doctrees/standards.doctree | Bin 0 -> 25446 bytes rp-vp-kid/it/.doctrees/trust.doctree | Bin 0 -> 30293 bytes .../wallet-instance-attestation.doctree | Bin 0 -> 30557 bytes .../it/.doctrees/wallet-solution.doctree | Bin 0 -> 30413 bytes .../it/_images/Eo_circle_green_checkmark.svg | 2 + .../it/_images/Eo_circle_red_letter-x.svg | 1 + rp-vp-kid/it/_sources/backup-restore.rst.txt | 57 + rp-vp-kid/it/_sources/contribute.rst.txt | 8 + rp-vp-kid/it/_sources/defined-terms.rst.txt | 89 + rp-vp-kid/it/_sources/index.rst.txt | 55 + rp-vp-kid/it/_sources/issuance.rst.txt | 57 + rp-vp-kid/it/_sources/pid-eaa-data.rst.txt | 57 + .../it/_sources/pid-eaa-mdoc-cbor.rst.txt | 57 + rp-vp-kid/it/_sources/pid-eaa-sd-jwt.rst.txt | 57 + rp-vp-kid/it/_sources/pseudonyms.rst.txt | 57 + .../it/_sources/revocation-lists.rst.txt | 57 + .../it/_sources/ssi-introduction.rst.txt | 57 + rp-vp-kid/it/_sources/standards.rst.txt | 8 + rp-vp-kid/it/_sources/trust.rst.txt | 57 + .../wallet-instance-attestation.rst.txt | 57 + rp-vp-kid/it/_sources/wallet-solution.rst.txt | 57 + .../_sphinx_javascript_frameworks_compat.js | 134 + rp-vp-kid/it/_static/basic.css | 932 ++ rp-vp-kid/it/_static/css/theme.css | 1 + rp-vp-kid/it/_static/data/glossary.json | 1 + rp-vp-kid/it/_static/doctools.js | 264 + rp-vp-kid/it/_static/documentation_options.js | 14 + rp-vp-kid/it/_static/file.png | Bin 0 -> 286 bytes rp-vp-kid/it/_static/font/docs-italia.eot | Bin 0 -> 11192 bytes rp-vp-kid/it/_static/font/docs-italia.svg | 68 + rp-vp-kid/it/_static/font/docs-italia.ttf | Bin 0 -> 11012 bytes rp-vp-kid/it/_static/font/docs-italia.woff | Bin 0 -> 11092 bytes .../it/_static/font/italia-icon-font.eot | Bin 0 -> 23672 bytes .../it/_static/font/italia-icon-font.svg | 134 + .../it/_static/font/italia-icon-font.ttf | Bin 0 -> 23472 bytes .../it/_static/font/italia-icon-font.woff | Bin 0 -> 13888 bytes .../it/_static/font/italia-icon-font.woff2 | Bin 0 -> 11952 bytes rp-vp-kid/it/_static/images/agid-logo.svg | 25 + rp-vp-kid/it/_static/images/may.svg | 37 + rp-vp-kid/it/_static/images/must.svg | 71 + rp-vp-kid/it/_static/images/must_not.svg | 65 + rp-vp-kid/it/_static/images/should.svg | 52 + rp-vp-kid/it/_static/images/should_not.svg | 52 + .../it/_static/images/team-digitale-logo.svg | 15 + rp-vp-kid/it/_static/jquery-3.6.0.js | 10881 ++++++++++++++++ rp-vp-kid/it/_static/jquery.js | 2 + rp-vp-kid/it/_static/js/theme.js | 1 + rp-vp-kid/it/_static/language_data.js | 199 + rp-vp-kid/it/_static/minus.png | Bin 0 -> 90 bytes rp-vp-kid/it/_static/pkce.py | 21 + rp-vp-kid/it/_static/plus.png | Bin 0 -> 90 bytes rp-vp-kid/it/_static/pygments.css | 74 + rp-vp-kid/it/_static/searchtools.js | 531 + rp-vp-kid/it/_static/underscore-1.13.1.js | 2042 +++ rp-vp-kid/it/_static/underscore.js | 6 + rp-vp-kid/it/backup-restore.html | 1308 ++ rp-vp-kid/it/contribute.html | 1261 ++ rp-vp-kid/it/defined-terms.html | 1359 ++ rp-vp-kid/it/genindex.html | 1253 ++ rp-vp-kid/it/index.html | 1397 ++ rp-vp-kid/it/issuance.html | 1308 ++ rp-vp-kid/it/objects.inv | Bin 0 -> 678 bytes rp-vp-kid/it/pid-eaa-data.html | 1308 ++ rp-vp-kid/it/pid-eaa-mdoc-cbor.html | 1308 ++ rp-vp-kid/it/pid-eaa-sd-jwt.html | 1308 ++ rp-vp-kid/it/pseudonyms.html | 1308 ++ rp-vp-kid/it/revocation-lists.html | 1308 ++ rp-vp-kid/it/search.html | 1267 ++ rp-vp-kid/it/searchindex.js | 1 + rp-vp-kid/it/ssi-introduction.html | 1308 ++ rp-vp-kid/it/standards.html | 1256 ++ rp-vp-kid/it/trust.html | 1308 ++ rp-vp-kid/it/wallet-instance-attestation.html | 1308 ++ rp-vp-kid/it/wallet-solution.html | 1308 ++ 194 files changed, 95894 insertions(+) create mode 100644 rp-vp-kid/en/.buildinfo create mode 100644 rp-vp-kid/en/.doctrees/algorithms.doctree create mode 100644 rp-vp-kid/en/.doctrees/backup-restore.doctree create mode 100644 rp-vp-kid/en/.doctrees/contribute.doctree create mode 100644 rp-vp-kid/en/.doctrees/defined-terms.doctree create mode 100644 rp-vp-kid/en/.doctrees/environment.pickle create mode 100644 rp-vp-kid/en/.doctrees/index.doctree create mode 100644 rp-vp-kid/en/.doctrees/pid-eaa-data-model.doctree create mode 100644 rp-vp-kid/en/.doctrees/pid-eaa-issuance.doctree create mode 100644 rp-vp-kid/en/.doctrees/proximity-flow.doctree create mode 100644 rp-vp-kid/en/.doctrees/pseudonyms.doctree create mode 100644 rp-vp-kid/en/.doctrees/relying-party-solution.doctree create mode 100644 rp-vp-kid/en/.doctrees/remote-flow.doctree create mode 100644 rp-vp-kid/en/.doctrees/revocation-lists.doctree create mode 100644 rp-vp-kid/en/.doctrees/ssi-introduction.doctree create mode 100644 rp-vp-kid/en/.doctrees/standards.doctree create mode 100644 rp-vp-kid/en/.doctrees/trust.doctree create mode 100644 rp-vp-kid/en/.doctrees/wallet-attestation.doctree create mode 100644 rp-vp-kid/en/.doctrees/wallet-solution.doctree create mode 100644 rp-vp-kid/en/_images/Eo_circle_green_checkmark.svg create mode 100644 rp-vp-kid/en/_images/Eo_circle_red_letter-x.svg create mode 100644 rp-vp-kid/en/_images/High-Level-Flow-ITWallet-PID-Issuance.svg create mode 100644 rp-vp-kid/en/_images/High-Level-Flow-ITWallet-Presentation-ISO.svg create mode 100644 rp-vp-kid/en/_images/High-Level-Flow-ITWallet-QEAA-Issuance.svg create mode 100644 rp-vp-kid/en/_images/High-Level-Flow-Status-Attestation.svg create mode 100644 rp-vp-kid/en/_images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg create mode 100644 rp-vp-kid/en/_images/Low-Level-Flow-Revocation-Attestation.svg create mode 100644 rp-vp-kid/en/_images/Low-Level-Flow-Revocation.svg create mode 100644 rp-vp-kid/en/_images/cross_device_auth_seq_diagram.svg create mode 100644 rp-vp-kid/en/_images/static_view_wallet_instance_attestation.svg create mode 100644 rp-vp-kid/en/_images/trust-roles.svg create mode 100644 rp-vp-kid/en/_images/verifier_qr_code.svg create mode 100644 rp-vp-kid/en/_images/wallet_instance_acquisition.svg create mode 100644 rp-vp-kid/en/_images/wallet_instance_initialization.svg create mode 100644 rp-vp-kid/en/_images/wallet_instance_lifecycle.svg create mode 100644 rp-vp-kid/en/_sources/algorithms.rst.txt create mode 100644 rp-vp-kid/en/_sources/backup-restore.rst.txt create mode 100644 rp-vp-kid/en/_sources/contribute.rst.txt create mode 100644 rp-vp-kid/en/_sources/defined-terms.rst.txt create mode 100644 rp-vp-kid/en/_sources/index.rst.txt create mode 100644 rp-vp-kid/en/_sources/pid-eaa-data-model.rst.txt create mode 100644 rp-vp-kid/en/_sources/pid-eaa-issuance.rst.txt create mode 100644 rp-vp-kid/en/_sources/proximity-flow.rst.txt create mode 100644 rp-vp-kid/en/_sources/pseudonyms.rst.txt create mode 100644 rp-vp-kid/en/_sources/relying-party-solution.rst.txt create mode 100644 rp-vp-kid/en/_sources/remote-flow.rst.txt create mode 100644 rp-vp-kid/en/_sources/revocation-lists.rst.txt create mode 100644 rp-vp-kid/en/_sources/ssi-introduction.rst.txt create mode 100644 rp-vp-kid/en/_sources/standards.rst.txt create mode 100644 rp-vp-kid/en/_sources/trust.rst.txt create mode 100644 rp-vp-kid/en/_sources/wallet-attestation.rst.txt create mode 100644 rp-vp-kid/en/_sources/wallet-solution.rst.txt create mode 100644 rp-vp-kid/en/_static/_sphinx_javascript_frameworks_compat.js create mode 100644 rp-vp-kid/en/_static/basic.css create mode 100644 rp-vp-kid/en/_static/css/theme.css create mode 100644 rp-vp-kid/en/_static/data/glossary.json create mode 100644 rp-vp-kid/en/_static/doctools.js create mode 100644 rp-vp-kid/en/_static/documentation_options.js create mode 100644 rp-vp-kid/en/_static/file.png create mode 100644 rp-vp-kid/en/_static/font/docs-italia.eot create mode 100644 rp-vp-kid/en/_static/font/docs-italia.svg create mode 100644 rp-vp-kid/en/_static/font/docs-italia.ttf create mode 100644 rp-vp-kid/en/_static/font/docs-italia.woff create mode 100644 rp-vp-kid/en/_static/font/italia-icon-font.eot create mode 100644 rp-vp-kid/en/_static/font/italia-icon-font.svg create mode 100644 rp-vp-kid/en/_static/font/italia-icon-font.ttf create mode 100644 rp-vp-kid/en/_static/font/italia-icon-font.woff create mode 100644 rp-vp-kid/en/_static/font/italia-icon-font.woff2 create mode 100644 rp-vp-kid/en/_static/images/agid-logo.svg create mode 100644 rp-vp-kid/en/_static/images/may.svg create mode 100644 rp-vp-kid/en/_static/images/must.svg create mode 100644 rp-vp-kid/en/_static/images/must_not.svg create mode 100644 rp-vp-kid/en/_static/images/should.svg create mode 100644 rp-vp-kid/en/_static/images/should_not.svg create mode 100644 rp-vp-kid/en/_static/images/team-digitale-logo.svg create mode 100644 rp-vp-kid/en/_static/jquery-3.6.0.js create mode 100644 rp-vp-kid/en/_static/jquery.js create mode 100644 rp-vp-kid/en/_static/js/theme.js create mode 100644 rp-vp-kid/en/_static/language_data.js create mode 100644 rp-vp-kid/en/_static/minus.png create mode 100644 rp-vp-kid/en/_static/pkce.py create mode 100644 rp-vp-kid/en/_static/plus.png create mode 100644 rp-vp-kid/en/_static/pygments.css create mode 100644 rp-vp-kid/en/_static/searchtools.js create mode 100644 rp-vp-kid/en/_static/underscore-1.13.1.js create mode 100644 rp-vp-kid/en/_static/underscore.js create mode 100644 rp-vp-kid/en/algorithms.html create mode 100644 rp-vp-kid/en/backup-restore.html create mode 100644 rp-vp-kid/en/contribute.html create mode 100644 rp-vp-kid/en/defined-terms.html create mode 100644 rp-vp-kid/en/genindex.html create mode 100644 rp-vp-kid/en/index.html create mode 100644 rp-vp-kid/en/objects.inv create mode 100644 rp-vp-kid/en/pid-eaa-data-model.html create mode 100644 rp-vp-kid/en/pid-eaa-issuance.html create mode 100644 rp-vp-kid/en/proximity-flow.html create mode 100644 rp-vp-kid/en/pseudonyms.html create mode 100644 rp-vp-kid/en/relying-party-solution.html create mode 100644 rp-vp-kid/en/remote-flow.html create mode 100644 rp-vp-kid/en/revocation-lists.html create mode 100644 rp-vp-kid/en/search.html create mode 100644 rp-vp-kid/en/searchindex.js create mode 100644 rp-vp-kid/en/ssi-introduction.html create mode 100644 rp-vp-kid/en/standards.html create mode 100644 rp-vp-kid/en/trust.html create mode 100644 rp-vp-kid/en/wallet-attestation.html create mode 100644 rp-vp-kid/en/wallet-solution.html create mode 100644 rp-vp-kid/it/.buildinfo create mode 100644 rp-vp-kid/it/.doctrees/backup-restore.doctree create mode 100644 rp-vp-kid/it/.doctrees/contribute.doctree create mode 100644 rp-vp-kid/it/.doctrees/defined-terms.doctree create mode 100644 rp-vp-kid/it/.doctrees/environment.pickle create mode 100644 rp-vp-kid/it/.doctrees/index.doctree create mode 100644 rp-vp-kid/it/.doctrees/issuance.doctree create mode 100644 rp-vp-kid/it/.doctrees/pid-eaa-data.doctree create mode 100644 rp-vp-kid/it/.doctrees/pid-eaa-mdoc-cbor.doctree create mode 100644 rp-vp-kid/it/.doctrees/pid-eaa-sd-jwt.doctree create mode 100644 rp-vp-kid/it/.doctrees/pseudonyms.doctree create mode 100644 rp-vp-kid/it/.doctrees/revocation-lists.doctree create mode 100644 rp-vp-kid/it/.doctrees/ssi-introduction.doctree create mode 100644 rp-vp-kid/it/.doctrees/standards.doctree create mode 100644 rp-vp-kid/it/.doctrees/trust.doctree create mode 100644 rp-vp-kid/it/.doctrees/wallet-instance-attestation.doctree create mode 100644 rp-vp-kid/it/.doctrees/wallet-solution.doctree create mode 100644 rp-vp-kid/it/_images/Eo_circle_green_checkmark.svg create mode 100644 rp-vp-kid/it/_images/Eo_circle_red_letter-x.svg create mode 100644 rp-vp-kid/it/_sources/backup-restore.rst.txt create mode 100644 rp-vp-kid/it/_sources/contribute.rst.txt create mode 100644 rp-vp-kid/it/_sources/defined-terms.rst.txt create mode 100644 rp-vp-kid/it/_sources/index.rst.txt create mode 100644 rp-vp-kid/it/_sources/issuance.rst.txt create mode 100644 rp-vp-kid/it/_sources/pid-eaa-data.rst.txt create mode 100644 rp-vp-kid/it/_sources/pid-eaa-mdoc-cbor.rst.txt create mode 100644 rp-vp-kid/it/_sources/pid-eaa-sd-jwt.rst.txt create mode 100644 rp-vp-kid/it/_sources/pseudonyms.rst.txt create mode 100644 rp-vp-kid/it/_sources/revocation-lists.rst.txt create mode 100644 rp-vp-kid/it/_sources/ssi-introduction.rst.txt create mode 100644 rp-vp-kid/it/_sources/standards.rst.txt create mode 100644 rp-vp-kid/it/_sources/trust.rst.txt create mode 100644 rp-vp-kid/it/_sources/wallet-instance-attestation.rst.txt create mode 100644 rp-vp-kid/it/_sources/wallet-solution.rst.txt create mode 100644 rp-vp-kid/it/_static/_sphinx_javascript_frameworks_compat.js create mode 100644 rp-vp-kid/it/_static/basic.css create mode 100644 rp-vp-kid/it/_static/css/theme.css create mode 100644 rp-vp-kid/it/_static/data/glossary.json create mode 100644 rp-vp-kid/it/_static/doctools.js create mode 100644 rp-vp-kid/it/_static/documentation_options.js create mode 100644 rp-vp-kid/it/_static/file.png create mode 100644 rp-vp-kid/it/_static/font/docs-italia.eot create mode 100644 rp-vp-kid/it/_static/font/docs-italia.svg create mode 100644 rp-vp-kid/it/_static/font/docs-italia.ttf create mode 100644 rp-vp-kid/it/_static/font/docs-italia.woff create mode 100644 rp-vp-kid/it/_static/font/italia-icon-font.eot create mode 100644 rp-vp-kid/it/_static/font/italia-icon-font.svg create mode 100644 rp-vp-kid/it/_static/font/italia-icon-font.ttf create mode 100644 rp-vp-kid/it/_static/font/italia-icon-font.woff create mode 100644 rp-vp-kid/it/_static/font/italia-icon-font.woff2 create mode 100644 rp-vp-kid/it/_static/images/agid-logo.svg create mode 100644 rp-vp-kid/it/_static/images/may.svg create mode 100644 rp-vp-kid/it/_static/images/must.svg create mode 100644 rp-vp-kid/it/_static/images/must_not.svg create mode 100644 rp-vp-kid/it/_static/images/should.svg create mode 100644 rp-vp-kid/it/_static/images/should_not.svg create mode 100644 rp-vp-kid/it/_static/images/team-digitale-logo.svg create mode 100644 rp-vp-kid/it/_static/jquery-3.6.0.js create mode 100644 rp-vp-kid/it/_static/jquery.js create mode 100644 rp-vp-kid/it/_static/js/theme.js create mode 100644 rp-vp-kid/it/_static/language_data.js create mode 100644 rp-vp-kid/it/_static/minus.png create mode 100644 rp-vp-kid/it/_static/pkce.py create mode 100644 rp-vp-kid/it/_static/plus.png create mode 100644 rp-vp-kid/it/_static/pygments.css create mode 100644 rp-vp-kid/it/_static/searchtools.js create mode 100644 rp-vp-kid/it/_static/underscore-1.13.1.js create mode 100644 rp-vp-kid/it/_static/underscore.js create mode 100644 rp-vp-kid/it/backup-restore.html create mode 100644 rp-vp-kid/it/contribute.html create mode 100644 rp-vp-kid/it/defined-terms.html create mode 100644 rp-vp-kid/it/genindex.html create mode 100644 rp-vp-kid/it/index.html create mode 100644 rp-vp-kid/it/issuance.html create mode 100644 rp-vp-kid/it/objects.inv create mode 100644 rp-vp-kid/it/pid-eaa-data.html create mode 100644 rp-vp-kid/it/pid-eaa-mdoc-cbor.html create mode 100644 rp-vp-kid/it/pid-eaa-sd-jwt.html create mode 100644 rp-vp-kid/it/pseudonyms.html create mode 100644 rp-vp-kid/it/revocation-lists.html create mode 100644 rp-vp-kid/it/search.html create mode 100644 rp-vp-kid/it/searchindex.js create mode 100644 rp-vp-kid/it/ssi-introduction.html create mode 100644 rp-vp-kid/it/standards.html create mode 100644 rp-vp-kid/it/trust.html create mode 100644 rp-vp-kid/it/wallet-instance-attestation.html create mode 100644 rp-vp-kid/it/wallet-solution.html diff --git a/rp-vp-kid/en/.buildinfo b/rp-vp-kid/en/.buildinfo new file mode 100644 index 000000000..2ad55caa3 --- /dev/null +++ b/rp-vp-kid/en/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 7debc0b241d55c8da06f75be8de0eb53 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/rp-vp-kid/en/.doctrees/algorithms.doctree b/rp-vp-kid/en/.doctrees/algorithms.doctree new file mode 100644 index 0000000000000000000000000000000000000000..25e438541a6aae86e925233a5c226e646bc6b117 GIT binary patch literal 80139 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/backup-restore.doctree b/rp-vp-kid/en/.doctrees/backup-restore.doctree new file mode 100644 index 0000000000000000000000000000000000000000..c0f2999969e2ca18af1dba59402d87d6ff7c9c26 GIT binary patch literal 30401 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 KK2L{jGXDp$NS(3( literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/defined-terms.doctree b/rp-vp-kid/en/.doctrees/defined-terms.doctree new file mode 100644 index 0000000000000000000000000000000000000000..34bd315ac053b63488d9124c30cb1fa158a59fda GIT binary patch literal 54582 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 TRc}L){JedCXxe~KpUeJ#tzTjA literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/environment.pickle b/rp-vp-kid/en/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..88e07e4ad6a5a7cc2a616c9f4889658fa7286e1c GIT binary patch literal 102402 zcmdUY3!EHBd8e%RYghZy+p@=AY$Ti6_3AAf4$G2k3(2x9$vlG1xOb*^r$_VBOwUSd zFi9>kc#pmyV0b^mks}8oAtAg1fdoiG2npm(4#Jzn1aokK1QK%Oxc~Q6S6A2c^v-O} zww&`%p4q9c`s%Cy_tjTlef8*{S@G)SORic%|9M08YThYd8neqYPOVZd*=4us4cyUi zin(K+@SIf3G|u9t2HXQ<<@AH794+(PD3{eaW@Ub*ECUHy;E50brNhF{|NLP(f2m zB>wF>P~0S;MNX&e+BNaJ>1_x-AOcNqIFyp5>aA&8Pj#jwzk}4IjN@8G$I7^QyJRJ5z5=O*xmE-nwiB!pgeb zPH)}4wVYkEb4Q)5+XOIY(D3DBHMHuKw`{DGYo2PL6@r3Y&Q@|x8OW|^xKrtasHtSt z(cBC}v%)FoY*etSTB{ULLDL&Mm$y^Lng4R?*!@S3r=G)#l5)T@np1WyVk3nDQ%(^$ ztjSiYvo&WrkHR+}b*fg)btqdURkdrWqLn&Vv+7foTFH7CYDBdFI&RqxT#GGvW^d z!CN^tgMM=pT2B4vCdi?`Iy+6Q)iZT>mN-}`g}#o3}yz3?y{Nc%|w>)d614 ztyGFxE1S2+PtUsfN_l+G*uk-hgX5R>?;S5XljBuRMdEnfaqV=~%ASYx>yYeFh%)H0 zK&j_$%r@$7rIhi3sAndv9BJ9|bF~J(hDiaeYTeG1tr=&UMbOOO(eMVCUY&%J4Om@2 zHa3obA{CWxfN(A|Rf4!y-;f)>p)`KO^P1iuWy#ycDk`qqWea-iZML19 zRVNGK+X~WcR-1kj)1?eV#Bfqi+#r(hxFOQe9rHJNTiVeWL*ZurY56g4WyvZxtYXsz zmuv7hnm{;-vLo%vqTGYc{Frs(Dk?JwN=|vILfRazH-C=E1zOjf^ZM;-V=|Mi*E6Ks#D~|<*l9_9oKy&9>JtPrtmZD8 z;#GCgU(w;tioa4fkkv%J4N}=vcRJH!oV3EVCP^7rpQCS1T8mC=rzeY*?0J+w>C|0x zVS3W=R?b+(23UjA{0T zMo__g8bHm^ALIF3xJZ7&|HE4W18B`Q^9@024gX}_IVEy#&tEMbtpl&<)ESHj4BIO4 z8!9iJZxQXzNK4273pLyH!dj)`J~H+~`RtJw!m2;wv!9x_(djR_8Capp#mrRW;fH54 zZp|v!p>W)N=DbyY9&XOA{7s_D)kK!foS%|U<)0$herkTF_+xi|kI1|}XHQv;qMNBz zAPdntZ;O>fPid6d@Ip0fupN234)h-rr3NTNsgi4;<@rz&*aEvb=T}f}8{e3?&UQH0ZBn=rdDA3w8T&_E&+LRhxy-N|u9hVQCf0 z$91nS!<~WMW`C%8>J-&CAksoEz$18q2kT);*pOrzHR!mYu)6HHRVRCXwmHX{`u*P- zXSz&-$b+Knh@K45O~Y7;hxzCGj1K$#9eo^sWpZ{Eqxgxd1n}8>PSm)eguy+743ijc zp}tb=gPd+(0D975_&lzYCD=L%Dr?9`*fqB_Fs4ws{KfmLmZ(~s4v~`@{H=6mHNEEEgRySeYIIkENPr6SJ0;1A7JO>Q0lFDk%-EeZ0!V(euvai|P6;7H)E?Xw~T-EGg zv=UiG?NxXx`h)y~`4}gvi$VSMJGqyW{D^zTEi9*y_SYbr(AT(AR7_^lsqF`*2hHh0Mo>5 zAX{_ToeEGDPvDos-b`XDprkg)WiHkn8db@BWAI&zq0@O7nc<8u<@{~=ZEV)^PtQL? z{PE2E?Y^O72f$@@@=h+yVNSKUx+&?o_&yz5Qs1isPi`i`YJ}G-d|`i3Si?<&xvs#9 zFfZ#lWeRR5u=Er2nfyZn6DvO{{y3UHCh`m48TO!NNrzPAxGR6R$RYfvIy8CGf*HX` z&lL$T6(cI-QYl+S-xrjRhnWvCGLQ~9Ssre=sCY($G3Fd4%)QFzp+F=4yiFRcF`@up z8s0y7S}^U^TBb6|^B$gGh8qwf^q5E=VFpxsh5_-Ge&Pdu1B9y>R?)C9t3}84b$3n> z6jCO)EF)%X=vQ1q)WlsuJfH^2hntuUl^#qImyfwH!h(VTgjhkxEZ1$Tmd%qJ7h;Hd zy)5gCS};VFwLB2ym?7mw`pj+-{E#Oj>Ot8OjpCBwK$($24Bvi9p;^>JY4nhC7LBho z+-d{fMCy=n*7(~xX+aLX2_Z$(bp_EKyJPOL(Aa>@3y?_R_nKpk7sk`u|hp(7oC~f zSlM>R%hl4jpZE4X<92=DIAoD7m5S*s@rKMkXza@n#a2xEWmUelCZ}NO13TfnJ+P~3 z3-*J;Ij4@e$1HmeOCNYXWqMF%3JCe36ki~+>~1)n93pB--_x2d=L^1eKrbF+XHllp z#Dolte6U_VXwV2eCvp$TL<%Bh*nl8EkImbHN6J#URt>4-5s5sTWgeb$%h?J|&bHop z|H+f7Q-|+4mU{ZJdk!BzdHdm`N6#EPd-gvyMa>&kQ4upjV8|-Ln4LU)>aP0_--U7~ zPu^a1#wxXGS!TUI9WPJQcV^s*-E=1%w9NOy0KGLH9Wu4CjD1gmLr4Ra|Z82?gz7bbTp>9#F)X zy!{g^T8miaEIbrgUVgAe)#5);ICx86a9z{lY*(vnHRvd8UJ2u(to^RrYae58pYrC< z{=Ej8D?rC>)elHUFIabD8`Q zx(Wx8q8(vCJ_?1pxXdQ`psgYYVJXG5w^~L6gv2*W0%ZiRY}ay%2%9y0&bP>i*;)lN z@gRI4u_pSiYJBW}I9G(OGu2QJpk|Lll(6kk#(lKsF=1#Pjwn zlq@GEl&j#qO_wcd5dT$~0`HTEw<3W|dXd7_YiMHOl*!5PR@3a=ZPYLg?Gq8t40W@88Xq0@&$xhX)c<}xU*Fmt@0;k8=?5OocXqWskXkr0m}9*c-Z@Nk2w!JlL9S>ROmZfJ}G zWV@nAE-h&$tOA8VU?>#NA(;l*L=^BrMQf9y#Q?#P7q0Av@kYHiKIxRl^G?HcimFHm z(}1ohGZ>VS4^*j?stC?0PYYp`u*ih@C#~|p$p`=&fU34Eku0Q#Aau*cIZAyz|18nR zc{ajS+f2yRLmD;ZTt<4p7vP&{3pNYjMmXjJJ_(Lpb7b15z21Mo-Vgd^858muIe!X2 z3wcd~>==<_j>TDYw-v%s683k5GQa`Klxz-+!t!I{;;pxe)x0%n!_A}+3|rLA zGOM5$*g8-wIhSn2%k*qAh98=vaE9%Y4yq-yiKvgF<(qfK78YGFgR3I;qQ)_96){c5 z6HD@Vs$%dS;$j43@u}e5x0SdvOzg1?zkcYxESjQ2|AwleJJqmHa-uHxs z@@|)@{7C-b$t)(0Z}K%+w}L&n z#x+EG4HrQyR?`oHk0S^D{D?borCfxADw0JBn>^rPwZ(t5S?)COy=Z@#iB*z;+uE8z zE>x*35gOc&gnQPWMs-%i!xW7TK{dhpvcP93^ne#hgyu5cXvNqPVV797TQYFqf@dt` zs6uD?`Hp~i{XD!Jco67&7zX_~neQKMSGg$sRC4O%@%vRt9}05b#5BTr!6m;szlIhnz13*4SW|pCxZQ;P z5VL3;_7c?G*>oLKaSmd5L;l)4ZH-{}m;ERnG|5D{Ryk*pZ|w~LoHTS=_&~zla%nXuCB2k5B=z;cP^gR|)=EcRmGi}0TOUu&`dp^>YU zXHoESV=_NZVjS=h74xwAShjg$skfyyF^>&6uxu{LX>;pCY)4@%@l5U?3aDW})rpls zBv~d4c#(f=3$21RV+o5-Y{-p6vKWQRD1Bo~DdDI$Pb`bnPfCXZt!%;YAUVGYOOBiI zed~#X4R6HvRH+95R1rnTo`xYU9T8Kkbz;ff=LxpbTMb}nDTKP`POqQ)1*UTt3wZO< zQh4rOA1~!#eqxE;M9ayRL33yf$25|*(_m!`0MB773v!*$*jU0XW-!U5#bnrq$Gr7b ztT$5(l)YgOfnyPsL~?yhU_eo=aZ&{249$8^dFyLa*-+UVWm(cK#MiP2QH(jZJH-Uh zbH-`bPn4*fMycN^YmwzVnv4SM0%tDK085}zOrhSG)Kdp#q@ivXr$l^r4l73%wheH! z3*(BniQPB{F?Z~P!emmIkQ|yn9A0LX+aqYAoL`oI&79XKR~;cetVrdr_SSQOjK4eO zv4*!Ao&%5GB&fpQV=i^q;m=>L|EJ2Y{*S^pf?w4?eR|;^f?u_VmlVDk{Bl3BuJEPc zSL6LZC_EngdhuI-zwq_om-piD7QPkydim!^3*QcYUH+Tz7ydT*_4=oKg(revZyo3> zd@cC(j)R8^UkQG_^X#(-2qvuLi%~^LIaA_+s$u!z;g5_`BfON6O!9c-Wyq zVM?qBPyj1`owv^S2oSlXZE#{?8hQ+?vW&X=tD28Cu{DlyA`_azmMAe4_+RAYI9Tq7 znCiTJ&U>oZI3<=X$B$JqS*Hev1PX*80y>FZOJ5qR&rCPHn__ZKV=O6WINC=84rjj1 z!g-QeAdPsESs*ohl35_#f09|C4)-LpK)t+678auC3+O%vwC-~^HaVqF(t1JqPK^8M zho<#0;1y3J8+OF_^t#E9$R9dU`GMhqzOs_tk0?niR zt+MIkXYUofceX&6*~)e)o20B2nRa4fNO#ACiR|2l1=&XLI!z?-Rd~Zp=0c5!L4n(b zkQ*qt=t&IS<2I%-CxY>a;$W$ackN-)Z~?0h)^yD(`Iepr!vEmdCE0u$`L9^>qiV57 zlUHl+Jj+wH^kFqq66)1GAi6bdF+OL4Nt7U~8=Kh75q>VS$Mhtk*fk!P*_-?Sfm3fY zG{blPf;lmplFRIaK8bC(TGLsck*8@Ba($u7IZqSGvA$wWq@xG;=R46NMu6B2!4A90 z4mTp55A&Q`v@zO|pEfTID|?~g;A90H_l1IVP$LYU=-kANV_!r7j?P0VMneG=QAsSm zEdyRFAuPMu*;z~@n9OCK*IY4SM4|1vchA#jFctN~oVjLU^RgvN3fu6ZPq&`i(i2RsRmx9FvJQ$@C5x4J@8Vd>z^{RUq_|qLTwmsBUD9<>3^3t38eSi^)6zB} zt9a3xtv6qeP+|!?vM99dk8WEqx_Qg}KqC!v-b#)PbHtnjj2uIz4GHzJGHrgq5;fkhwufyKY}lBNM9CWr&=&t_&A;y z{uCczvhWFfQ`q|V@r|;d6knebU!N9Vf5Kml!e{Xb}dGA;g5gc;FjlAZwNTRpNwgL(&+7J867 z%-#=sWRLuT4(x42kZpYDeY+6hOC3c|OWnf@gkdh0E$>Zk)#j0nDqMuszJ9@019GXtmt5wxV-@U2F>dDvXQ2nMeVqrUVnijTGXXV0n zSP>5N$OZ-FIBCs}g?xl{)oqJ(Hyr4%u$eHTE$H+N5n=jKQu+$lOYFf9Q=X+#=e4`FbZ0C)T z0KbFr{***tHSf2l)@Yo?W1EoY%4oG<@ZC3xqYtZwl1v z2F^WWLt(HOFZ{T5lMN0e(MFoU`)hHW*x_44Ie4>DOt#=E8f>EQoytK(Mfl7cTtHfO zsODqJ3SQO(J0Ie*u?yG9;}ky2`_bfuxlt4)5_@T}{b40|Y1EviaF^GL9nb7+<{Q4p z_g;dRoyOlFcukzfcLyYX#gxQ50upaGCGksKQ0VV}$KP$e=Xb_D*jf1Xm?wqz#XacC z6aOkoFNOeVs|n^DeEKI&fL}sgJqqv(Orj8n-_AlDfX4XUW#fu03_NhiaLm`GeI{XJ z|C6Nf^M*%pZv$1G#*(Y7I?^eA+&iW}G9{rp#Sev8790HaXK;882e`!LL1EahUy+d7 zdVQmGVlJpO0{FG4xkn|w+LT1%fUku^A%g~CxQ`_U_qx$goFW4D9i~VrlmARp5{ZMo zm2E{@@2{;{i6 z;Irytcz0rA7#WpEzOc95zo-jWt%)e4@=4!iik*W09i}8&;kOqaP9>jIIM>3lG9aP2 z_#0C{!uO0hs2k_m#X5Gzo^gi&@#Bl6TGXmej`254RX}OcSD8etV;l>gsb4&BI7=4_ z;%1ZSHtyMqm5bw^MZoh0N3k}cR~+e-OHq4|F4|8_C8D~+k4;IaPAP=iQ>Xk=FI-@; zhu1mcI_2U|w-&l)@{C1NG-_t2UV3ZqYIVSrgi@=$Od_^F8=J$vqv8-&>Kq@!3OhTQ zq(JuiNA;s$k*@rJDPYPnK2HD^r^B&Gnp(!yhp{J^&!dGg{OQCnTmy^fR~UisMZLo} zYf3_??2IW1WeJ54d$NS0;~0?e-4kA3U9c7z_s3qAYCpJ0%0^A@WEJ0MDqPh=-@_zg zeV4@_W!4`LA9)RT)6XS^9O6paIon8A{mb5Q{4-M$s;hoRh$1eKXROTw$LUUaS}&vh z7+BZTX45}P4D~^vj*8QjDGF?G#S!FxXbPLs;C~XZ#af47!_){HX>g*HZtIcTe_9rR zy59_=cKdJ-T?IV(2CoO3J5RMa)BO^>1EA%MH6^VOC%x&<$f<2gY{F|gJB9~429XjOx5?u1X-rt!lFMr!vxNa3@ zzN7SU1ARP|K6cT^&GeC`k8%2#ppQNDv5!6u(8nSAxD6k8ivw=1m3QJ|Yn3Ign?2<% zr+Y1MW_V@Z$zjnPfA#q+1PQCfWm>qg!OmWudu_Y5HBa-S2#4i z6Fu$^#CtoqXNaRybaLBnp15Ab0tQf%(fmn`*P=rh47RPN$bf|6LJTYhBor6#HZ=~u z*TB1;V(r4B+u1I5P}Lya#aQv9mUVItDyEvGOly%z7&r&UW7W#DN7K)G&N*#_dPP#8 zdCNzg+(b06_zS%w_cBxDOlLkdNj;Y? zTy*Jn6v;zm?0$LM2+F;y7> z`_E00Qr6(JrX&&vdmDj$s!~p?UBAaJS+v5Zga0pyfxn%>$E|GXvfOx_wj~P@Vf?cx zl1dogGbNF@Fn0Kxh&3=$0T|)VunljLNMtzlc8m%$q%kp%L^gvHBezRQWW33Ngui6-ZPp-Jf4^mtQ{@kBB6A45_j)K`rw_W z;!+Yn!XymbBjZ7Zc6Xhndm(kZ<|GE;x>2flO@rLPYOF)a27zUiLI zBwopoI%{XKO%hw-?-g&R2pcdjG2l0kmbm&fuDIgr)BcMwB8og`il9>Dmza`BTnIyf z%}BK!(SJQL0SqhSG0(X1tER{)@ZV`lq7{4tqp!vdVap6iC@#dfVL(E0Atsy#Bor5p zsbk~^4fv4Kl?xhlJn-~Si=^Syu1+C?e>7D^rOn@A5?63c99Fl=q-Ywz7gdIB^w65c zaWW$SdLyHGx+sgU8cfsFm+Oug=nY_?N8fV2DGAjt)-Z`!ug=sZ*%X4`cl;v~*q4|D zHiac1JpT4F*lh}+((G|l5{b(I+Xv`<6?QIqTJE`tK~LKUM6EGuf4?bS3i30iB)W#& zcrtUt=?3ms&7}_G%`fz(I^H;p6LS2*m(;Oxu3EvGqc+ibVPdklakR?Zq;XZO;s%>1 znVU3j=@i^VOw%P(fR&6IOyUX}{F~-Qe&^}KXLdN#6D`+}5>e%|D zmDcn6)+XgGZ)$YKb*ztPd&xzu8rJ(kQn5B*yT=@rrB^r2kcLnqNM=;T~iXR zfEyTkHC70#Wk5o4k$WuqL>6%_NhRx)Popi|ZID(zX zOyxPI2rD6-GbPa~B!i(tjXuKq8IVw1h|$M@gyKRh;2DrmTs&dAj7VJI+$-PFc;%L0 z=ezImEsLb^)TBAQ126)Vq*Q3FPWmHRQL;~BoYU_ z&j-9s#BSO8#qkp(W&)?Qc@JZ}kFo?+_vj-2`+r!-htFc#i5r>tV7yc2MOMwg+?W{f zBcr&eo9gB_qsqD?CT6sE_*14NS~cEa&{pHV7&;6{C@x-Ysz?5~&zB=#!Et|{iNM^@-&Fp}Xg-%oT)}aFsKeEak0ga(msc}B+&iWhO-ZN@;R>-V`p8eAir|*S z@citpiNW6KYQ{I4qNSAh4W=X#2R!a-#@|Z}?)k4~{Fo_H3ha-Xl1Lov1zgSecw+c3 z_-e*)nBu8K@>Nq3iHoG`s~OkyEsh@?88*EIUd^}?jP&RgFEb^PxHvjq&G@v$#L(r{ zjJr&+Q@!CvQxdK48@RN}D;AEG0SU#${ifa8_lo(Q9aqjP?&kd;xkb`1YFa1n*fP}v zrAjYg5(eI}@g}y|x0n1}QpkDhM?)`Vj;_)EOz$v0VhW?_*@A8Ul3eQkGsjaG9XFr4 z``o$HsnhqK)h~$nrNltp4p7A&YMjAK6AS6Q>sHg%3f?6Vi3Pm1cZ}a`N&7*)(_I`r(2t{jGBJ5v(|!+OS{y}ab3*m^Oz~9K<71{I5*NwSj?^mH3gU<0 z@5H;RQfK*<+NmRXJ9}Q-qb-lGYGJc)B_^RX*0sSDB*M{oI*pU2xB52f=`1tF7i-Hy zt z>R7E-X}N&t-o((oT0>WElSBq!*W5^rHPd02Yx0oJ)rdhQE3_@UDVI}v?<`K zfBm5;2_^OpR?igh;V|IshQNPJ4EGTY_t>HDJEqtv_@6K(kvRO<>#wkFx6e`Q1;ZPX za=Aw#jpD3Ro~DZsvAMC`9>-|k7yv&#y5D`KBwB@IV9%6E6cHl>5{iq5c`_I4tQz|z z^KJUOBQbs0FpBpHig!!L+?w!AQ^Bc@`E(``>vt^vmF^uj0Zt|cXIGm5Grc4FfGG*3 z$IlZ&S?s7>{3gIh6GOezCcyt}ik4F0pEf0tIN0;_9$JSb!W(-BdeoGJ>Vzp%5~>pl zaVOacO)Yc$65(?b(}PY+g!h{Qt_HX>rX-ZuJ6Jtaz&kDxzA!P|yIdl?WQv`FzhO!u zarhUyMEI7(q+zy1_(oG?m2h5XN}^Rb2KG#uL=iDEAfdQe*^76CSl`#KY^-nONN}50 z>ZCJeXJ@lT{r2O}Et0ZP!#V~1{?b$nlp_5ZlZbU<7C-2><=(0-t}C*Nd;vz=v#>u% z3Po@0Xhku=S9=ExMD`edzju89wO-a^5*Gua6*HBrcmu)xbvt#$!qpYp4wu^!lL195Waa5b-A-q@ z@<=~8Xo{Y)Gy6VxKs69f6iFvvCkJlN!H`XY0ab|g0uoqu8P z$X}Wt`NbbwuMc@AAtCU=J6{r-WqC_tu#f6DWClit58(M?i0++xWAB*1&Xk0*Gp`n6 zTkP?6bY9_zD2gVXk0&Obr_3)MpO;9N_#IPhl`;BlQxdJ>F_?6yd5h?n1|$?04bz4w zE`(w3iHi=dp|J_y;vYpk?7B7`0Hj;IqC?}46I0NwqyDi&OEJKEF53)|KQfhs(#jt) ziP#}B-cTC@oNfbfmt*DC!%4a1W9?91$e6hmto7)qZ(%R{}Rz2B6CGK71Cz!rP7l!u|i7RVP%o1rq3m|U)#M=o*WOsZ6Eu57(1OHX^F=VNCu!a3E#wi)kuQI5smHV;BFr; zPt~ltTZ55k)NFF9&ea;YZ7qDw@f#LNlGMIVl6Z%`pIty0WEd_V&G0Y=WkRPw;n8Wk44D_xn2ceQi0eS=5%7O(ikt%fN2Vka2Y(CO>(o7! zoITI(oa;9(&R`rd;n{~- zAVOxysye~DBirr?BBo-!!S3mLcCH&v6pKX#C`CIT5^NqrXgx~l+%uU-q z_z0eR*Xr-ugKt9tMkOZA$;l@snAE8Ll08I>D4wXK6}4ElDY!~LlcprPmXERHInwcp zpqC{kjE!wyd>EC$W2W#a2|UUquAm?K)ONVm@y5wg39G@Ut(sM`F~8Cc(z_CadS_dx zaWO6PLsv9Oej+3GJ9)MG)OuJHt%h`NIe+lSk6BE$&Z3UDT z<2iPG5hoGR{IMyns$+c0ltkj9Nw*cvN!yyS#r4jJsM)m=uG+J(%|aVLzL%Jo#@dUi z$XxOL&Kx!gxQdAEyQX+6k$u~gMB*arzX!KE=PcJsotv$;$Yf+wQeN-!Q71PM?Hq%s zutx{C-;_iv(gwju70(o7mjMaIMTc3wvG*|O_fcAVvP*W^)%)R*#AH4s`(a(x9O-Mf zn~G2MwP!GiSifP>mk9=10oCkUHZeR0BX~wT)I+_)`JgEYrOH2LNqiVd+9;~vEJt+G=uX`1lL#57^MA49MM7Sg4Fg-92Bxv4Z%7xS1zY!_Sn5b;+1 zj?~Z|DGlP^Obp^}*i|3C8a1>{GurEZy?2Cv)s%$lb?+2HT5R`w$UoK)CxgFEOa{ZF z{uzdO!T$?W=wdX z>~Y{4DI$GnmeWbiI=vt<*<2gQMjxLMspDB~R4C6kMN}EA=bDme6^emBt6XByDGf*{ zE`*C=T>E|-raCYJ%+cF*-fX+*sdXXitvm?_vlU`ir!*l)mcU)_;gKoGB;tTbG_`6!DR z5w-|85A)*+jYaJNf%2jc#u zkn`wPv{0py?zpFS9B(ltp*liZh+?r_;EfbRce1oXT&~?lsCvXK)RyhYBZQ8;9=csS+ro=$MMaBW;T_(8HB+M7D>DI!0 zMf$|+dzZ#*Oi8Fd@hTzE#WqXZqY>KF@p`=xxrF9-6BE(ZQbeI?Oxlq=M8xqCQ!G{I z_>d`y#Kp0#jX3<95454;>xoHYdpl|P*BnI0i?5g>sf6)GQxb^_qmz%hVrxP^CT?tY zt;wP-!-wIHku6$IDJqDi;H5_&^e2lY2!nZun#zcQ%YcMZhYlW`vHP&Kb%<+!$K~F{ z)MA_Lo55gK3~t$s*vX0BHDZiOTtO#dC2us*gE;3BgL4&o#qCZp+}AsHr%XvGJw74e zU+f_t>w*@-C3J0(j`YREkfwD(RcAz1T~n;oD00D+MDlQ}yXJJb-;f~OwczH;HUZ(+ znqsBkZkm#4h1K54$1jnfP~_rgTK}Dz>nc*hW3c0j+JxO3J%WcBh&v$ zObLR4A0rZTFyHz7e>D}S(uf~0iP(XE(N7U=@#kLwz->2DZr`4iYr9ptwgJBJTPU}H ziynR4jiw}&st=ixP#sPPImr%Zx_NQs-L{2prnwu>N=*2xM)RV&h;6;g6lB$tj+&BC zqE5=HtvYSZ7AsaxgSnI#%&SMMeti*~3#K3`oTr&Yti@W)Ls>fu@1+YuHn@&kv@^JA zPF!Hud{r}an}|2~&_&)VpOGfzp{Bfegzp#G(DGQ5!Ydan1s~JPC|J0A)siKr3eV!t zkAv01e-+?xy=zi|X$xOyQb z648Zi(guVsuz@Q>Esh40KFVwuv`T5nhfPT&s3Af@IxWS2Z^0t%wm)`vknp>v$SLr@ zZAzjQ{DoL0-$*DgM+^)GBor4N24GV!XZYA9abamH7(?{=MC$6K{N0gJ+pinj{eufw zBjfT8Fwmo`yUmnDEBpo$R7xP$L<~qMF8UrP($q_1U#FNv?m>1%D_>-05L_!fPwD14i~Ru%qMBtAi3>-puV zCpPe9+n_>M`hqlFx_4p=?`B698lF!KG`xOdrfz4!&m>*y^hi@AP2sxiAZe$!g3tNk zX?_|xmN~iI%@bEW+N{^Tfht0Bwq>b(ZD;(eO6uXW8mD;7Aol>Ej0acq)DD zqK}*DBTXOU^f5snd+1{yeH@^VL-cVQK5Vc!<=|e?j9Y=vIN5NDIo1H8{&Lhp(!R{q zs9#i{`b8D1U&Mj>MXab_#FP3(%&A|*rTRtes$ayn`b7;;zo;eZ7d0vP)$sbJiV zj6tk7U*7Zvg&Ns8Ep=_KQo=!Mx^agZ?_HJUuXT7Cf}5$&mL@C3X5l+P!drP({0f|E za%4|=>+8-WjwDYXp2X$uP4)W@8!uGE?-dBolwJI>4u@rmxFn2Mb5D7za+NH0N~4JI zi@gm_{R}Q%Re9#THJNN4Qo(K1%?F!aU&g{owIeE}G3l+UOcv~{(5>+kOB&u9y6R#Y z?;&xy9jpAG_>t%5tFw-HK?yykB$V(|xX<;;Uo?%Nl!mt~Tdh*=!mD683;zf#3Qhc_ z<4|}Vl1>#~PoLfzZu7mhd#h-7Kd!Z@7IC=^-`G|sh-Av)+BAL_-pEDY#Ghi0@Mioy zS9l9PamDsq`3vV?=#p)}9r>Fi`>R@w*MrTSJH3^4hy*W2_WI7;dE~YfK2itvO&n}` zs~~IpQu>x=zH!P$n?4HSahWE%$+SB@)Bd2kJ@J_oPkZAtDN6g|Gbu{@<1;Br2jVj+ zN(W;y?b{E7D#1JylSv?sThIw{SiJclm$~N0T;`ewbnq^7&5ydwH4p3|TJz&BY0VG3 z%r!sqGFKe*I;ve^zq>2!cl+4eJouyI(cq6S8vOA^!vVf%@TV@;rspV)n5RCKDX5Md ziFPCpP3%_c8cTBj9+fFhdo)V1$`hs(r#pxC98%TAsg71%oaP*wxMd>fLUD?tQHs+W zjZ&Q2Xq4i#Mo^L(7zeo^C3DS>xy%&@x=t$=b=Cw)D-L$_3}~0kH9zh$S3K|}9hoa0 zdD2jsYkufuu6XQ2v|@X#hL`NIkzEi*8ofuC&}LO;|DJ=AuS}?pI9X}>xF=3lTF=}QE30rXhkp_4 zFDTu{T&{gCjjz3NveNj%+^-v2x_mVMGQ^iI6O~JhAHFTvt4l%U()rS{?@GRVbxCxT z@7}It0z=RqA&uXCUCCr$S2Eexl}z?^C6j%zG70P5zOH1lPnU_3+};V8TR9@^)1{zt z>3GFqe{lCcrBV2^J@%TW@9zrx{W|u_#t<#p`_sF}RR7=Kl^pi#a!{H|HZh>PcWfeL z@Am6b>8^|}qaA_uiq;dddHdsJrdjO$aWd0JxczZ5(`m)Y4D#O>Xvu*%nH@Z^JCsY8 znWjsjTyb(jjcTkvpvx(amM$4BSBRD_3oTcOuQ=?r{&FA=d#%45h{OKS1SXlX?;VK4 zUdweb4tuS}gY#godg#G8>@}S@7>B){D-L@-myW&a$CNARZ~H>M?O>c7^!CQdLF)qt zW94uQx`&j*!B{zja~5%_D_SrSk>ILX~25YOD3wd6rAtTU(rM`eQMoji z4`w&koQ2vL2R&+pZIs;4gS~QCV?%2it=P~Sa)oH=*vD&-&tZI!Ej$I?9VZ11U(5~K zBd5s8zyMV?ejE`7@%~1rZ_18Usc^aLQn%$oD4t-?v-EN{37r( z#r6Ys)MRgo9bymOqNY)?Ht68QfxW8d#euF(VPl;QZBi5KYiN@XbbHooo41p+Q!k<5 zJ|eMgW&g#`6sKOGq@)zrQZ19OUN&!XQOtEUDCw-mo0JYri=OLenulqn?s0uWqcl&S zP?X~OghpweKA|YZ^$CqqZ+$}3b{+irA=)H!#Ysb`wagVK4xLt< zJak%d0?}#3Nkpd=ClZ}jtepxk%!6lo#kw=uJJ#%xsYCgw{=5xGeKF3Su zbG%|c$Ghd`cwRKe)1o<^70vOiWR5q=&GCRa$K&N3o3%N%A9Kv?T!T084re)$p2g^-S#cSyp#>PnWk2d;X^@RdFHBBTd=bl|^gPE^;Hh)p++XPvM(|8PLsR z4^_RIcgmN>ij}NIduawUd=3|Td9Y}OgHe}eal&9{;UaQ-8!|=f;n@t|K|`B;@Fah$ zx5|H?anoCIoT39wxB0Wp!V8J~t%VoitMCXuUfO&~bMmDS60jE>fZthq1+Vyp7o^T2 z+s<%7Z~Z+iDBOYAmhPh=x-09pRmr6JHG7Q2%&OMtiK9=yA9k&gDN z+{D6Q&Yr?cH*#ruSzujoK$}8Z9taZGpQ_Z*WpHVF>LhleHGn8zOo`j9XJ}tN-G~I5 zo3L9mgWZ}L+Ig3OsO_R4O#4gtDevW^r=$qqGH&IqZ#Po46Gsb6&b+nbS(rPuUs2+^0eXmVD*1uD4m2@TrO z#(*m^`ZZFfR)ZbN5p;Gu0k}8`>Zct-(ivGPfepCbM_#JZwm_bZrX`<(h?azRDQ+ zRZ_Na>ya(3W%F)nQ`zYdA#xAtr9IEKYtEEICv`~hEww9?o~c%pr5c5xd!(t;iP><7>$-^!U}FaYZs?dXK^^AX5%PP z>Nt;eINb?yYxppcph2gS`~*>O`#H4oczLR3;XZZLMt&6-I#+AJ5k=umzCRaIH9?8r zXVK=VAlvSkC8*sf#$x{nc8I1_UpXW*b&-NnA{%8_}#%dS!DHL|Rg@o5r0-bX!yg?+qnG$GXRCtR>_-~XzGo8ZQM8exC zf#wv2U*-gF1I-!=mAakrZ)^}V4oXf_a@tQub?*$y{)#BOk-<-wa1e;hkC>gwIZMpL zmq@Qo6hqMlzcV^Y!1vmidfRMZ>DP!Qn&A}Q%`6q(6D0hmNO*sc@BxwVp&;SIBH^P! z!tZc`w@v7juZS6OKuKyZPp3ok1P;7Dm7Q%3 zS0NJ9l$8?E){h5#enRlMRh07`eBJNmkwRpU9=_)Bg5Dnl^ghY-3V#$Nd|D)YCP?_K zNceL~ptbPAUx{*lCkOMr21gL!o@(VMbadB zB~e_8zmQ`^kg!rDtO*jG`UO;#7m3k>=AFi2fT zC24dlT+byr;EMy#6m&ymx8W^!E4d2Ac=_Ds3i_qu&sb=su?%1H9NS`Jk1TX%8(-S? z9DjcdcOpC^Ey0&qy!98^m|r9klN3B}cq^R}0(|wRx6Y3hAitt^_gkv^VcR-^)^*C!XTKy;T^QK^d(vEZGOGf zp3B}YHM38X@18z>?m6NGwunomW#CMfJ*1VrDYoo=h=)cB->MZ(pG0LGQD{?d+w#u{ z14bHi*-OWA5S}8WkDt9)w%|mV2+8oWcU`syr#_RjXPm5^u@LJ*80JF8@9MJPUD1Lg z@ZovRk-1RIWD)q4d7tm+CB1Ena=xQuh}xgy_P&@8+b30~jP%EdC>97cAhE{u&g zgb?bqQ$|>mjZ~&lb6`9%$HRGaUUr~g>u}5+x>R;?{RsUY#OxB2T3-0dWGz?`O5GSv cb$B78Qk$hG+rv-D;^iPDTIdkZ80uX#fBK literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/index.doctree b/rp-vp-kid/en/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..3936f0f1a0800f2f5dab016538fbf708eb21a988 GIT binary patch literal 34014 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/pid-eaa-data-model.doctree b/rp-vp-kid/en/.doctrees/pid-eaa-data-model.doctree new file mode 100644 index 0000000000000000000000000000000000000000..21a87fc97c10a89e5fbd0a025410876b42afa16e GIT binary patch literal 209793 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/pid-eaa-issuance.doctree b/rp-vp-kid/en/.doctrees/pid-eaa-issuance.doctree new file mode 100644 index 0000000000000000000000000000000000000000..5e40a027ddff0e197677d4d3c256f705a3bacd89 GIT binary patch literal 426115 zcmeFa34C1HStr`vZg1+<=`|sp+_;mDt++}m?NTp^ti{?TYqRX8k#1F8sj5_)>sD!T z=s-w9!cZX)lspCqNq~U?CghRf#|-lx6CP_Ij{zQQk_pQYLV&#AJeYwW!wfU;|DE;T zTldx?mDIN5q-{%8_nz~eZ#&=lw)4%$KeT(--FMOd$`9H3L^8V*HskSZE^gU-J69^itiAGGcp{carsD-GyY~{le2|_mCewCU3~(}* z%edZ89526Ce3ookdodgizqGd6@}Iu>pX1N>|EF*M$X?>)OM8ja<$D*c9h$Yq)9=|M zsLChuCO|0eCGNMQX1T>I77NK}sfZ;I$j6d#8{m~s#?q#3<3s#>JZon7Pp9Igy#6I> z#x@JqI(z2yP9{BI=S^DbseHk*t-_YIS1O+@nj7@SUZN%Oc;Z<3^r}J=emfzta~7Z4 zZM4{2R{XOXx7L%{WHFh`+Tns-+$-OkPG+sW$>XIc7X5@>irU3w5h%=M9nUK41A9+} z!^Ss83*Tsf4g&*5qL@jyv>1l*T(r>kLW@M-F?{QM>p1(Ge|x4Ze&fi)5;}mj#1lYO z;?+R@*Wu4o`15-Fc>_>&Vm(*Lm;@_LwwHK1@y1f(O^Nozn-k{}=O<5KfD0v`0m}D8 z3wx# zwdmD=;}~3f<$F51_sYjgh2&njwf>dSU}iR+jGLUR%Xhc#CBDHXtWJXf;{vlSeuPL| z^Q8h~UVkc-vKsQ5bSPNy)wESCT7}S#4-o_vW)z*DuYvpOJm2Blu!<)>cCuc}GFx9S=g}j&J7Ja4xFvdjt>uoMn{He?-pVH9;jC3`v-1}A zEdD_Vyq2|M#n8G1E&|u&vZ2UodzkM6v`tI(S3Z?X#$)sx02AAX>oc{LU~6TX@7aUQ zO-k?M*m<6m>m`ZAR`P>N#hA{8K0QCTnz4!|RHu2MML)d&Y!DW@!V$L`DnBX_5Gv#$ z%6u{hGSv4^7xD@iO~u3~%a;y-5f@+*JFgDJ&V~y+ql&t#BUu<9yUoH;j|WGuQ8;oi z6s$H(>A;kF>S_Jds(MN=QuFZDvnTQOnm~Ld2wzi|LW6@EHQU?UVRHjgvys~hCm}dV z?8|L1@61xV*tVX8x@m(Z%Hi`|VRw~(kWO!GtSaMl)hrbgxdN;~%Z6CxuS-{RANEQt$vGe+dvD4iw-s!F>SzV#- zYLW%)(DzzbH))ISR@gBb#!gSOu;bm_mDW{SxhvFD13UD6)3KvB^fxq!o$hAo9Sl^H zce-on9U7zQ*r7qCWStGfj^#2B#f~284mWMrVncZ_^tdt(rDpC9xpyx0gxuFTNG>dm zOKa#LCI<&k;_2yq;HgO(ngH=yKMD&<&InIV`$s+D!joH1Hw{l(Q@=3~PcQlMQNrRjHqQYiJ-Eqv;xm29=Wa zOdxjrH4xryB7Q0`q~u0P7BJ+(k$OUL4+F`CrKU(0A6DY&&4G9d;-V($pWX`Xj}m z>8b-eT{W;n-!~mQT?#v`f!GPsKutTF_J%7@r%Jy#G?4pzs-AGj7mee@Qj;{0^NjkI zKs*I$peCKddU1kc0b%87Rx;$kQT0<8jp4*klQfV%gBjdw^3tFhGQX!PK zcEb2KmpAcGTiV(%)8uSNxTe@PGSjxWve@=kxXGW#ABs7@sdI34B0RMk?r4wTaNOM+ zZjXf9+j~3d-;tS19uyt75GAx7lBGV-qV%FPbPfX?seD3#h?ytEOk8pJQ^`4BEFk!9 z6~alYxE{_GHrf!_YNKdFTfAVd7en-UD3!CVPzo`w(6$u~nduGkpe8c52MNbg+fL7^ z_*El7Ny)({mdgzXE_a46cTsae-LvM%Nvzjf%xxn2;}!|5t>~b(_*E}e8MOzSR4%hE zaG8RtBl}pUo2pheR@lu`sHJkLmV2r6t6u6ssp^oV*O8lyqId;Hh z>Urg2I|3KWb~2``Lxc09nx-4jE~RJ~5%e~z6pAPDJG6B&&O=h6Z8MGBhc>f-Jg6e# z5m;mhc^V-EIxVCm#jMbJ0jWaUxx%Jr@u!)Z4w;2@2c=yfYDCOSL^Kf^iIPqyO3Ez? z@c7>3-L9bORbq!(#EQpHHw0qEnT54tB_nzn$ffsiXpRta7M_p?UG5T35X`Q z@BzEFVo3*T+@EUPD49Pv7!oC2PL!k`zUQvHJg8tUjfLUR#1)55rwE+dx)?)jS#8O< z*u2(}Ars=-+_usbx!SV8PIfGvvx#Y-#6#^Je!=wgD#0#e-FXSETcYUZ)FeFh>7bgTvFBje8T(ln#F!jGM zK0CM7z;PR-UuXPp#Y0;iL5n_NCv*8N=fPTkqL=&DTFaIB8$pxGrS>|P>Z0#3i9F}? z(DIO`uZzbNiz5RpS_*M)4Q<5&*!i@2z)4Z(hkA+Ka*2&iC>PcjxUdCU*c_#F3I-h6 zi6LiDPAAoScs*CjV$%bMwmJDFWZ`i$yJ4|}nYOKtaC^Ajqu(EPzCh1Amh1POUiI?_ z14FL9KXCQWvWFn2_8+Eg-i%pt7h6yIo(TNJ60xt*Q<%h)zm+QT){x# z3Rou7{OFL;-__NxS5dcp!WD5mpUZowcB-%*3(=sCHPL5mB7COTrBayoGpStRvw3VHgV`#-(QBTQRB9Sj5<4#hV&~O_ zoqRIBYMJJ$wA?6neZWmN>E)CXQa%n#G8x}1KZ=(_cv+i$l=vcRVRGDYtS9D~7Cr%LKox_*Mk%X4E z9AA|mnHwK&J9qi~$l#zcF6>pl;4}W;$t2FyPs3dF%j1-Y!OByg!ZV4-Q=g=NkOrT4 zbLwBwk4UCxu%1RagSk;K^9d(NA6ul1Rj~{M^%*e~IUuW*Qd|M8fn$fkA+`-kC}TaH z+cvgwhQZfHBDs+;($zC>v)-Mog6opPX=*Eb3Uo@SIZLVG~<%&)YT6yf$ zU3Z0y)+_9QXv`IITd*n$t;p%7lw_9n2&CJ27{5szkPK8=Fd~>X(!q&ZBTK{MhIoA; zmu5vFVfMCXOhyX92;!?jq~qJdw5DX{WYLyGjc4%%PG7`0g&d8w+qbCS#Us zD(Ckxt5C$LPE5FgY;-DV*=77fMgy%aMjwF3h&KgDa$e3?fCoqFd^$;>a0aDkB~P-4 z@`dD<8QTR`u9uPpi|UB%aEr#NL<(>^f;o}AoiF6#rC5=@O`cOM!^mw@!gmz#Nk}9u zE&xJ0rN;?FAQOXj3GZ>etnNY4UfMp>*lOeITL+zi76C<`pJju2ijz%~nm(^DN45OU%< zMgvP1u`Y4mu_1+)wUb048+Z$R$yJ@bYZtAIt>4gL<6pi^N^()XugBY;-iALq$o=2o{RPas~Dxo_KMM)3R%MZf*4? z*ZwBoFs7Fl7LA0tWnum;P&Ce!VlG-#g+nHRu$9b}u!ANu)&-gzg*JxT`@oQKy`_29 z7gkk?_eD$OJ6=sgR2+7mwn|UaH>+?fXB=OzTt>C-9jij_<%)15>tyA~J-RWgf|>TI zUxcM6Ylu>RN@kxpADlw%T>^%g?I1+?Oa&F>0pTH!fu<_FQeUaV-uyC6{CMim@DB{k zGb?Wc!S7g&2c)mE_zA6c)Kax;-g7G*&)gROeIUjkGhzf6Nz+?jRwOzm=?WhviEr9C1!)?z!=h?c!JR)OfR> z86EK5IWa0n!+uYUOsk!9S*T^}NW@6Y?ArSubk8hR?)^@&)@o*jshR2uL+IN@rdyzI zuedDU<|zdY6;0Kc@_P`?@Kqz(D?1-iDg>MrD0RMkaq3^I8)wwWmc^f*4vrFLbUR<%F%PWBbt~8M@xnd zZsLgQ`2B9Sh~T}Td;*K37BQ)BB~6QC^|ufW9#7Hg*?I7Z07tqPQH>n&AI1dRY=U6O z97p^jd(Oh`Fz-dPuRsmF1z8}e^1E(qMZ6(iYMxKKVQe(e~4$Gwba}vcra2AA{P8E zJg1z?FCJp7Qm*Bh`of_CP}Jn6zDi3uUat2=-)4#;^R0X@>$Y0=SZHE|vN7Jpi;A4(PT#&AbX(e*aLvl!Q;5|Qw>?OF{*avme$n|mvHAVS<~?q< ziRQ5aQw!(Z`_-9>;ib}j$isqKa(nNsZ48TjtP_v2eGEzD`%Ey=^U`3A`OF@L47V{5 zYWo%PhkC;HkrIYz_lbWIu!?ih(SxH7JIf5u)z6~t!_MQt^E|_I^|wS|W|ou08Khq6 zhSu|Bp5004p{Nv61ZyYsxY%f=>kcmWl^n$tB#tkiyu~&Og~-IU8jzu%d8Ce{0C zsqW^)%Vai}@HWh5$9L6iEnyj_UZ%G`nd*fh$l(uQg6Umsk1a741c%TNvf1@S;6l+rs4)<@T1kHqST__ zC8E`^r`;AVy(LRWO3~C$VgPvYjE?f9(x2pvR2Q>^ZTB6L&}BAL+lJGBq}6cAL) z=_YDfeiDzmYgt|c*qpAO^7m4he;`}Rz{NYTww~Nr)qsUY0aR#wk!Q|@0A@&*-K-gQ zBDYNmp{O-LBl0x*wCienmgJkj0@L_|{69(q%^+8k&P}{&d6m)?mVuAC!bB;;!=jIE7Ij>FN%EcOLsY_pu<3eAFbRk=%&|ImSzUmhi|Ov*+tZkp}oTeJFOW zd@qB#e9SJQAgcv`hd34XEay!h#MHk*(?6d2HT+YJDVdudIn8_JhrK0Ndn`T?&k+&! zQlG~_<&(f!aW{`^R8EL_%lF|UYX|ios1(`zHuePF2e9`(_O@tUUuGB};-X~^s+K~; zxu^r%W;Hb-npqY)vE$>f67Z^02VI#{L_cQz#*TuCl-zK(3DyaOX}5kOV5JBFVC{Us z4LJtdhu0}9HHz|5KMuXXuo|ixtE|=jsslWMVL%B#7$Bp*9`bsi#BrIvtnd5ymskOR z%zKwhUE(jV6fp)ch`8G&(%$|iRyZ+$6zz@dfDwb8W)*m)2&p)!JCLJ(shZLd)o{dD zGBH~^ZM=!0;?9;H*To@quRz=*l6vGgG%CnXx3;8?;}^}ZPcw|3jG4UijYes?Z@){D zT7LfnD3*SL0I#u4J?37ISYgSLZ3|VDjCc0$rS8F_mPBzQa;_a-@A zji(6O4cKcD)UBh?&Qzfh>viS8bey>BuJ$mBXuQ>a3s$j|Z-w`a*1euY?JqkRuwT8; zQh6&>Kb^K%kwrS0LEnJ_RexX*gHrIR?$n5xg+dY!~9Q9n`jqrfu`-M`J74lHA*A!??wLl|TG;lywqg>}A!|fpMu0mCr ztQQ!kjUj_}33$^!&&n%F?&*D+w*n|!0K{)^VI%M%r*XZQ&58Ds#LHy9SM(YI*FYhz9YsYZ z*6w9vS{>l!$RslOP$b;aMayG_wX_uBCqjXuB(|G=`Vm10_9iPoM1;~HJA$g!7++HH zo2-!qI*AB_F%)du#l2a27@?st5y3?csSh*c zRmXF%h?Kv;34L3h#(dcQ=YTCAc7Mo&1N}q@#bAPhnWAt3&*@f(TvhqON{V_Eh(x0gE4n?IjEv~K5|ogN_>>Zak#U6l*bbR>yQHUh>t%= zqrL@$*7CRuWpWaa(h;=$t(@qt9oXr&;ZCYUcP8mY5M+&QUAR3ab&RcN-~972uC#A* zN0!TzQU2&n4m0CfkDKLTFU*p$S!K6Gzh;K^`Z@Z7h0tAA4G z8fEQZ-CI6Ieo&Dq0cU$Oi3E!ihzYJIclHt|P<4V<#Q3p%cNp1gP7}uT*ioy7q}aFISBEU3M^QF zs3{x)%#n}pGSpQN_hTfotUYBMfstg|=4m(3az`+eihHir!L#nTCocAJ;7F6N{D>oo zf|5}vjli+#JH9sXHP5?J@oTbEK7n)$3@($obS?npPSwoodR%88$gZ6X0$`dVRP zw+>8*?5-_5>dx+pcq87wvWRd&eaTRl(N+1#(z|#P{RM=oBo|X$1F_vwhQ;J} zUAVUz>9V-(_l4u&bo%IIXo<-kLVt!FqLMI1wO{QUp3Z&gxLvSOBHpeW=$b+*;J3!pq z65+bqbsW#r9Q%fm%ZD>@H1!K0vyhJij;-kOOBk}2E$*fZZox_YJma^z%-Ek}kGetx z<>wBLd?#MY&mLerY1tiU428}wG>lH%uao+NM$s88N7b^diE=+%$5d|1h~Cn2=*Y-y ztC^AMQqv-ZOZo}C3V^3%k}3>N$*fR?EGKi<0iepsOx+6;P;O9_xtKrRcrK=EF@DLI zy;X8Cg{F}whX&FyMVs6pw25rY-ukjJE7l;>F&{k%H6YV5Pv94Af;|uA`?v#{<$?V# zMhe?OhETHhIKkXdCMNDaNzvjeGBLZ__fp64h0ermWKUM6Y$^mim5+fD_EK&1qfZVd z!63y+AUPGmv&f=64+v8Kois?QlYc@m@lU)~=5p1%%1jQ)b(E#TZnCIS0U$`36gPVa z89h@ztl<^$+Oe`)#B=XEZ*?HfV-KwSAj~M1uBTG-WG);_C4)I27AmvUWD1Zs?&3@z zBXhXMFpfN~BTL-FUPsN}ss3G-dH84Q8R=YZlTNF2^8xLUJ_(3Ovc~Be*=lr+1=1v0 zM|lsfL`I+I(}N}Tc?Wa#Cns1Pd40H^f^{92*@iMOhc(qo>*LcLZf2iYN<-nK3rC#Z z$1&h#cI7e0r4#&yACX4qp-$}_KhF!U3_jhy{@lFdqK#eTpawW_p|#Q_nA{>Y)z#=; zr1HWKEE4;~)N*H)f?dU}<~%G=j)uc{lvi{rm_2U~|>{94{odq;aFsM!0B9YA!-*QVfID zku4(SK2lTub4Byp*|752kG>0d^O1p9RpLW({)2+w1fn$IKFkPLodkm4znf7D{2r+% zX~$*0>iKApn>lUgUlM9>p|l-Al%q-8IhKq^bj*(2^2l%UPu6(@zEfS+ewH}Lov5Rj z>8%GmcX(MV*zHL{M7O(O2s-EkjH{~)KouSI!GJ6mz9o3H{L!3wd=$p#h^s3rMGlst z^G6u8mU~91jxR7ILv_6UmBfp3ED<=3?N+#YH}wZ>5&PzpPblqt>zqSf5tN^}g%-eM zz>~1^h!6a7f0XUxBx$r(xffT{*2(2};ZYW0#WhUiFu3{r3wl`uYhxlX0ulHhjfz09 zHclf1R)0p&~JAL@&#~jh~>+F(kPYTN8 z`T^tI_45d+HMO@q3N;SGZ<;Jb8x4TV#{^c zGJahZXe9cc2!L0QJX;4M#ZE;)Fd2Tjp2aFsaoB^oz0&rW1fNQ(fmAgwlITIYVF}gm zsBd;^aQ?jU;y__NHn7$o>F8N|=~;#(&k34%rP3Inim~bwNQ6IC^*N39 z>-D2OE75*Ru0jt(-`P?0l{$_-57tgay>sC8gyoZ{G)MCbdk;0TNCS2H|M0e3A_tYDd=KOmWX7QoV~%^ms}@rHpGHBUbaJK8VLu-nt`81tDkovb#Xx zl$wzt{n^qy5w2JHDTw$XPiB0Gkok_Q0G(usReqmWhqLx5W^Bypu0-n>c z5gDPrKPjJeI2SlMZD;wHz~hrcBTQBbIm8JjQHf8XFV<6GWG9v| zvm3ajmWxntPiN2CdAeV>V4-^nS_$wRP2XkGv zxlFTPybadHw2Q}NL!Wp~FR6O&rC&8m{dWEG@EeSeAXcx3hN(t-JvzMtU&Xuek2@Hn zG=Mij#ieml--#C;+J@LkX`4u;wh<5pYMcLz;R3Y{f7wUduvr7NjrvY%8}@+`*#F7a zUzfJ|M?C7)HmOfBfSagn2)qhqqX_$`pQu())75MA8~qB#j!KdxPrt#ZlFSW*SOk@o zz4|nC-0^Z9?|8}KRGRXZfI5aj!P%1B4Gvrf=G0}*4a3X&<&`EDpE)Oefg@dJN|m3I z-YZpz7E|pv6l){aRz(#VqlommS( z*4)jfb5~NNn6Y!WU+}L0go#6QvnNx?Db_(hH*yw%oIE3Cb*g6xdM!XIeG+D>BW1Qj zrp!(u!=E)G_UZTQO46(=Yc@n#vs5$?)E(A8arS?!1QKv^8AgY-POAj zpDA|t^={3!52xogt*+_CY|rLU_w2~n`ohY^_P(C6e0nz3wGkW3ZeLr2kU+QjFWN;#MfRUFw`D+NtQ~#PIUO=JmzJ!tT|~ z@Rf^^=oXiR;&M7Zc-&-jS}Z z{#fUg-f^pEx;G!%Eey7IFZ5ks&)F-3rSxuMWhsAc(H`0zpUC!vrf(EGMwc_o*E{>Gg@7k*@K4CciY&Vf7SKx%lk*!unRv z()Amg$(0TJYRBr*_-!r{~kd%a^w1x3_0^vgz6G&P!LX71sMN<+AfDm!`LRCg+Bh zrWboJ?p~jn9htsf8rtbeC1cl1^C@(`Ufu>wTr92(k6xdRO=i0`hjw$lR??hEUoC83ou2C3 zxW2HtFxoeg8ydbmInrC2j4c#Li`zYBJe{)(@l7CiF*GtgVV4$1OEaT`d3!S2*FA10 zwu?RO_HuS}BC#C5w3}PMacRDPthl)`T^KL*PmbJ3CAwFwVr<&l*jZY#Mm9%_H|92G z(hKI&QfYE#aPyrga3$(Dq#b3h{twY6MwTa8Y#*Y1N45H{IHx&HM&$xp`39s*-%*=) z)aD(vc}Hy?j@ooO06xgfXLk+J(~i@h3RZbEsyvj{^{g`SKSA2Dp{k&lphh{2`qaew zvv)=IQs0H)bX5=;+N<>&+RAId3xjxr_Q1*@fviUxQ_k1D~Cr6qhkI05_y zqqAYYkfYAMcp{+PHlw!3Mf{rJrAX#@+<&e5$o^TvS`B^>VU=ISqwL83{WmqD6sr@w zjd_;V94v;Fo`$b5S9IQ5vGQFkTiH>}G?cJno04}t%)mQblcy#|PZ>$x)!&Z?-~&P1 zY*kOCCvaBxBvH@=Mk(fExwIjJ&nnk9Yz!K{-UljNGPUD~b>bkO6Jk2NFM4Zhc-u;+ zLz`I?gST-{XK3Aui;Hob!SB}A5!`f!ZqvAo7{XrSSLfgfSt-)mDw!W2Vq%&oV8I1T zl&*m5sVOnMTlBQ_p{@DNRN06fVIjus?m+Kffc8Ft-p5*7HEIn>J1Hz@D!$Wl^40p~ zm>s_JukmjAgA1h?o!1wD`-xK9T0t%UMX zKW5WoKHO5bmQ>U~tz<%v;|JUQPLYxDoRU(c-#xnz7+yG-2- zELV!On3iHbU05_?KJ~s>PvEECv3SM(GZxc#A>19J^<5|iH!gi)rrFI>R>5h|5w242 z!5MP$Znj-Iqa7TN+K}=_Q7hfgabV%knMSGZVf`~aLiYJuKry zwzE_wkVj*Q#3r`_K+y>|E&N82^nNnv5zScF>gVcZJjxLIn4ex9&|}hrjcxqv4$J{x zt}APDNXu(AKykVm1RLo(LNEz~g7LU)8`n|bB9r8L(kfh#ZB(51v+!^`_QAOvtUKGr z#Sh4YMpfn78v1e-t+h4Bbs5rHteT9}8g6NoH@qNgO@$Jq14h}X$cWNgJZ-G%UJkM% z`29hMDT%H|W)wHFTyPX@udNmM{T40|&r!t6T&K%DM7YVAjiz8LBLE$Xv8z{bVMhZ5w-A?x#M{%($VL5>;j%()#S+{^~Iq%SPL_vDQ@ZDD+AVmf(_gng3AVB z%uyk)#qaiEKk{Wq*(E~!nhQ@mDwT}GJMO?@S`ZP(u5g4vcVzDn8g1NqMyZW3F9kIn zSaICu_bk?COInOVqgE{ooMS>DkPGJqf`F(O0(8X%U$ff%>aZ0C%LD~l91C*4F7 zsmn>$*4{zHmD0*5=J$f(6(uO7*L;|R9+4*!oF{S+;X2*|7lK{zpH|jPh|o%cG(67{ zrnZafUL+w@09;!H&g-hy)`)g0p?Fm^G{nkYoQHZA>8hRmNLSVBS*E$w%!~c@n`l#F zTfWQCNWGnGH%hieiq%}RLDjqc%WSt#IXmT*Ppj=!nj+K&6GwUF9C$Z-tGY=gE;*$M znBDP+rjcqIqDK^PxDqN}SA8p&z`fR27{vywXZUa(FpKmG1+&xm#)aecD-7dq;xs?Q)Hj`75xYZKnw|BU@m^XtqIi-}JU{KT zY-hmMk>ls1cvgnts=afJIQTKbN5egKpVn{>dvUDE{sbO_Nu~6F>x8FA zc^wUX|?k~S)ya_%kuL#^pqwWj0F(NdNZ87n1Ywwf7>mqgbG5BEg8!xjr+*0D@ zFQKVvaAriF6b>9c3ZJ(T-rfXn7ubN+=MLuWm1T6;_iki&97uN@NFpG800)wfF8K&} zRqB$bs&bu{ijOkca!cc*evUXPnh$#&o_eewVPjR76(OfIEtAtp$6@cF-ck*TSd}ZR z_|I=zXR1W)6P5m2=FAoAqPXS1B@!Pm2R>OxpfdIIG{z^(-zZa2UkMkoGp;FkK^bu6 zZ+eB@+ngS%pe+#D%Bl>ehe}0LS-`2!5bL`O*pxIZ9g1JQLM~hJHPtUjx%q+6tBDAp`ZThK7fDMO%OKFE8r@w5pyOD{qcRod^OVYg3Xz7 zL1c#=dCbCk3>pddi3|^~>h4M`XBNR!lsmJ4HLH%!s}xyE zZxLY(buGhTPN6t&s}9a{7s=+_SaD?+eGy&0a5cktk?*xQb0*Pvh8KmCo53uWkRC3w z7(_%+q}(`CIn4A1g3QGPa$iKSTHf%4JPCY>fOEn!k!?{ znOw6rRM^cIa~lOSp8!4v<#e|3oSNE}DHq|EPEAh_wCcdd*2;1+s4koZPbtK<~}IZZ}2zK9(yNE}u!RSCB6kKUIHIXQ1_Ei~-nLymIMUa^iV1F~^Zo)- zcR(K8sd(1F-FlcXN2)`}ASA&oN(k753uCiOQ^OEW#RvjDvW&y^3gynNn+2^LaYbH%@*LUR zt`(7p^LtJSqP6Zd%0Mh3EiT*=X%AfM+FGhe+*M69=&Cq& zdmlP=7m$Siu@i&yq?vj@Y%=Lly>@tL)Q0;9m=Wl9$09hwOf7k8Ifmc#8y~L2Y!q%7 z8l0W_9;q;ejB|QK0YlS{fX~{pDS%Z#%@;e#7b!X80 zVjUP2N5D@rj2`+C5b#zU0TnUtxnLY3?b;*i_zrw}yLr~4-CymKc9=DgcH%otJA9xH zQU9%e+Wp-T(XKrbOuOd}awgKNCNg*vVvwJQASypHNzHLme4^ic^ntpaxQgMzjh(>s zWPV^mxv>M91o0St({DVp5AYuMKkMm1IT*pdi^^K5>o{nCyAQhrI7i;c9(AXy{6p4 z=q{Q2$)NMTn2aKPCZYOxIr!0P?t9sUGWcx-{vPu97M!s-fiJZgmtR%sir}kJ;jt%U zPA5i45AJC7=zd1~RcyZwj|HNcJ3yw$=uB4PjMIo57l7Yk#u4r!;nNBch$psZG=Fyd!0r)2L?l8h^RD8u`cTppDSTKf-9^7KbC!$cimo8oBATBaMuEVQ|?_DB^Q1 zPA%g7_CATXZLDc&1V@d-Dp1|rK!kxk5leA@fwl4 zEy&$TpJjNtr^?ayw9IKx5+^v)Q;3Mn_ph#L##aCjzTGmsHKU1GU8!~x;Q~7NJ z$jCZKDhO9Er^_djS-Qc*aRElk7E4FC=e5;xO*Dkt3_`b9pus5sE+0b!c7(I=cL)&g zSzb0P(PWROuHzr?`Ox_&%jL(7ZF{LN)2OF07TQChE6rZ&op`m3HVEs~&Sejm!(o~- zwB|bULXh&7EbhIJeN9(=?7c7bReJw5!C5lQHT$c0NVQ#?+y;O|1g1qF@+8q{EC@Os zjw1ExgCIZ(RHQ!ykOLJdf4RAe^i!CyPJh5pGIY8*=7j zWjNWE;#yS{>1ut71?QvvC0zOFwJ!i-sn>>@Fui8~FEZ*^oFrK~m^5aN;Wz!pm)IL_ zCh%fU7%?1uTJbchAFB8$)%lwNMW@BrU|Ipy;V3qr${>No zK*eTb&4C65f4RAe?OWacBOH-pQ_T0!d3Qpvmy+m0{}4K^v-IqBG+#wI zg~RSHA43AMl!Uvx^~)cv0}CI)Gti3)l+!8`S&u_sHr7jb7en^>AlAD{S5dW}3(zsQ zeiF2ga{V+>q3%?G|BKP1LL;)|aLEV9@SCRKXV@EVCil`pXha&EX~b2jba=|V=Zt>v zJaY}5-+Jng)P8;+YrA;xy!Hz4o26|jRbKm_eUfkmg#xwhKL8+s`o}sV+}dblcxb z-R8>jSIIoLZwZ7mQL+3tUvpSsGDM~6kNGZLtCS8VQEm;t-`)=cbx5bs{WLAp{UL|P zzjoCOm%iE%t%M>tk&|WT!G{#NT%SBLI?ISl^FPCG>EFn8`^4>OXjb)FQ5yNG;J{%lIpCB6Wp+Ucq1F1H6Qb zgE8T|>quyKSK(6{d{7ns`HL2HfH&bB^tq_oQGU#CRf4{1;03* zGY&luq?4%nGSjQkbS}2(IP$Fg0II;|W^q46n`yV9+SZ_Q*0xAE(lVB_ivvbJ84roJ z%Z0GGfjgWlY_traCp~I1LyPeF4;Z*}0-k=>tiNq1gzJ$*)P*2aD&QgrYDF4vX_1$$ zuTqrYdHS&B8I@rB{2S59A2&TDF=B2#gwoOw>fS@iEc+1^9HDKLPFh9htpIPt`*e>5 z`r6~G?1uIHNdL5zPUOsv+3l^-!pQXE#71do%*rLFc!yGg$~Q5kl*oR#hR7zK zPQ0;v93le$!?%@B;U@8olDUD{*}c@CY_I%aBDs-B;}7oGC~Vk!FSD4~9!AwMv2St- zx$Cxoa#1LzY<11#({#e;+6LD9H&;TvIf*irnNzv2E~RC%Z^c#PkXL4Mh5H|?fqU8w z-0JfEZcKg%1IRG%$|&^X+gl9dEJ{4i4j5-gNI{&vK%by!i$2+kS}PNq_HQ+)+aC?}wfA?0x_Z{55v#Yq zx2L0L8G zc&yYNA9dr&r8|BMeQ>Mmj?v`$)t&avXf|gL_houEu3jErpBbB(>yJ&ZE|{7A#aMTC zDxDi2FOcrwO5rS131|0XFky_dOfl5d3-lxt;Yd$!M^{Hjdk@6=tdw+o6zS_?A2Drl z){OPF$Je`id#v6_dp|TmZ=^T6-rXMU>*=@p`Z{Phm;HBk;4Im0^trMD@!5VC#qOiQ z`|G>clCx9&Q|lc=)?{gBv18)KPI78~IGNpSFU`f`Y(AIGh?g3$8Y|xy)(D0X8v_vR zb4k(Jffuo55Hn!oAX|`BEWaFfRo`}m;n@TFlU1Z}>8lb~`HnM(3)gblanW#uTiwHE z(L9T{Uv7Dc;X01aFtH*fG6FQK6i;psw6y_Eg<_an(oSO@^D6axhiUIHt+-k17GPSX zxqq*Q=JxD>sb9wPft%mQ-AesSxD8YqgyppFt;g&VO}~ylydyQcv0AlR6J|F|?JaZ- zDp0#4m|?0JpS~=byA52Xed@~qoJF|Y;f4KQ#{AbcFh_fy2=RUek21IBmBU)Eq9;w& zSg7>VAljE0fYtp;)$Vq6Q9832&|{I&)D>~ihau5ika}bJoUV8;K)M~0T@dNWDf1)s zeXruAhTrIjVNqmw03bBxd-_F?;WXaz2B*AH(rRRIS(|^xFUK`{<^8%gnpoNvyI?nv z4b@FyCN(|?vBqKOI)R>r!nGs%%d!4t{60jORn+aw_X#6YvZ)mq+6tDaog?p-$1NA# z`Kw@1%SL`RCRN0rr#@*#gOZp8JgP;S+bHJ5N51YchoX5+@VaFP@o~BmxDqisjPS-f z$R}jmU^D}(br=m}RZmEx9IURQrw))sltqF3i1YGSLC0poG`0_z+C*=>dO4>$y!A)% zuk8cY)&@9LsRmB!V26C=S?O1Tx7C#pSfBJQT*~bBVWCI8(#TXVi!!JU8Q&^>ZA!%Co~aQz6An7L5K^FqZu0y^qhZ|%e^XvgkI zhcUP?G(N7|!rQpt7#$(GO4J>P={{O24?rJ76Q>o`z>s&v9cW=E9W*hVHnZr&nShp7 zxXze`O{<8Tr<3Wl5zn#IYjokX(65-08rIToI%mdh4m|LUcDlGC8l-|Lh0_&X77f0z z;A((*MKELSk@k+R3fRL8jE=A|i)*C~o1!^5ab?9l&~^z;L7}}(qvH~A7fqt;r~VrB z5%4U{PZ`^}QW`hcnzYM^k>rW@S>hm+L!f))1;$MD4A_zlFH+0R_*T+pZADc}U_1ri z+zvWAgU`WE`5dAn^xjs|+Ll{}bE{nWDx8&zcZ7&qfqqR0kxGMj#E0s7L)kj;ru>fj zHx-(Uoe^H-O}Gz5SvPZS-?@*qz2CT*wufe7;|KSFjkj@1?|(z8SU|H<0BN()DS$q` z90j+k)D3S(m!AhZ0#g9_%RVW9Y}$YnK=mC=ZE>|NU{qGsZ`Of-VX=P}k9tp8hmmmY zSAx!_#tI&E8xVRO2iG}&RR<=-K|tx8Sy^(>B$K6LJ%_`XKCOmoG3Kd9j+il@z=X9t z0fI3f!K1GdCGOeL@z9?o4{zjWewI;t=`?`Z+e9f1k9## zyIcps&mw926^Bl36hn2$qdU#v{{~OL)kieFo;i_k{TzGL-O%-?Zp~woo180}oVVb5 z6a!pqm;rtR46xiN0|aZ$`Z6y2>X^`-aY=m2b#L(8R)RSXFXaQ*d3iuuLq(?H!>51l9c$KON5uM7LvI z6O*Blg`xKCJ~*%<{Shm4H8Qn0L#C ziY&;$@a%89S-|B2`yCi)JaA$geW8Bi+@LcZLnb4!;1NlnhocRf`FzQL% zE^*H@l8rNWUD#N_u^7HP#CL@&8XCdfm zNH}gw*(9#LBJgli52i|zo4VjX4PS1E&6o76_^k7bNwCG7U<{VFZ=qr_I=;Xy^q%IPPhw?9)&x>=e`-uut%oo z)TYT9wh`0li|&2V<+!*Xxu}jS!-`}ZRmA(4l1I3UB5{tS35uAq{Xukj#P-PTmNW9lW2e0yr&J2XS5FO;DLF#Ts6)-euuPI;*3g#hH+J+bzjG=_M z$u3!7--l2bfwQ`B9 zaK{Cda{UNP7GXU2ZdG)e0BS|plJ;~8g3{yOEmf;PAer*Fyg?mX2N)xzBzHN7#vC-Hh)F^rFoCk!RS((1^m?OwFj+U-nf9pw1cTZh^c zn1M$ou;NfRy*CW=^an-~$Ya zsY8)~4xe_~G#?a3palFNz7LcD{&I6A;HMY@+-&XT2O$BUV6eL%Jt7GZXv6Ik&bGds zc#T+Je*y{kcAsTKvr*68MKnq>Ud~hY9@a2sPlhD#3<&dwMV}1|@bItw?!O zhHHpbgCU47xf#M)H?;C$xLR6Um&mn2Cw9uM<~5ou^&D|1xP*%Xt*y*mj8KB13c*|+ zb2b36m16)`(mBx|!J`bmXQ2gae0Xrdn92Lk0P zotKS^V5e2^yE~=kJhW_|)*Ye!j>Ps|6d^c-mMDDkkiTO?PaQ$E*Ja1o= z17O;)FKmxRZlCeFJ7kmqqBG$T?HNAdF^7SK`Abb zPHoX!pG@^)za|2I3+BdH1WD>WxPD~vZaNFCJOeu4*36~Y(Uhzj}t+-EXZ z`1|$l@HdmADl$Y>o@8so(igE_G|b|rxAcqQt5_^oVEynQ*+I8~&0Ab5oydHS-+e{B z*;a8S2W`6bbcJ-rjxWy3}myjazO@L8BEDloM#p!cT{UtPjjCWl-yd`KQ_18@0xbMsxYnGJo1#aOEBH5QG^`y^nTm?DD+7#R%0bmnxU%-Sv3mm*>4YP=WZ|o%gp;i$o0O*uUFx z;Toq5`imM%B_mCQxW2?5bq9HWq>}e;M&0HkL2m@1qy)X~psUc#_Y8*h8Zx!b zh!A_Ly3bsgGBg3B{amwmgNj8oD{4aGNXr^bj=TS(^@KS?oh1YirUbpjYVz#3-rKQpJg}? z*){aQXT1`1%Ucf4?Y8{ux6ksJDx}zU_rBJomBf1(pSeTX)sHRjXK%Pg#mi$t%hBLW z%e}LTmOC1=vSP)}Qj7htRJB_4xffF)Ay6&;1dtS{7WvCQYLQJFpcd74QZ2F%lv@0E zbr4Xf#h+mWbkn-|YLURJP>YIpTxyX%ZA>lxSE$8z`YglCvM%!|*#4?7nEfYp*kkTs zHd%3wV74=MS^jDAg?SHy1&eo+#j$Rjj%p^=8zI@-#%U6#P4s^^aD(+GLWmnl8~04$ zl%_&ZxNm}C;^Jt>lDzej%UUNzY!iu3f%-HF|ZS=gQ7PbbRm`<{f*! zR@>%h5O#i^&4WaTH+78Szo3TpY_|f{Zz-4+vG09?bWSj_8_ZJpN4KOqEtHl2)Rx4?}B1 zm?|ljYP}(k}Y9Dqy z7v|4LlhjC%5HW}@b|~iHn1v$_z58%K3>AoY2Xe2EaEEf0aksJjx8b_uo`(sMkUO;vnBNV-K9IjXj^cf(1eXjlCYg6KL%5m;H=Anl{MTliw+0 zk3LY!YovZ+4l-i8_1qyCdjPM(*i(G;d$*<9(BwE&e)PFbwH807kD4FfUOzu>-vs=) za-LbehoI(_gmRV$K5>w`b=#8vtBM8j?^&KB>3t*8Wt`)inur+HYOnxPo{WpyJGI9O z;Rg%TXm#)1tp>v#ZLvDwK7c?I*`8}_7sOAiIJ8juV}U-RJ$056G>wjMyD_NmV>5V` zlywD@lNMQ|#0K%@|>37&Uc2Zy%eVU~P}#qn0->M^`u%Z6c*GCU+rm^jjm zaVjIk*=UB7M<-qrW(7r}W_cgFZ8p=UMMuSH4!BY7P$gd2al^^y>lw9hA zZb{Rle5#HGei>6hgQx{Q?k}f$PyyP1K>C#etyWscFVz8v@DeIO?zv!8pY#mZ9S)5l z5%K_QgdsJF9_9D<0mi`o)sUXp4`*LrsU4biUFF)E#KekM0X1t1y|%CH1F7D089)5c zhTzejZY3+%_}XfZX*mCJA8?)&id>K42kCxqtG@rq>aGOZ>%CI(ySL;1Q60SqK;U*+ z&C|#5n||YU`#|F2q3l%3hT}ZafDJc&_uXzI&XpMTPjCY{`hr+lyM%sHDxrq#qg)|* zgV#=Qoyg4$(JxPA6FE}nvFQgmGkD$*GrZ_d6uSMUV4*pP6?bJlDHyz&HO}dIRRq~^ zFj&}7Q40noDlfK@xsuKMSjDBAh|lcGSaQrljXCsvX;@yyEW&KymITj}61}a}{Vj4H z*-*?78B!u+IXr~6a!)g3L#9wYC;g=G3uTk>aMmieQL%~L#y-lnmyIJ48--X!Hn3wPF?_Vmp%_^0qD97{*VAxt5= zYFAQkg>;guf`XIJ)CZpy?Lj8m?r3B!OJl5lbwI;2cU6RRYD2fcoGy!y=OKBa83Un#)mwjAHY}x>qlKM`%l-LJK*_G-*xbP2NX9z!R zmlAKEnM^z=#y?M|_s2<>h}dl)LxYhrO$pr>*;)hL|4X#H;H*%g}U8yq`UQ6{lww z(7)@L!ymDB*hZej#*?$Gz`4?x6!1~y+mk>ID&K-1t(um6FAAouy_7+Ne6oD;;3g`| zKNf{_f)q+~l}C(b7{MGnPrMAX@6|8um7i4RGt6e@RTfU=J*5@pGhs5VpY}ZSdL)Uw z0ppxN^FcU6_fqG84A?}8kEb4n_iB>lUon+4eVVgIBYXJ?8tcCwOqWbcVQZrC@5~D* zt7cfun1IoW%=6BDfUTu)g313Og;ssKrP6#*B8qdpw*q|wzE|9p5FEsK1_b6W`|P>> zGJNWexbsVZZy_JRfMM-Uv|B5K$=T$@X6#b`_GCxCGd?tKk7q{hYrEq; zq!L-TB$>~wN!Xrg;Ol}pYp zUmKmdl+UcR_ZL<=`Z{LD^2z1VdHZVT^6Wxp^!mc3Nc&9oYWMQU{FPXGY5Q`=e8+rb zVuX!zd4a&6*^MUwQF^e*z|Thd!&vL}_@zy(b-Z{v8y}u-UtYX=<67cs$MkM=bUww_ zI5uA#PqA@w$)%D0#bt(!M0=bToWZ|i7jMia`?g{o%e(Q+^6pe-x$Ekc$aeJ7Qt4_( ze{rgFe#`7wF0sMbI9Ep7v8J7w#jCs1sjIs)sgaKL%i)gDrJcc^#lG}h*VcMrqi-uT z8ox5vKG=REUP$#NH& zO!l^C*Q3jwy*u;Q7CWalT3R+xfnDSdc5=2Ur`#%$zU3MEJ0Qu9f2krF&&MyO){7I? zwXUJ%xlra}f5&7;Zz&O7npleDBZbxNE0K-SE2Fa`sg=zZv?J1em*F zVlt0ky;(tl%8{Rcqa!XVjHWxXc1PCk$Xa%QnuZPVmSF>|Vb}nd%aFF?aN?I5AWd2B z(HG|f_b@VYE8)Gh2;wuG`+3gB^LG+{Y&~S=VB#*&Letqw53WCMsPu z$_uo|=}vjpsmYN9A*+*l5{1fFG4xPyOqs~$WT_c|y@YO5+leIZB4)X^xKXu~MF1j> zJCE6o!Q{TeE64|pQ$9T=6w`a-Fvzmti3@#{;URK%2{OQqOj7)p&)GKcL0zQq8+}EY zujg9X1Fa&m#UeP#BF)KPPU6PqUDV8%P^4Wz(=ir9GB>DzzQ_jP<5RE)EzQAaW^6NT z%-~*Z7HQ%)k`%0%g{lIy&QK_2Ysa0+bbAtCo*&qV|D*82v(lJ zla)QQ`6k6aC38Z2*-jqUU(Ipr^Ncotf4YXekTYHw^8Y(CdT|~Y4D6CoFJJ5VX;5$K z$AfORm&>`|DGYjqU#VjSBJD%1;7xUjlAc3A`2!C-ye_8|p(KDO1)u2m{;&?%K7v7^ zWE5-{4=%VGfc*mgSNj0`gCu`9mztW%F7SZHb} z6j{GGm(P&=2DV|t$jnLQA)!r_KaGx3D7K%>NHU@l=okI=d?c!f{D;-&e zG#PiTuEJ0dwIgCWdICbTp&8{amN>t>R%dRHlczF&5g1PKCdvjehUKuuv=2^!~ zFN>e~zb~ol?^f*m^>d-ikW5A;rF`^huo-yoMpwc!~3Y%!?j|ywB)X1E$gIkLPFDnXSmPCY6gieU6Lox4>%StGQOCPIWv zYTJm^|E}K6CTp;u!_>ZnM_JJD8+;S6o5mCxIGWL$5P^V3dfz+}tS9_t#I9@4=(q$nX(Gi4;GaaYl)l;8oDlRR@4nU8cVzS02M}`i*~6 z$Kt(m@t|83>cIpnxu!=`CZQ=M0Nw-4uk8bbi%n3wYS-mpH)29}SKC@U91gcWS%e&p?N1^lmu-EL+yC9lQ29?o*3f88o^_|8y#?_Vs_A=T#aMZ9~$l+9qw`z+=8M^{MjF!E2S{ zZ4+5Gwdw|l1Z6;jdvtx>ZLz{`9(`pCW*!bd<~zfjs9J*o0!(p;$tVyRr4F?D;FfjO zfa{F;F#&DPU}Y=ZH_4cpyWSk5%*hHZz#B&qKKGwhlv7n!l}l3j7FE4LZYqInBxUL; z>7evwH!Y!mUWcrS4d_pqu0tp1GvH_64gLBc%fR7XQ$eo(%+EGPjzKq%hxL_~3LkqkiQnwrI$ zIIqxYl3*w1Vl!i-K!}KSRr1V$n@&mvJX^>h0geyEj<6KwDJC;)D-uHi&nQ>Oazd%{ z-L<4y6cxCv;}eiiFoiN^7Ps@p*&s*?$mET!q{*Oi0D6Ig2a<_OU#J>#rR6zaqwh;R zx6Q&$1PbFf3L~+0%PtgzTk37n`?5rggXxb>>eyc9E>$`4b?{_}QkBKS08a0Wr!Ws4GhcJToJmSpos?tFB zDZE-fiS>~d+AAN!PkZJ2$VDMk+}``x*V|?xyZ64-SAm!EnF?iD**JH)pR_w+leq@& zepauSqqq?}n~imEjYX12LZq?X%^r1^aU>QY?Um|GF0*->+=qV$0T1ynnBeHZP&@Mw zX0O&3t1>h&K(u@7!SH>9@a@(9N3)yxP+&z+fU;@rR{%22{nr>ZQm*Li3BC<8xB=k3 zv?=R1%sS{Nf?qUvg}m_@84gFdm*KJbd^-cwpB`-LVp3+aB0T zbcKmtK$z$bS`UI&CTq0&9A|jc+Wn`PoVfRcda`wXwhs9cy8=zYc7>~lc4RvEdOo|4 z^<3iXIq(6kI`qfc`Au%l$8ea_&wp_rP=AX!fg(U@zCuSqy#UUBjTi?nkedDkW2pv= zgWwtJt10;>=7y|3p}VGp9U2_ju&z$cA8&1SxNRLi^98i7$e7GsvVc2JOXN1EzRWx~ z!*TCy#Wgx?vz4A1b@P$%H0v2`>CQ)o*EBh&F~OE-2h5UcvljgAaUKqKAA?W7Rvd%f zB~bnQUW?@E?tS4xGtq+ptkwxbxRdY0qf8ein8V32@tpLXHye@4B%!$*b5RZvub*Tf zS7*Iy-JqR}xAG9}q%8S&eq?BNdU|ALcm!AYCPYZU;Yt&3Fr6hp0leZW^T{CJfP8q| z)rl72IK6IIS?Usw$F-x8IWqBy=04*bZy{U}C^=8wKxcQ7cygVkDG;nk!*&h=pJt9V zjjG0{@ zC%QCywlliBi>M!PVN(jiX@z0^b}xIoI{8ItlqO=#{n^`zJW75z9)mS`r6XaC#egv#mz0@`En_*mIA8>IH?Nh!=xW9@zyqNTWGUW$1%xcW5LJYA z6cA3Nr?2F0ET{XE3mxgy>`-L-@)9ZqsYudUK!_5^CGlZ|>KgH7du(jFXKJ^9_u9(L zR(xe5b#0+LZCx5I#xCuor!x3_w|_g9>2JSwWv2Za1L?}V<6)|8OeavH*)zSk)G?hJ z$DgY^vqRg-t1I(4n&et~dE8p++l{3r%<1-db7pa7l#LT>@7`T*pGZ!RC04Fn>Q5|Y zHzTu4>HI?b%*EK1;*IF?=xB6zqCeb`yV5^D*V(;0fBizN9T?Dj@@f#qzz zxHF&3%*`$41|#{jl^NWa@5%3sjrQ&Kgm$m*E@v~b?Vi!yNc?&{lv>|exSE^ZNeoWp zr&5C~J@zb*j#Jj?R_rY{9@;Karl&JWl*N(I#XOfiJHYcz&yvp;@4OhCE&37$d6|+} z&$4|34~tjXuPTj}rW2{I^drDPX=uT`a+#IE;@_TYD~UvO<)VFUF`vGgA=qBl`KEV- z@(8PXfqKKZBb0Z9GDs-Ze!Wz~a%m`yc!IWa$8pN(A1Z(M6&P|9nTF>&lx3MdC`Ln= z96`;r3XsMvR%p+zhqbarStG|RF;@mHOIAWmm+n`EFR<=l z!^1N!h4JVhWS0((B(QmNH=Q%%Tw)=x{$DCM_iDgdc?>CeKyk6}4-1P3$6TU+d$g;w ztGly3WJS6op{`h0d#JxJ+8gTaiuHDz-PU?nCtM8uns z?)I*p{{Bd3k1)Pi-UkiI3YAc&#LJX4Bi4?eat@3xidQQ6eY_h^?;H50|wS?SEtE;H84)=c9vxJtm8s`Vtv%CRU5Lg&Ro z2

&7;P`*x=L@c`#%JKhm0<{czW2=SF76hr4jTTU%9Y?hSX~|13ufnR(*k0K0@# zB`aPfQC1ZL5fBbXm7JTQ$^|ju5zC`2FS_gw&LmPKo?0Ys4tPG~coJ6~u(v8wbE6ip z#7g=JZn831K@!b?tQShEqpC)vZAt4zlfyT6_Zd~eQQ29i#9v-%s2^O1T18uCAL8xOBFZ)E2GC#p~1*^DHohrkKtzy}aSf146nI zYlGQJuYEH06t-bfJfe*ykvH`oWDQQ;y4Uev*EP%|2SK>=-z^n=u zKVn0adj>A3bXo}_X_i?ru!U#`b=Vk`1<$5*jQbojc^n1v$i?SRt+MNjURZP8bRgGc z8MK@vTm>6QcHgD;J-kqdc5k+EtAu!6FRW7IWfTp529XlJwuUd^kElpqq#ABt`_4RZk$o&pE8lfq#A@f&k>6Wn;gTrb*T)}D*q z2f=;{*;blYSA^n8JC@E-HzjhXx3T9#)Y&Uk{Yidx1Sz!;<0H|1A%r!M2ZPoF&cbyP zN{{t~&r@Rm^ziJEF?4ZuUMz>zIv{$e-?iZci<0AU(EHFjK=BJ-}R=iEuqza^pZa0=1GVSC>?`hc(7c@9jC&^{!J z1>XJ&u2-w}OU(3e*Ay%shI-`KaMd5o32eZv@|MN=b+HD1o&oQU-Zoa9FoO}Q8W7Yx zI-ZN|rM^tn1*h3>lr^xI`g*+DXm!HtYwRLEwF>W|os_7=j!4cn)tq#V?8yp28T64R9jd6Edz8&Xogws$!nIsaxLPRjY3SI(P_EiDhK zl6DNg={LTOz2TN1rvXjOAiV!HIOD;ms#+gCHW&4v9E?U(8^gpqYS5{=YAb(-S5jYDTh&Le{4o|N^~%a&L95B|r;N64 zVkbK1NHLug+HzLLFKv>eU_F9aMz1!s(``FEX%9LBeBR;2Lu{849JxzE! zUiN*es#FU1-COAWPnO>+gPE`J@tSSK!iPv?gXk*HdikH-JYE1!9d)11BRqG{6$eckrJgm6=|FiccaB@{u-aryU z0t6C6680j9bedErot4CZG)aIakc2D}MeM5XuI{c%cU4=}O^Ax4;%?2jwT$A(jLzqd z;^4l`jN^j)f-9rqF5`mRj5^LZ`u)$j+q>`G_uhTo)t#WsZ%jzNyPf5pbMCq4p5uR$ zE1o34XgU&8YjTfgCinA++yOLNaV~#UQS!N|<@4Q*+wYO$W`z3X`|yaPG+!n76+T>w zUa?}BttjT@Ieflm|7iK<$8Np;>VvCGyT;aSJ#byAbLW8_oR|0d#~&IQ8mVsDb=~NO z$K8Bjb#cu#DrP2-$9Le$E3Vkc?e`xXx~3Rv;mG4_B53~7(V*Gu))e-N#O9D?5FhUK zLYw!D3~8P$@+Fu0^8<+E3}{3BAtyhWT40s8;u;amd>8%osG(Upo$Ze9@!rbY@T*F> zsr=mU2>jN(VE1@q2sb*`i;kR1_OxB*#Zz+Jv$e+D9VwV2^Z#zK{#T)?wf<{w$318| z0PTqYwC(QNvqFKRpvcligL0QYD0fCcc{PC&)V~LQh?C7eh+vsR3l|h3I49sevQlXy zmRF=G6n7*@+{==lBvp<}e&NP(sD`j9g#L<)Gjj_mZ%#&V9Yf(by|wyEkTrQ|ytkuVi{4uWd-H6% z1P#`cu{qy$;VSD!eKlz!q5?Ow?1@G|7%;%ewM=mJbB_{o8=Ln-%+hw8_61(tpmx%E zshneG`^t)yG-l@v={6HuHGK2 zGYccF&IEfK+hgcVB;7h2{|i_a_6h0l$!t-o&2loF-O-Wj5qF8i5GpUE2t|>x>IxO% zc`9#)`fo1d-g)Ysml_eGx>z0|A`iU=x%s~roL$;DSj4>M9PT>tvWY}9=SN$AGwJ$`JkUK<~cE*P-P?W+ybQ}xKlp*Zw4 zPe7ML<^Hjui5-i{np%!|Fx|O4UFCfIW#c7wq)HxbcWi0F7}0ewnJ9203fMd((u1iR zAs=;tJy1U!`DEEq&3WzZTZvKH+nJ13zK6nZK++e(eTdU=%WCnv;Dq5%cOCkEOYxEpBT z33rWGmF(NH;eG?bJ?zmf8{8+ix9?GvAe>OY#6Ueyw=^)n%pc|#c`V+B`Hci~)1#XO zbF$#wPVg+LT<$UIWumFr@4U~*ypL>}w#pS~Xfsz^D#I;oZ`W~!^n%)n{EyKJ1k0Ul zwKfE}2TeSg?jvZLZL__J2=K2S-6R1%#7$FSU#2X1mH)RuPcjPy;qjvURHuYm71>3)9`E_2jg$VoXLD;bMBi7ao^#wlBdmvxDz+m z2l_S_Hf&tCslc$dwXC2zjX9x8WvuOtzAQK?$C%M}V7Q?AS@<6NvOsjU@4UEZI!{Y1 zZfTdM{S6FZe$dv!MVQc&^DpGJ+mvYi%L0NWQczt$o`rYbLcBB2vEr}|Y4J|-3{vX7 zpE+_;@(PMVR)sG2J7v`quwp5z=INGZ4?fYKT95aD-QI3@63VXk=q6FNkDI2-sY*x+ zkzXGUk&#}c1h-#~J4!P3RR`?nOzvTC zhA?YMX-I>!G>omX5;HvmucYxT{L3tOViMD@Fh>f+DktJmiwCi?BG7~^xi88BmKL63y~*rp3(vO`4RbB0 z;WARm?O-CiKWdU5#G*WR@SuZ?zLNJ+<+rAHXGmDucM!=H>Ah1&tv`i_*q4HH8-K3y?1vgC<)VsTK z@`{y3FxArG>Z!Q56=EADS6L)#ao*m}X(vLqa-l$Ze}aC5^HN7PnEPkOoGqiJ0yTO> zk_X$3Ri*i0#`!pp<3$0QlBM)w7dU1}xiqVmA)FopTBS8+(?3n0uX`**n)!Me!Hp*7 zOx^}Icf5nR;{yy*GW6NF!>t0=PPYnJYgE9xs0#SKpj@m9n72GZ1&Ge+Dgde{;u&#C zdC@LL1*|nJu?&myQ~`_8G;GApj0#vAQ~?srwhEvhv#Ef05@-H4D`zJ2{?t_f%JfQu z(kb+>1qr0kM`n~Vw{z1}F@L9ui$x4ak#puD zMg>o+Mc_-I%o;KP)P=j7bKl7D9r;`xRcVxQ4!3U>CyNO0!Q{F$H|6b9@ALNv6z6tv z!B1o2?{4*~4G|AA5hK2v1m{VEdn8L&Db#6j)-C&eohRAwV+>1PQ}Sl9`Rm=pUqigU zWKgp4SE;aTv{a=>!3_obX?3)%gEb? zHxdAL=!bwQ3m?CS`1mD^iVS?5Jj2x03Y{!C@UN%XK#fPj0jF4YDw!`36N($g)11AG zw7M5fJ*|h&dEmqr3GXFTe%hm(6bYZ;rl~6DaRK42FB`|})y;Gw-ORCtjm;d_wOK%) z*Eq}5t?XvJlhJ{VCcZLw#8?!a!r<)Zj5AxpUr{KuVg<_VzkKS0nf3mb*PG1DQoj&r ztY3nM1_5s}huegI9})hiJXZ3w*$998Q5#MuEelJ5H2*B3AJ06W721@dAJ3;Tj-u$t zrC1NRT%YrrM_=^gI-?0QML%9dpxG)=LTewl=*Miwt@qQOUd))wu&0xy#?JKDaH$ec4XZ>WDIdpJNd`~)+4g&2!WN1jAO!C5=q82YE^eBt4WAxWRYj3QjZCL8 zSt7@ML!G0HV=8mlZc0N-xkq=`U}7K>Rjs-b_7>?={V;)sDHNWDJ8*dI;0H$1Hgl*N zo#~Yr!i_WGY?VBR7pgSsu}?FtZ{gO-WR?n%24;nLVi00|OcL`ZGr7$LA0#fQ^Qg%S z$i@W^t44YpqpiBhKUY!w607h8?dh!dT2OJS4+GvzV;n`Q@eaZ7N3&{NKS|YiH-ToW zMhUI08tKPus_{d#r(eaG%dn@DrG}*%lbgO50bp2w2x*OP+C%{5aARV}EQ-HATl5i8 z_NGr;b9T9Z-I|HYJbW+F+k@sQDqy~mAH-#Q71+nK2l)b_ha3?0`vrUtJc*bu=26ce zhA!MWv|?wa6WIiBnW+32D69Ml?=>2gwc;0=R{Ror|JS^HA5;&iD}*+)+f@4W+H*s= zSt7k;o|j#{YwvcIqsTlpGcU_dP-7XD@N*`5#mWMFYIrIo8y470Fr)mIM@i-ZnF*LC zWW|yN0Ihe#at+$5~g-iTu=-{bfe*RmEA4BxGkFBlx;wvST>b(G`JjQqh}u-Voq) zr`fw5fJ?LY#6Vlau~(vjr~hXwBQcq|ZJzr$@!Vw|-K4E^2{%o(cs-tVlrWNl+xe_x z5Dh%x?(+b^hWj3ZyWr6+8{DbSI-YHyc0KEOu0PDTdMw_C`4a^5(>=ObFeghesRK8A zj4GdX$W8jb$OfC-dycv7?Z~(2+*$9zq9ljeIT_!F51yR$E)T$LEPs-)e78q8iRHVv zY1)oD&~fZB$8_cT%Xk`I95#iokgI#JhQ!xHBPNG*opPcK<)Cv>>>}6QwX-X?oT~NY zt}pfG_Ud%lbg0~306i$C#LwOKKEkry>XB_MboSid9^{XT9(hED4Pgq^lcU1AqVcH*b}$RE^ut-gW-D~ z3}Z?;JYFwPRDMp=+2;+pf`!dxam*N@OgKD9@Tx-kZ2G6^bIb+lvPU{L^iuNK_+Fc! zf^(7uxGlUsMZ)V|CPK0mkx6(p&ydli>pO$dq@5j|Eea+&)5McTrZC||>!aaB=YbkQ zehWXY>cschh*Htn-k3``qBOb)(nEHLTT)Ae6vchk#J$Xek)$JZ3qxrW)HkT;GIf8Q z9#;ye!*Qh`aq#+DqT4>q(~sE>^PeUzJ;wo5@Q$9&R~DBh?*nPb+{wH@DO(?w2=ewi zEs=4oRaqidZr?);yG@xe5R!-u4|wg({24;is7E)6rV(zMW{EVPyuVt;@jjqxm03Ww zJn2PN;Hi)b72?bX)K2DS3%tQ1LxnQgY*;s5AI@`qPmWL8fnrtq%@aRu1}hf4|=eZlq^4X5YJaVZ1GnQK((bFdaQ_3iC$YZ(2v+_ zKkWc0ELAOTOy+k>H6%BceqM3Ljc@Am^PV2Ex+=@?12a_R0XQOsOIJAYv^O{C1kB*n zz35SJ;V!`N+Nn!(iC^G@`@uZp?rUB_j#%xX#e)EZ=d`!4%$0EuIZ{Sw4$3^Z-hl=7EJlv5Ln9<@zHe4wNl>)B z2xVcW{vz#$ z)eL1aLcR}@qp5N}>x7Ft!#@7?$}ca=_EKg%zH^|$TVs}sUo%ZZ=1W@GoMdk;)DC)J z(AG|0CJZRBf|h=BiSel;*i3CHuhdQpg)5z6)TBF|j9kv?wDib%(4Wh6o|*@JvSS22 z=yHq}dC(J+A-x?SOS?Lp4C!tUR*_=hZH&0&4PtZEH;Aj=;?YfNnKyFNRLk1KYyJg{ zBq4SuL%J6YJbjy=^8mnx`Buaj8R}8DNnWrQ<~qEisdTqoh)bM@scKD z%Ot4(#q7zPW%KU039FazSjp37!|GY$Y__R$&4vPdNws@#lfvc{ABdlR;%TF&G5Z?~SM!55Ql5tiJ@?789Hj9*d9Cq2c@ZoT zPrF3h!sZ;Npy6@)0E@d-m9sal?+oO(x;Q)i?wS<+c-k2H>2HdD{DY?7Kl{_~{WC&8 zT3$T;f)YZ|E{lZt4oQds2N*HuWg&NyXOP-$DUUi?S88$G?MnSmj4BPFS!iSU_BZ(8 zx$S=C0k17cze{NPxkooCNPo&rQ`OTJx5ClYfa}V$8c3mz7+}i6ErWW&!c!YWv;D%h zbo|*!;rz7=&@D~XXG6-7(=MB$(y5KXGw%?>UcZa+JyyGj&aKrhS9*|1o@=%`NHas) zMWQXLUFgGfX_s}Yv(v9SDf(#*VmqeT7|`F`+T|91`W>DT`Z=|Wre9FI2-+pfep^C( zpTy<`4lrW0ix8X1Gqgmzlx~I-Q}`rJa)c zZ92q}%rT9AdEh8J{j{FQu0yu?)9>OLp`TNSX!-?ph@f4vgtsNck4QrNAghE(o}nc= zq+A?x>X0V^p30e-PNsmVZcB(ClZ5z32N+>_Y6-^V8K$m3yvk6lZr7S5t_;N*H1YI$b)ae3lndj) zM%_;cbr*Sblc;Osrl~sRK*;Nb_&@n*U^4=Ud$dh85F8}DSyRX#C05Lt5R)D|EPlsBDXMywpbEYcV_D+w;MuE+Db?CYAg%6(X7 zb5>)lf1)`Te6Y(dGj2zZ8@jU)~s93K~Jg@RI>MsgiIVi%BzxSYt4kx+xr^Hc& z`N-v#AV>1Hv$>PU+K~b)snKlQxpi-;l$#nKm>b2}G?=07^RZfJo@wT}mtmG{Joj>5 zm(4NRc_&k^P$JSWJJh39yz=cK?I;ko1)rmjp^?!P4|ZW9cIb4p?}Zon#zX$4U@qh z!BdIMx@dYg^v{W-2=kE*Ey$6)-E8jUv3`;QYhXira_4j^kv5=r`jyBU%#w}g*73S* zj>)D(R%3)D3pGKBT#ByKsYHH3JV%(1@SGq=7M|m=E=Ykj!gI+pOkIf}(2}ZHyGxZ+ zv0BLubGVhUX-4tMQ+W(~z-({NUlQ8O9^It!7~rO<%Hvn^`H;+^6@1E6#Dil*h>7?x zytD2{M$>&mh;rr^NVr289;S!M_0kyfKjNK|Op+|y%X5sX8Hmt$F&rwLtD6?8Y+|Z{ zTQ97OxjG(YqfSZ#Z=0)wNDekKTBCyEh^;OTj}8^92(zbG&pNYLgM)XtAbBx2Qm&Rq z#z%5gaR#-?@z`qZ8u4Php*?edfskwOV$*|DZT9;WvETDs&VGG#Dv(K&J1AN5`BY3^ zWvtOpYO-Yv4h(^8$+1U}e`F-s{=g?r?^;w$p~ekiMi+pBgax=yEY`d`FRg!zbZD#($%@oetov5rfDHL$fk zxpO)XM3-T;(|;hk8na~Mxodb`Q{lO*Qs|IyAbKpiPAAX(hIo!JAK^Jcjx0RKV_lL0 zYlP>LXPCM=$y6!qIas~qjpaTH-bve5-OlDDDFojlfSQeX{i zbWiS_PUZ4#takd9%a1WjHlF(_ugm6`YzEB(DRfBSx!<7cbn@JP6VDOmBRnU_k%i}Y ztZ$~k8sWL*8Cs%T==6rveNQfOrI`K_^1u(fpJZN;*W7WMvzPJ4U5KWh%H@1CO)_W+ zC-(OJJ&`5n(M>9sv$?55xwKiCAevWq)$7H>$C8$|1D_X{!fvZH)a7VeB%2hA$mw;sOrrM>@y6$fg00>*ic}OjiNZ z^>V~fzo)NW>L-U`akx-eIiEV2UwTkKV4yrWj{N^rZiv!PZ59~Y%PvGz;S#PyDz{Z0 zI80u}Vs1Pxfzwt!6?~l3w!hTqtCxFCTE{}%+>IWc6ta*TDUPa;j=+%J2opp?%4@;t zluWE6cLmZpmTpF9`fzEbYTt)UP|8(`S5NreftlT+#4yVw3)Z@WNGJfs} z%sU8aS?uBwv+t=L)RdKq@U%j~!9r?H3nSmmXixH3pnR#U7kKPS(_gG6S%%shgKRm_$5H3gN4scL8RiMGvnj|WRc;A z+dTM5GW^S!uweKnPOl&{i=!E_b?!LTi09@7UUE($;ruux1caiQ?~NYFcr_LSF4xHD znP!n{RwuDx36ir42~4Gsuq=-6%-HYufL!I*Q*00n{uFD=B3Ay7#LA0!tPEl$eum0< z2xqG-#~&n%zD}~}!pfcW*NSUdgk9$`*S*nh!bFIlH(;N}8dbJU^)$L;x?xY(9>lT@ z^ldI|TDxgO;YPkLEZnfGd)wA^kKNkck=s@;4vghG*WQ?3M{-^MCR{!alqothZ#X`$ zqW^W_PV4$^>5(4N&XZylTWPPA% zNpyykKc)5KCCLMwX{-%^Q!$~Zm3|VMhOP8z2%rZnkrV?GZ3~;n3%-dE@YbNw(>DWb zrDV-w7YEDb(KX^lKpL(Q-Oa+-3|bhfu&cW#ZWX&#)(v?NS1paLvP#){?~>r{Vwgdj z*R*mw3asf{MkLJMh-85%9HSryqH5*-zI8YCl{<3%N+O_*l`MM;aiV>ls5vAkrRm3P zNgMx2Qu-$zlG8d@CQHkyAJI>xGU5H@IuhCUAX~Wet=AASnz&3nDcIO-l?qyTZuJ2| zaBs4nvaRMn5#sthx=F+pxT)hnZtITE?U8U(U4Z?2x+%!z5VH3VacGPRZlTnFC^*g|Lv+D6k7*aDSvaY*GP1hQCK=Uucu zTkFUr+d(XX{K-1O-UG+d9=M&sPnNls@Jyaz>RKmL74h#9M+o(kRz>{#XzHnlzU_e% z8$1gVHlDj2 zBTSO#cBAWb^4x6VIl_E|=L9*j@Enh|F$LCuS4T+1NlPkMEq=79-&)6OAcJjJ7%R4F%e(}##kxq~q`-P`+(m?hixelxFYD%<<@ zOa^;|AWtNyly{=*bZ+nCiK7Vfk?k$Wk-YhA?&Psvl>%#EdwX){bgGp5u-fSlWcfa3 z$;NX(LXPCN5K{1ZX znAME;m{)p=|eI=#DJex-_1{)X)pISpIsC1%PoM}9T&40cAIY)#sFV!^s3Jx~7w#Ndv9r=S=a^$|!PPU+QaOxKbtx~J zLi`f0-LzvLG*Y0%yb7~(lw`#93ZgOb|9F3_9!YauW~s__MW>dIsd?mn5B|2L(MiN3 z3Pr)a+FWGUc^a*adewM3+0=MK7dp#weWzW)d1UMd@O)yVntA1%$WLwAYcnk-23Rf_ z;D2}rWFKQo3&wD)qebx3J@px=UA3M{{xBCk z7H`9R8o~TTk8T#s@j8Kap42qUJVuqZp5#VvVXY@rKzHt}mt#?q!)Bq4*-?Ls51yR$ zG7rFPEH5D}zu2Rj#PVNr)3hCRpabE*T_WEF!U!7W!D>)!cL#GB#PcQCiwCU!m(TGgR#SsX3oWE5QX0nCQ0{P?Cx`b7np z#rMVy|0yB5vnTzT2)4uQ1gmY|MA;-7@U6dQ zRv%o2j1a4a#zux$AqtyN&w|`0ad3M}blb5l^kcS&%4MWt|B#hSllOr%WM06dPPVMq zL3*Ob8{eXJWiJSzED^LZ(qO+o5wCL)F)TRj&3rncX{SdwxtVux(=z*%GNTHmto^$&;S7Em9Xtjk>Ug zH>$!>$?;A>@mM$M2k|}DO)5Ius$vnV3VQ)jH4)betmpcq3HfOcc9KridmO~`RS!Cy zTe^Axq?UT8Ns0O@|b*hGA)*97-Hbx#C zhYz0m{f{2-+MD()Leu|xbdzZMZ*H2Z8dirg(<5Y^bi!C(B#_Kgh&v_N#KABRzhj}m zqL9vLi=sUZD$Ze4*pmDlkAX4n8S%55@gL=ZYAN?=DdWA#{9>c}Y(n*!+|5fqdZPOM zTgU5l+^XVca~xMYb+`r^ed7(j6vaL44TT!zQm`;C-oEG^dsAOyY(G!1X-k{q#!xd)t)i@Db` zM^5cxZn9%6Cf<@4gmR1)UCbdL_}1ZKdBkaxeI6jod!LblDD!= z-bWF6KjqO)T4nce(^RX><1+3S7)e6xzKr`78l>^6g!@4c0BpD~B)EU#(JdR?sh4r5 ztkY1tF5?#BvnR|aqiK?=CO)=dZX=lIdvvp4cFScIjxMGBM?EkpFXQB|To4tCq>kLAaBpv%Vc3c~Uhk8Tpno49G}j#?G)Ovx)T@>l8jN8$6*b-j$=>g>dh zM$GguQtT5CVg?i3M}yoWS=z`m3=Ph{s}pm9C2F-K=1%4`8_Vs4e?;Pp&NcB_Hq zMXG~m6V}Uzyx>_tqAgmcl0G0{|5+#ky5boVx8S07PU!L_n8Se$&bc`5*2|^F1f?W< zF*-I+HjcdYotw1#ZvE=)^!wbT=%*tYEq{L?s8K3aN0j5Y{ONb!jL^>+<*4Zw%z+_j zmqkKcL=xiJ4lsh}SyGaggh-x2YP$_Q>SS+hisSAZn?>ujX)p_IjAUMn51!lZR5Z)iO;uN0qRurs66q-Ux{B*SO2Sob*R9yz)s@>VQc%=|?t%!K+8|nN zt@gm5tzGhjlzhvPa>TUD`p&3yx{|?*kHNkk-($6l=-gWEGT=cbY47(sNHas)MWQXL zUFgHKX_qzG>G#)@qTdv>%isCa?-esbKc{xl^b2YiLAzwxZ%c>{k`UV*V8mz_AvTj| zXo+?~U0LU0=!;mZva#`w2IL58INvKyL^(HrfQc}`*(I9$n7hS z(ACb!sCga+$jWs*yuufyVBlWU3MF$ttwVm{fh8OC)dc#_S`PY=(;;i4GU)gXe5{K- zp)A4oSREodw^oN-fC)WKrSo|0_Th1cbcjS-REN-qY11L=veWOHNzrc#I^+g_`dvRG z^mFPEO~0TH5wuH|@V12LBndIg0Y;1t5yCNfhL-4%a&gS5Ltc!vDjkA0Mu)uApKO2Q z0k4gwHH4-YdUTUIhu#cSn zaO9Ew7=sso2KfrU$LbH!xwZP^2OeaSXOQnWNHatFL!vFJKj_1>=?}*{-Zc81xN$P{ zn}Ys00~31c|0QS|c9pcAeop;7=*GAKNLeteA-K74wlAEULkMU?c@Bk9Bl9y}S?%Hmopr9AO zboxM0u}WOA_o`j{ui2)a8I3nY`H=Sg`@6U0Zd%u_@)Pu-8fia$Lo}OwzQ3+>&6+|W zkm>5yO>gx02-BhR0P?9T4|#K*UY&|Dnk$!U`i*lx+m;R!|O}c&siGogKP}rzM_uc@RUAlpGX~h9Yn2)mU(zAovFOcX(J`tpsKpO+QDVPl7 zGmQ6Xx+Zc&dDDEs*tO7|ROLJP9?N*5vxD)bphSPc2(Y;+Oa;k!KjpRCO;sx1TC}h;YQ-aPddN~W5D9WJuC39#%QhDC@C$OsgGvZ?H8vTuy+e!E=N-v zm@UVJViFH5LGWa^ct9;`jfm1-l++3jw);wr#=!V6@@&CC30%Z=%erFw_wFMz<|g&B zN++u4bX>(;`nWc8QYg}q}6$$=^;BacM$ja(70$7Qv-etIlE zRvXO^BU9IKZlpBQOD$wP3lFNNgPXTe92CKoD|5nXq9qp!NPj;p%ayIFpn@5meT^X1 zelbV&!Dxp5(tyenCN;suYu0ZH8d8s+KKvMCW-pV~HmsJo(Wm%lu?x9o#2Y*qMVeeR zIh$OSnInx^s07`5vAoztIR*HsVWOI`Mm&I)5l0&6GZQ$%j4W5#Dr=LN%vhU_*dDpO zSZnizfHYR=i_Q+E&(p?OoBErwHu(oFcy9MVtyKEAF+WYW(x>G`tW8Z-%i0vgGrA=l z#uE*Nyp*()5}=mmJI7=%~eyts6 zB)IyMOueZES5J0~U~sh@VqOP(7Z@ZcaBTrD?MtAeY+Y0|ikE!fm=aDHN-tLs}v-wqR#dUw+<$ z+(JcUQK}B2+8-sPt(OK+u89-RQavX6feN3Ep}LcMT$36}CJjU(C&W3xz8=dBma0_c z30Vx3Q_)IDQyj*l&Bj>02A|?+qcq-Ms~4;NwGop{Dd?qyA9JK=sstAb?3G&Ffm(R(Q@aXuv!3a(FN`xC@s5e$J0YUk=$Nd9ZkqmuY0BPU0} z!aC~x!2E|P7@(lpjnCxWXh->PoFsvj!M=79>|s{)0$!1AO@`HrwCQQ_e2_U_@Rk|G z1s19`J6KOGdST?78SU>Tv82cGd3IWOTHELX%4D5k%g1h#kAKBzOU7^}`PfuBg(?0% zc$N;jQ9r~;Y?&LCrqU;>4UTAgnlEU{hux@O#P`?}mFVm^QSr1fCo26-ov8Q+O|9=R z0+P`#PgLLJwcAZw??$ENMNU)_ZK0>cf_Pat?P}t*_dDPS?`4bAl4p?i&*OO1Nrl@l zXm96`z*3{9Ty@5@oVHn8%JWTABMX+|yQiW22sF)RDDNPoo$Ap|BJE^unr6N@T9dLv}wl;C{43^|eZYpn##K|wd zsq4n*mMM_EZq!|a@D7v@vrk$eHI$ghxBx56pO=G(`-m=i#NfPX%_#P|4L}y!q zEv7_gktIa!xcGLUhWn$|Nnc`w*`h1F<)xJSJi})<^_6m$W`7N9;hmh{GS#g_GZM|l zv37(VtWcmuQO;M#sf0_LpL^g*-c;!YK4z*rN>ho3%$CoMD-tL%2I2Ij;7#x=^0{^v zO!AtO|C{eUJLaoTJ^iIdU%fm^Imf73>EK zQSds_$S3pI_MQuG&u;--G@Z{)D;A=jBA`5iv<%Xs`Q#(F9Hw)K2Oi;Aj^c-fOvNDL z3@tY^Et82Nd1C_;1!8z`hPIGdB~6`;G0X17~quytP(2Z#K-M<@kfd_t%L{ zFRa{2f33Kdx%+sJx$cd23y3v~y*6B48m=9pu#h6EomKNy_5hP7x^y!h*g;%D@{kZk{H?-5%kM*c z$mU$wkefgMDf4r=<;=j#H|Lg@t8iwQ`*8`(r{m=-_17SKFW-!x(TyY+WO2C;CqCVm z5IU)J9FIZro+bGpuv&#|FT+q=KK~ZAYaU8V)?}-vkgYifQ1_K4p5I(BR301}#{b58 ziuJ(;vTqEXKlI4T>p->2$M6TS`2_wpZ2nlAz-F(sHCK3qj>%xG$|jsMN-7|rt$C4G z1exsIq^LFuftx4=!{=gy$+jG)sz^N_h^ed!o_A;+;+J49&*lY*pp>fpqcwP40wHj+ zgZqXk7w8ZucqJEn7s&%F`t5eF=(i>I0ZY#zuhio{Yc6?Z3YQS=WlY;`XlgI9KOEE6 z{3Pu&`{GS4iFO=LX#He8k+TZ9@<h4S_He+}4pn*o_d!Hp>z9keT73Q)L8OWP1`nd!5`BO+ zykY>KsLa!BzT6{(v=XQ>U-bgt>#;z|mG6ph<-ssl9{4wT;b^Z(T_A%m=_w&Nvsds5 z)y28IUOPnW0q!HWg8G8H+R|9AyNZ}fTn-Bt2ggGqh;pa~r)+!s?p=HLwYO7=j`sE| zx6^-8WF>KaNACI|sFyKp5z*YVmU}}C$QQXHC{tZdlXFYqV7D-qx`dAI`UWG)%77 z8rqcmJF2CzRdik4SS5bQ!!c8ZR>t4;QogfiHD7~-MnN$keSh2>qi3W&(qnkzH#! zAq54$p2TWaD?Q=67a~iv+#-uzTSeh+QFI%b(PnS)J}PVaEsAbJGoTBD$<$opv4k)S zwHSYAwI@geg~v1E+ZgcMJb;nMOO4N^9XY4GF{4VPTA9H6XF?ol*yBZ?TqWi8-VET8 z*ZYiw#!0u6Dz*3JG|XMiZOZL96_FZD%O?@8Bc7XAwn%IXEG?ycey86!(L6(oe299e zSEIff0W(^*>L7&xcWJ1Vw4J%mJq~gcm8*din5jdrshkQUddIOqw`QQ=BVNHO=B%O) z9>L>-ZS{#<91B-KJlnu+SL4I+8()Z(NkJ4P^0T8=RjangTBTOV&# z;dBefN#Ef?GpQzSXT)Xk<%|<~|JI|Myg{Adrm0~N9&yqi#7GiicbxP;qd}T8Tf+T* z4*+bozKP&|k4Lv`aHqyef73wiij%(IALf7eSiBAMA%gj99^EXMlO?LWEq{r}s4`Ak zZmL$rNdx1;q1O{rjcvgtn$PCxmd3(36`wu1>?AZzQsd-Iu`zx#VSJuPH;M7%xoPU| zIuOe6iBKV_V-OfTu(`00Z@J`!73-;h`r5+UM+FtIb5%UBxm4BLf($x6b_RpFm5jN{ zC*Ud984E6*+5*^~sN8gl8L_efvq&*1&T5SHPr$V}){o1; z0k{^=hQtkc>&7uND7KEtV2==N%Ek$bAx>0&M5E5bSP1BbD{G>1Il4CI;s<&KInkU& z(=-vCKY#!?JeMqwO+1f3A1cBFyuFGHCw@awP9o zn>%@|6)CV1Q)lDOt$X1zm>M4#XTWS4%+Piat3{TbY38{nVU}z>*Wh*89FvXbYAJL` z;JI7Sbvk*D-;)#OBRnU_k%i}Yto{^OBRrQpgVaH@c+^S7s(L)Oc`HU&=881)>7vQ7 z=3QvusYu@90l&RfpF-RIjUL_PR(%~eO;sc>3W<66?&)aLz@u@MA_h@l?4=j}QxO0r z?r13YL;OY$whW%0Z1p2Xit3-sr@k;lnNKriY@u;YoPe6lx*clkE0|NV%ZjMlikZYL z`D?u7smPNrF$dTqc z1h-X$(~@VfR9A9S8Eh<$Pw`D%!N#MG)0qh~4jRDoMI^Cuiit>K>(=}DwTF<_yL3rX$RsFn_naJnH~tW z#rCbVnG|wEzSjennAABTxPeWRJcn@p2g`VsOk?u9 zTpD$_)<>;I>E$rp!!{11#mGuLD+W}6a+r$e;(i)YVHB|n!_1itNE&Ri+@ZR-Hpi#u z%M3e59*xGfc`-AK9oV|S#SS>e-<^H50D-cQAgZ=Bl6U7(rLP9AhS2_1^@@(zFk|>hJepOlc7PJ0s3Eh{A@1 zP2Lw0dB5h-O`ZY2%uQ3zfF7>;KVT$v_T6Rz?9G<`BN}*~egDS;02}Tm!TmdrZrR{Y zb=9Bs7!9?{ReugXd%}DMnr3qx|24t9)T5gPbF#3Iw&oW-FezR2a#OX+RgZWQ&QjMd z&dc}B3b=W98f2r=aDU10)^2}1U*mx=o45Xk@Z9auP2%|qZkoEM_R0*w?Oj1*Ik%N^ z^g+K%^Dd;dVcGPKl>C6!%#(+fIt?rl6}YfhY*NYW);R zs#=C>O~b4R{CbpPm1IfaU1RvvXy_fx1}PicNj&NM0~U8e2SIo!&~g$4NJ zX`{|Z(WxH%+yjK0@BKuxZ4B@_j?4zJu)aF$v)~iJSJS6bg(0 zBtX*v5Aq&M#z*WC-pJgp-U>u4XLW;%MP({ZjH95MM5?1H9nwr7z5Wz#qg330p zd8`XlfDGJsc<%4B63lCJ$O&4whnQ4TOpoDb;W`Rs(dmP4d$?(;5`T8IM3M|gjNaEA8bZDespw;$J1Au>doYUiz9C$Stt$7g>aQ0E#_}Vj!=?I@@nCXz zsE9wS@_Yf7=TiiyZO^Y3)sEovfXC$qxCE#U%}T3=Q0I-I8H?2-&p22UE|bnp=2@XF zfnR&{gRP9Zt6N7PDN*R?d_or=om)A0(%C^Bnp-&^j>~(3$K}>AT<~Z;8%PQ&{^tG= z!?lLRL&xx|&2ig0_|khS?8rR!2`;Vk;;}pJ$b7jPI)1CPX@NIaVpKk8TcaY|B=2)E zYR-&G0p)hfz^IX<_vwTx`{*sP2R$BiRMD@9-?bc7mrQActBtZOPD%vW{vyHl@lAc0 zIKDSn@?480qY^2Rzm|viE80EmvpJ1@!=0PJ9MWN!@62}w=)UX**#eOTqDhW?ik&x_ zcpUT6Zc73cgGUKL#AH*+R$sS~`Z|_|@3l?L7-LLW8ObwP##nMw89F7dv*Me&LZ{yD zxGhTzol-F^Ds-x1CHwhPN|wQ}YUS9emZn;ay4E{7k3hP`ryM~<7}L5T#L?95PR>ra zJL%{&wH z@4{+VrpEg$H+?u6BY7c2KFnaAPZpse9++%0#{XklCKE-huz@Zih>=mvlV@#72 zjSX(6$np5;R3f#2^=>anhle|-i)NVP^lhoJ^b16ok)B<;Aj3avjlcQw^eaUfJHHW4 z?b!J{!m;xQK76bw_cX@APHGh@Nl;8;E{c#cx#POHm}*YIfkXu z)j^y$U0PDOhv?%DAG)C+90L>=uG+Ih%^VtU>T8UR4-9k+mdA$1dppWC>2V|1i1e}r zd-H6;JN=B!IaCEMwm>cKr<05JNRrZ+_E#~VPVv&{WXrTSro5wuJefqEnP@%pfAh6pJ7 zrHBwG*R3h8-H^6?Kt7tA2@17186Q6*xHh8yQ_Mhi5Y`1=q)@DRUNGmmlWbx3+-hW(6*IpAe;3>sUge>A-Yxoq_EKlfdpAW?3_a3qPqGtzbMW z3}cY-%^bg-#5#jFHDZnC%$c4O@r@*ml>iLC%l&sL^g=>|MOzW4u+cHbQ6LRN(}quOIE< z*-6?8=zz;{298J|JY1n@8G2pv&m?R^D|`si*leE#Tgmom*%@#X*v6azFP<1We&^Uk zkz78vo&bwsNrmPM8cgBqoaOi)dj=Gp9cMtEHhO&{@^R3Tq|3(qppBkRMnJOBBhP?& zUc242^=CkWB~k}fqHSUGqkj&2a@yFBeE~W@49K39{SHiu{ifi881!eqz8PUZrwc-} z-&`p}BNY4`Qt;^%hfCZdR_($?QTc1ed!`3Mq*bR^b%CGo)_a~hW;^h`IYH+)^IgNk ztj)BdKynI7XMuVOT)2pG9q-wG-Tv-9+qcQ1;KHoE^x|*#K#+Y)d1q+xGm-S*EzGP_ zOL{QbF&2})S$;0-8#%^IBt7^tK$dzYob=$U9yF6m=3Yjetz^Q7aGSh$6L~-H(M`rD ze}IEWu|_ zm=~dGlGl*<*oOI?1oJ5#-7J`sPd743?2{gtlt~ZdrfOBv1C&AMCyRVeb_V`mVNgEb zG&M@&Du0}B^FW@B^LG)>yF9u{oL|aKQ}@@3X#PgHN`enLd&r#?bnz^Tb}=~UXB^nh z7bs%ah*}XxKbrA|dAwvnBo#4D&F+=p!CI^*ne}W$znc(Uc&4%b(j^rzE`CQ9B zv;5h=JAVm?_!s}~{IA8XFn24Hes@l{AZtv}1K)y7$9r+>`sB5=eEa%DLWJZR9Y#*j zkJ*gr_s~9n0b?h_K2Me;Qi(m9N1fCI@}$%|pTn@y&f1A8_~-bX0; zam!Kiu#Sjk(Se(@^@&3S>FI&h-0ctRh{`M=A?OaBd~Oob5o>2!M=Yb|+d4u*Wa|j} zF`JHfKkf5l7(2EqNT2g$<28MV+=U8g0T#s`Vt2=kExpdd%`mb7`7$LdJ| zlAI#hc=uuDKI6*$H6Y?&`~mRQVpp{20Jv_ZmHXYad|SCoh-~FfKW0504_tCrILWOC2x)J72a-jnlhq|#5$6B$VTk1xOAhGO1CL zu2od7jY$oR=hAKx7^FR-15Zuff9E4c2n>QvP7+Fz2D9&66)lUds0# zmQPwnnU`dcX)x)e=$=D&W<}ojsynfw$UP~#=R`anb&n*s*i3NQszQQls|xxto2vL% z+Jws)ZOIbVl6T45eCn#=bON%=6Ku9(l;GNmk$%jk7(YUr`pt~G44XPxY)oA-E{-Zj zr%rqj3zs_a)UZx8qVgAvm1OXwI{c{zCTywrQ9|H!UKS)Ml8x4 z%YC)#7>Xd%!)v-_lR2Eb%(I^yIVb7i4}BKqGosjc*N}L;(V&V7_)dwcDAbSw3t-olkkiX+o66TfRwV}!bpB< z_poM(D;&to=2X9caU4&M1gH91bj|8iKiTA{#!leFp7G1cuAc;9=1RGeN|Ipki=afZR<+d*llO!a&;q_sKef|* z*chi|BKjRIqE{xFszXWaSPRcYFgzVpoT@SYJR0LDGRB|EoM{RuH;+PNe8VJ-@fQ

1=MS2aEwzg>Kx<}_E4E%y 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/proximity-flow.doctree b/rp-vp-kid/en/.doctrees/proximity-flow.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6b69952d5921272b668865912da04e8848190207 GIT binary patch literal 89138 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 ?=&7%%CA%}g7TeCuGS&c_i?mTZ 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 O#O~`=@~H>a)&CDycaK8= literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/pseudonyms.doctree b/rp-vp-kid/en/.doctrees/pseudonyms.doctree new file mode 100644 index 0000000000000000000000000000000000000000..b3b239c798650add2420c82750b8f99853fd1d98 GIT binary patch literal 30353 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 W?{M)yYAw-s0{(e=`qB=L7XKeF>I0bo literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/relying-party-solution.doctree b/rp-vp-kid/en/.doctrees/relying-party-solution.doctree new file mode 100644 index 0000000000000000000000000000000000000000..824d2fd66a43c811c1459d39456c45c5b8a67730 GIT binary patch literal 283287 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

This page contains the following errors:

Below is a rendering of the page up to the first error.

\ No newline at end of file diff --git a/rp-vp-kid/en/_images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg b/rp-vp-kid/en/_images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg new file mode 100644 index 000000000..d4bacd980 --- /dev/null +++ b/rp-vp-kid/en/_images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg @@ -0,0 +1,2 @@ + +User's smartphoneUserUserBrowserBrowserWallet InstanceWallet InstancePID ProviderPID Provider1obtain your PID2yesobtain the list of the Trusted PID Providers3confirm the selection of PID Provider4okCheck PID Provider is part of the Federation and obtain its metadata5create PKCE code verifier and WIA-PoP6PAR Request (response_type,client_id,code_challenge,code_challenge_method,request,client_assertion_type,client_assertion=WIA~WIA-PoP)Check Wallet Provider is part of the FederationCheck signature of the Wallet Attestation and its validity7PAR Response (request_uri, expires_in)8Authorization Request (client_id, request_uri)9Authorization Request (client_id, request_uri)user authentication with eIDAS High and consent10Authorization Response (code, state, iss)11Authorization Response (code, state, iss)12generate DPoP key13generate DPoP proof and WIA-PoP for PID Provider token endpoint14Token Request with DPoP proof (client_id,grant_type,code,code_verifier,client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation,client_assertion=WIA~WIA-PoP,redirect_uri)15Token Response (access_token, token_type, expires_in, c_nonce, c_nonce_expires_in)16create proof of possession (c_nonce)17create DPoP proof for PID Provider credential endpoint18Credential Request with DPoP access_token and DPoP proof (credential_definition, format, proof)Register all the credential-relatedinformation for verification/revocation19Credential Response (format, credential, c_nonce, c_nonce_expires_in)20PID validity and status check21store credential \ No newline at end of file diff --git a/rp-vp-kid/en/_images/Low-Level-Flow-Revocation-Attestation.svg b/rp-vp-kid/en/_images/Low-Level-Flow-Revocation-Attestation.svg new file mode 100644 index 000000000..e77ec7936 --- /dev/null +++ b/rp-vp-kid/en/_images/Low-Level-Flow-Revocation-Attestation.svg @@ -0,0 +1 @@ +Wallet InstanceWallet InstanceIssuerIssuerAuthentic SourceAuthentic Source1POST /status request(credential_pop=$CredentialPoPJWT)2Validate Credential PoP JWTThe Issuer obtains from the Authentic Sourcethe updated attributes and the validity statusof them through an out-of-band mechanism,(e.g. though the PDND APIs system)3Check for attributesupdate and validity4Create StatusAttestation JWT5Response with Status Attestation JWT \ No newline at end of file diff --git a/rp-vp-kid/en/_images/Low-Level-Flow-Revocation.svg b/rp-vp-kid/en/_images/Low-Level-Flow-Revocation.svg new file mode 100644 index 000000000..ef2f16fce --- /dev/null +++ b/rp-vp-kid/en/_images/Low-Level-Flow-Revocation.svg @@ -0,0 +1 @@ +Wallet InstanceWallet InstanceIssuerIssuer1POST /revoke request(credential_pop=$CredentialPoPJWT)2Validate the CredentialProof of Possession3Revoke the Credential4Response Ok \ No newline at end of file diff --git a/rp-vp-kid/en/_images/cross_device_auth_seq_diagram.svg b/rp-vp-kid/en/_images/cross_device_auth_seq_diagram.svg new file mode 100644 index 000000000..b685c1684 --- /dev/null +++ b/rp-vp-kid/en/_images/cross_device_auth_seq_diagram.svg @@ -0,0 +1 @@ +User's DevicesUserUserWallet InstanceWallet Instanceuser-agentuser-agentRelying PartyRelying Party1Web Service navigation2Request Protected ResourcePresentation Phase3Create astatevaluebound to user-agent cookie4Create request_uri resource5QRCode OR HTTP Redirect (302) withclient_id, request_uri, state, [request_uri_method] [client_id_scheme]Cross Device only6Show the QRCode page7Open the Wallet Instance app, local authentication8Scan QR Code9Extract the parameters from the QR Code10evaluates trust with the client_id [client_id_scheme]alt[if request_uri_method is set with POST]11provides Wallet metadata to the request_uri endpoint12evaluates the Wallet tecnical capabilities[if request_uri_method is set with GET or not present]13requests the signed request object from the request_uri endpoint14signed request object15evaluates Relying Party Metadata and policies16Verify signature of the signed Request Object17Validate requested VP(s)18Request for consent19Confirmed20POST Authorization Responsewith vp_token, state, presentation_submission21Evaluate the Verifiable Presentation token22Validate the Wallet Attestation.Attest the Wallet Provideris part of the Federationand the Wallet Instance is not revoked.23Attest Credential Issuer Trustand Validate JWT Signature24Process the credentialProcess the credential:Check Holder Key Binding and Proof of Possession:- using the public key bound in the Credential to verify the VP token. Then extract the disclosed attributes: check if all the required data are available25Update the User session (cookie updated)26HTTP/1.1 200 OK{"redirect_uri": https url with response_code }Same Device only27Use the redirect_uriCross Device only28QRCode JS: Check authentication state (HTTP request with cookie)29Authentication state given with HTTP codes, untill expired or successful \ No newline at end of file diff --git a/rp-vp-kid/en/_images/static_view_wallet_instance_attestation.svg b/rp-vp-kid/en/_images/static_view_wallet_instance_attestation.svg new file mode 100644 index 000000000..2f18451e1 --- /dev/null +++ b/rp-vp-kid/en/_images/static_view_wallet_instance_attestation.svg @@ -0,0 +1 @@ +UserWallet ProviderDevice OEMWallet SolutionWallet InstanceWallet BackendDevice Integrity ServiceUseUseIs part ofProvides Wallet Attestationcontrol / activateIs an instance ofProvideProvide \ No newline at end of file diff --git a/rp-vp-kid/en/_images/trust-roles.svg b/rp-vp-kid/en/_images/trust-roles.svg new file mode 100644 index 000000000..a1e8dd823 --- /dev/null +++ b/rp-vp-kid/en/_images/trust-roles.svg @@ -0,0 +1,426 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/en/_images/verifier_qr_code.svg b/rp-vp-kid/en/_images/verifier_qr_code.svg new file mode 100644 index 000000000..437ad39ca --- /dev/null +++ b/rp-vp-kid/en/_images/verifier_qr_code.svg @@ -0,0 +1,2 @@ + + diff --git a/rp-vp-kid/en/_images/wallet_instance_acquisition.svg b/rp-vp-kid/en/_images/wallet_instance_acquisition.svg new file mode 100644 index 000000000..040a35eb4 --- /dev/null +++ b/rp-vp-kid/en/_images/wallet_instance_acquisition.svg @@ -0,0 +1 @@ +UserWallet InstanceDevice Integrity ServiceWallet Provider backend1Request a new operation thatrequires aWallet Attestation2Check ifCryptographic Hardware Keysis available3Generates an ephemeral key pairJWKCheck Wallet Provider is part of the Federation and obtain its metadata4Getchallenge5Generate one time usechallenge6challenge7Generateclient_data_hashas SHA256(challenge, public_jwk)8GenerateCryptographic Hardware KeyPoPhardware_signature= sign(client_data_hash, wallet_hardware_key_tag)9generateIntegrityAssertion(client_data_hash)10integrity_assertion11Generate Wallet Attestation Request withintegrity_assertion,hardware_signature,challenge,Cryptographic Hardware Key Tag,public_jwksigned with ephemeralJWK12Send Wallet Attestation RequestCheck if Wallet Instance is initialized and validusing Cryptographic Hardware Key Tag andhardware_signature13Validatechallenge14Validateintegrity_assertion15Validatehardware_signature16ValidateJWKPoP17CreateWallet Attestation18Wallet Attestation \ No newline at end of file diff --git a/rp-vp-kid/en/_images/wallet_instance_initialization.svg b/rp-vp-kid/en/_images/wallet_instance_initialization.svg new file mode 100644 index 000000000..5f5237a06 --- /dev/null +++ b/rp-vp-kid/en/_images/wallet_instance_initialization.svg @@ -0,0 +1 @@ +UserWallet InstanceDevice Integrity ServiceWallet Provider backendonly upon first installation of the app1starts the app (first use)2Check if Device Integrity Service is availableCheck Wallet Provider is part of the Federation and obtain its metadata3Getchallenge4Generate one time usechallenge5challenge6GenerateCryptographic Hardware Keyspair and storeCryptographic Hardware Key Tag7attestKey(challenge, Cryptographic Hardware Key Tag)8Key Attestationsigned by OEM9Sendchallenge,Key AttestationandCryptographic Hardware Key Tag10Validatechallenge11ValidateKey Attestation12StoreCryptographic Hardware Keys13OK14Wallet Instance Initialized \ No newline at end of file diff --git a/rp-vp-kid/en/_images/wallet_instance_lifecycle.svg b/rp-vp-kid/en/_images/wallet_instance_lifecycle.svg new file mode 100644 index 000000000..386473b45 --- /dev/null +++ b/rp-vp-kid/en/_images/wallet_instance_lifecycle.svg @@ -0,0 +1 @@ +InstalledOperationalValidDeactivatedinstallverifyvalidateinvalidaterevokerevokeuninstalluninstalluninstalluninstall \ No newline at end of file diff --git a/rp-vp-kid/en/_sources/algorithms.rst.txt b/rp-vp-kid/en/_sources/algorithms.rst.txt new file mode 100644 index 000000000..a1698984a --- /dev/null +++ b/rp-vp-kid/en/_sources/algorithms.rst.txt @@ -0,0 +1,130 @@ +.. include:: ../common/common_definitions.rst + +.. _supported_algs: + +Cryptographic algorithms +++++++++++++++++++++++++ + +The following algorithms MUST be supported: + +.. list-table:: + :widths: 20 20 20 20 + :header-rows: 1 + + * - **Algorithm `alg` parameter value** + - **Description** + - **Operations** + - **References** + * - **ES256** + - Elliptic Curve Digital Signature Algorithm (ECDSA) using one of the enabled curves listed in the section below and SHA256. + - Signature + - :rfc:`7518`, `[SOG-IS] `_, `[ETSI] `_ . + * - **ES384** + - Elliptic Curve Digital Signature Algorithm (ECDSA) using one of the enabled curves listed in the section below and SHA384. + - Signature + - :rfc:`7518`, `[SOG-IS] `_, `[ETSI] `_ . + * - **ES512** + - Elliptic Curve Digital Signature Algorithm (ECDSA) using one of the enabled curves listed in the section below and SHA521. + - Signature + - :rfc:`7518`, `[SOG-IS] `_, `[ETSI] `_ . + * - **RSA-OAEP-256** + - RSA Encryption Scheme with Optimal Asymmetric Encryption Padding (OAEP) using SHA256 hash function and the MGF1 with SHA-256 mask generation function. + - Key Encryption + - :rfc:`7516`, :rfc:`7518`. + * - **A128CBC-HS256** + - AES encryption in Cipher Block Chaining mode with 128-bit Initial Vector value, plus HMAC authentication using SHA-256 and truncating HMAC to 128 bits. + - Content Encryption + - :rfc:`7516`, :rfc:`7518`. + * - **A256CBC-HS512** + - AES encryption in Cipher Block Chaining mode with 256-bit Initial Vector value, plus HMAC authentication using SHA-512 and truncating HMAC to 256 bits. + - Content Encryption + - :rfc:`7516`, :rfc:`7518`. + +The following Elliptic Curves MUST be supported for the Elliptic Curve Digital Signature Algorithm: + +.. list-table:: + :widths: 20 20 20 + :header-rows: 1 + + * - **Curve Family** + - **Short Curve Name** + - **References** + * - **Brainpool** + - brainpoolP256r1, brainpoolP384r1, brainpoolP512r1. + - :rfc:`5639`, `[ETSI] `_ . + * - **NIST** + - P-256, P-384, P-521 + - `[ETSI] `_, `[FIPS-186-4] `_, `[ISO/IEC 14888-3] `_. + +The following algorithms are RECOMMENDED to be supported: + +.. list-table:: + :widths: 20 20 20 20 + :header-rows: 1 + + * - **Algorithm `alg` parameter value** + - **Description** + - **Operations** + - **References** + * - **PS256** + - RSASSA (RSA with Signature Scheme Appendix) with PSS ( Probabilistic Signature Scheme) padding using SHA256 hash function and MGF1 mask generation function with SHA-256. + - Signature + - :rfc:`7518`, `[SOG-IS] `_. + * - **PS384** + - RSASSA (RSA with Signature Scheme Appendix) with PSS ( Probabilistic Signature Scheme) padding using SHA384 hash function and MGF1 mask generation function with SHA-384. + - Signature + - :rfc:`7518`, `[SOG-IS] `_. + * - **PS512** + - RSASSA (RSA with Signature Scheme Appendix) with PSS ( Probabilistic Signature Scheme) padding using SHA512 hash function and MGF1 mask generation function with SHA-512. + - Signature + - :rfc:`7518`, `[SOG-IS] `_. + * - **ECDH-ES** + - Elliptic Curve Diffie-Hellman (ECDH) Ephemeral Static key agreement using Concat Key Derivation Function (KDF). + - Key Encryption + - :rfc:`7518`. + * - **ECDH-ES+A128KW** + - ECDH-ES using Concat KDF and content encryption key (CEK) wrapped using AES with a key length of 128 (A128KW). + - Key Encryption + - :rfc:`7518`. + * - **ECDH-ES+A256KW** + - ECDH-ES using Concat KDF and content encryption key (CEK) wrapped using AES with a key length of 256 (A256KW). + - Key Encryption + - :rfc:`7518`. + +The following algorithms MUST NOT be supported: + +.. list-table:: + :widths: 20 20 20 20 + :header-rows: 1 + + * - **Algorithm `alg` parameter value** + - **Description** + - **Operations** + - **References** + * - **none** + - - + - Signature + - :rfc:`7518`. + * - **RSA_1_5** + - RSAES with PKCS1-v1_5 padding scheme. Use of this algorithm is generally not recommended. + - Key Encryption + - :rfc:`7516`, `[Security Vulnerability] `_, `[SOG-IS] `_. + * - **RSA-OAEP** + - RSA Encryption Scheme with Optimal Asymmetric Encryption Padding (OAEP) using default parameters. + - Key Encryption + - :rfc:`7518`, `[SOG-IS] `_. + * - **HS256** + - HMAC using SHA256. + - Signature + - :rfc:`7518`. + * - **HS384** + - HMAC using SHA384. + - Signature + - :rfc:`7518`. + * - **HS512** + - HMAC using SHA512 + - Signature + - :rfc:`7518`. + + + diff --git a/rp-vp-kid/en/_sources/backup-restore.rst.txt b/rp-vp-kid/en/_sources/backup-restore.rst.txt new file mode 100644 index 000000000..186042348 --- /dev/null +++ b/rp-vp-kid/en/_sources/backup-restore.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _backup-restore.rst: + +backup-restore.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/en/_sources/contribute.rst.txt b/rp-vp-kid/en/_sources/contribute.rst.txt new file mode 100644 index 000000000..921478355 --- /dev/null +++ b/rp-vp-kid/en/_sources/contribute.rst.txt @@ -0,0 +1,63 @@ +.. include:: ../common/common_definitions.rst + +.. _contribute.rst: + +How to contribute ++++++++++++++++++++++++++++ + +The IT Wallet project, including this document, follows an **open development process**. This approach ensures the development process is accessible to all, inviting all interested parties to participate. + +Consequently, stakeholders, national and international community members are not only encouraged but also heartily welcomed to contribute to the refinement of these technical rules. + +Below are several methods available for contributing to this project: + +- **GitHub issues**. By opening an issue, you can seek clarification, propose enhancements, or report editorial typos. If you are working on an issue, we encourage you to open a draft pull request and link it. +- **Pull requests**. Pull requests represent active contributions to the project, typically, but not always following issue-based discussions. Once a pull request is initiated, it facilitates discussion and review of the proposed changes before they are merged into the main branch (`versione-corrente`). +- **Developers Italia Slack channel**. Slack is a messaging application designed for businesses, connecting people to the information they need. *Developers Italia* is an open community based on contributions and participation from public administrations, developers, technicians, students, and citizens. *Developers Italia* has initiated a Slack channel that [everyone can join for free](https://slack.developers.italia.it/), where you can learn about all their activities and partake in discussions. + + +Acknowledgements +---------------- + +We would like to thank the following individuals for their comments, +concerns, ideas, contributions, some of which substantial, to this +implementation profile and to the initial set of implementations. + +- Alen Horvat +- Amir Sharif +- Andrea Prosseda +- Emanuele De Cupis +- Emiliano Vernini +- Francesco Grauso +- Francesco Marino +- Francesco Ventola +- Giada Sciarretta +- Giuseppe De Marco +- Klaas Wierenga +- Kristina Yasuda +- Leif Johansson +- Lorenzo Cerini +- Mart Aarma +- Marta Sciunnach +- Michele Silletti +- Nicola Saitto +- Niels van Dijk +- Oliver Terbu +- Paul Bastien +- Pasquale De Rose +- Peter Altmann +- Riccardo Iaconelli +- Roland Hedberg +- Salvatore Laiso +- Salvatore Manfredi +- Stefano Alifuoco +- Takahiko Kawasaki +- Torsten Lodderstedt +- Vladimir Duzhinov + + +If anyone has been forgotten, please accept our apologies with the +request to propose the modification of this page via a [Pull Request](https://github.com/italia/eudi-wallet-it-docs) +with a brief description of the contribution offered, during which +event or channel, and during which period. We will then have the opportunity +to apologize again and make amends as soon as possible, including you in the list. diff --git a/rp-vp-kid/en/_sources/defined-terms.rst.txt b/rp-vp-kid/en/_sources/defined-terms.rst.txt new file mode 100644 index 000000000..66f729518 --- /dev/null +++ b/rp-vp-kid/en/_sources/defined-terms.rst.txt @@ -0,0 +1,95 @@ +.. include:: ../common/common_definitions.rst + +.. _defined-terms.rst: + + +Normative Language and Conventions +++++++++++++++++++++++++++++++++++ + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. + + +Defined Terms ++++++++++++++ + +The terms *User*, *Trust Service*, *Trust Model*, *Trusted List*, *Trust Framework*, *Attribute*, *Electronic Attestations of Attributes Provider* or *Trust Service Provider (TSP)*, *Person Identification Data (PID)*, *Revocation List*, *Qualified Electronic Attestations of Attributes Provider* or *Qualified Trust Service Provider (QTSP)*, *Electronic Attestation of Attributes (EAA)*, are defined in the `EIDAS-ARF`_. + +Below are the description of acronyms and definitions which are useful for further insights into topics that complement the it-wallet and the interacting components. + + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - Accreditation Body + - An entity accredited by the Federation Authority, responsible for managing the process of verification and certification of accreditation requirements for ecosystem roles. + * - Digital Identity Provider + - An entity, recognized and accredited by the State, responsible for identifying citizens for the issuance of an Electronic Identity Certificate. + * - Digital Credential + - An signed Credential whose integrity can be cryptographically verified using the public keys of its Issuer. It is also known as Credential. + * - Federation Authority + - A public governance entity that issues guidelines and technical rules, and administers - directly or through its intermediary - Trusted Lists, services, and accreditation processes, the status of participants, and their eligibility evaluation. It also performs oversight functions. + * - Wallet Instance + - An instance of the Wallet Solution, installed on a personal mobile device and controlled by a specific User who is its sole owner. It is the application that enables citizens to fully and autonomously manage their digital identity and EAAs. + * - Wallet Provider + - All public and/or private entities, conforming to a technical profile and accredited by the Federation Authority, that provide citizens with an IT Wallet Instance. + * - Wallet Attestation + - Verifiable Attestation, issued by the Wallet Provider, that proves the security compliace of the Wallet Instance. + * - Wallet Secure Cryptographic Device + - Hardware-backed secure environment for creating, storing, and/or managing cryptographic keys and data. A WSCD MAY implement an association proof in different ways. This largely depends on the implementation of the WSCD for example: remote HSM, external smart card, internal UICC, internal native cryptographic hardware, such as the iOS Secure Enclave or the Android Hardware Backed Keystore or StrongBox + * - Credential Status Attestation + - Verifiable Attestation proving that a related Digital Credential is not revoked. + * - Device Integrity Service + - A service provided by device manufacturers that verifies the integrity and authenticity of the app instance (Wallet Instance), as well as certifying the secure storage of private keys generated by the device within its dedicated hardware. It's important to note that the terminology used to describe this service varies among manufacturers. + * - Cryptographic Hardware Keys + - During the app initialization, the Wallet Instance generates a pair of keys, one public and one private, which remain valid for the entire duration of the Wallet Instance's life. Functioning as a Master Key for the personal device, these Cryptographic Hardware Keys are confined to the OS domain and are not designed for signing arbitrary payloads. Their primary role is to provide a unique identification for each Wallet Instance. + * - Cryptographic Hardware Key Tag + - A unique identifier created by the operating system for the Cryptographic Hardware Keys, utilized to gain access to the private key stored in the hardware. + * - Key Attestation + - An attestation from the device's OEM that enhances your confidence in the keys used in your Wallet Instance being securely stored within the device's hardware-backed keystore. + * - Qualified Electronic Attestation of Attributes (QEAA) + - A digitally verifiable attestation in electronic form, issued by a QTSP, that substantiates a person's possession of attributes. + * - Qualified Electronic Signature Provider + - The Electronic Trust Service Provider responsible for the issuing of Qualified Electronic Signature certificates to the User. + * - Relying Party + - A natural or legal person that implements an authentication system requiring electronic attribute attestation submissions as an authentication mechanism. + * - Verifier + - See Relying Party. + * - Trust Attestation + - Electronic attestation of an entity's compliance with the national regulatory framework, which is cryptographically verifiable and cannot be repudiated over time by the entity that issued it. A Trust Attestation is always related to a particular Trust Framework. + * - Trust Layer + - An architectural component that enables IT Wallet system participants to establish trust, in terms of reliability and compliance of all participants with the regulatory framework governing the digital identity system. + * - Trust Model + - System defining how the participants of the ecosystem establish and maintain trust in their interactions. The Trust Model outlines the rules and the procedures for the entities (like users, systems, or applications) should validate each other's identities, authenticate, and establish the level of trust before exchanging information. + * - Level of Assurance + - The degree of confidence in the vetting process used to establish the identity of the User and the degree of confidence that the User who presents the credential is the same User to whom the Digital Credential was issued. + * - Holder Key Binding + - Ability of the Holder to prove legitimate possession of the private part, related to the public part attested by a Trusted Third Party. + +Acronyms +-------- + +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - **Acronym** + - **Description** + * - **OID4VP** + - OpenID for Verifiable Presentation + * - **PID** + - Person Identification Data + * - **VC** + - Verifiable Credential + * - **VP** + - Verifiable Presentation + * - **API** + - Application Programming Interface + * - **LoA** + - Level of Assurance + * - **AAL** + - Authenticator Assurance Level as defined in ``_ + * - **WSCD** + - Wallet Secure Cryptographic Device diff --git a/rp-vp-kid/en/_sources/index.rst.txt b/rp-vp-kid/en/_sources/index.rst.txt new file mode 100644 index 000000000..9eed31a14 --- /dev/null +++ b/rp-vp-kid/en/_sources/index.rst.txt @@ -0,0 +1,51 @@ +.. include:: ../common/common_definitions.rst + +============================================== +The Italian EUDI Wallet implementation profile +============================================== + +Introduction +------------ + +The European Parliament `has adopted `_ the revision of the eIDAS Regulation concerning electronic identification and trust services, introducing a significant innovation: the `European Digital Identity Wallet `_. This update marks a pivotal advancement in the EU's digital strategy, aiming to enhance the security, interoperability, and usability of digital identities across Member States. For further details, resources, and notes on this legislative development, please refer to the official EU Commission and Parliament websites. + +Italy has launched the National digital identity Wallet solution, known as IT Wallet, in direct response to the European community's directives. This initiative ensures full interoperability with the digital identity solutions provided by other European Member States, aligning completely with European regulations. + +The purpose of the following technical rules is to define the technical architecture and reference framework to be used as a guideline by all the parties involved in the development of the IT Wallet project. + +This documentation defines the national implementation profile of EUDI Wallet, containing the technical details about components of the Wallet ecosystem, as listed below: + + - Entities of the ecosystem according to `EIDAS-ARF`_. + - Infrastructure of trust attesting realiability and eligibility of the participants. + - PID and EAAs data schemes and attribute sets. + - PID/EAA in MDL CBOR format. + - PID/EAA in `SD-JWT`_ format. + - Wallet Solution general architecture. + - Wallet Attestation. + - Issuance of PID/EAA according to `OpenID4VCI`_. + - Presentation of PID/EAA according to `OpenID4VP`_. + - Presentation of pseudonyms according to `SIOPv2`_. + - PID/EAA backup and restore mechanisms. + - PID/EAA revocation lists. + +Index of content +---------------- + +.. toctree:: + :maxdepth: 3 + + ssi-introduction.rst + defined-terms.rst + trust.rst + wallet-solution.rst + wallet-attestation.rst + pid-eaa-data-model.rst + pid-eaa-issuance.rst + relying-party-solution.rst + revocation-lists.rst + pseudonyms.rst + backup-restore.rst + algorithms.rst + contribute.rst + standards.rst + diff --git a/rp-vp-kid/en/_sources/pid-eaa-data-model.rst.txt b/rp-vp-kid/en/_sources/pid-eaa-data-model.rst.txt new file mode 100644 index 000000000..d96e16813 --- /dev/null +++ b/rp-vp-kid/en/_sources/pid-eaa-data-model.rst.txt @@ -0,0 +1,883 @@ + +.. include:: ../common/common_definitions.rst + +.. _pid_eaa_data_model.rst: + +PID/(Q)EAA Data Model ++++++++++++++++++++++ + +The Person Identification Data (PID) is issued by the PID Provider according to national laws. The main scope of the PID is allowing natural persons to be authenticated for the access to a service or to a protected resource. +The User attributes provided within the Italian PID are the ones listed below: + + - Current Family Name + - Current First Name + - Date of Birth + - Unique Identifier + - Taxpayer identification number + +The (Q)EAAs are issued by (Q)EAA Issuers to a Wallet Instance and MUST be provided in SD-JWT-VC or MDOC-CBOR data format. + +The PID/(Q)EAA data format and the mechanism through which a digital credential is issued to the Wallet Instance and presented to a Relying Party are described in the following sections. + +SD-JWT +====== + +The PID/(Q)EAA is issued in the form of a Digital Credential. The Digital Credential format is `Selective Disclosure JWT format `_ as specified in `[SD-JWT-based Verifiable Credentials 02] `__. + +An SD-JWT is a JWT that MUST be signed using the Issuer's private key. The SD-JWT payload of the MUST contain the **_sd_alg** claim described in `[SD-JWT]. Section 5.1.2. `_ and other claims specified in this section, some of them may be selectively disclosable claims. + +The claim **_sd_alg** indicates the hash algorithm used by the Issuer to generate the digests over the salts and the claim values. The **_sd_alg** claim MUST be set to one of the specified algorithms in Section :ref:`Cryptographic Algorithms `. + +Selectively disclosable claims are omitted from the SD-JWT. Instead, the digests of the respective disclosures and decoy digests are contained as an array in a new JWT claim, **_sd**. + +Each digest value ensures the integrity of, and maps to, the respective Disclosure. Digest values are calculated using a hash function over the disclosures, each of which contains + + - a random salt, + - the claim name (only when the claim is an object property), + - the claim value. + +The Disclosures are sent to the Holder together with the SD-JWT in the *Combined Format for Issuance* that MUST be an ordered series of base64url-encoded values, each separated from the next by a single tilde ('~') character as follows: + +.. code-block:: + + ~~~...~ + +See `[SD-JWT VC] `_ and `[SD-JWT] `__ for more details. + + +PID/(Q)EAA SD-JWT parameters +---------------------------- + +The JOSE header contains the following mandatory parameters: + +.. _pid_jose_header: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **typ** + - MUST be set to ``vc+sd-jwt`` as defined in `[draft-terbu-sd-jwt-vc-latest] `__. + - `[RFC7515, Section 4.1.9] `_. + * - **alg** + - Signature Algorithm. + - `[RFC7515, Section 4.1.1] `_. + * - **kid** + - Unique identifier of the public key. + - `[RFC7515, Section 4.1.8] `_. + * - **trust_chain** + - JSON array containing the trust chain that proves the reliability of the issuer of the JWT. + - `[OIDC-FED, Section 3.2.1] `_. + +The following claims MUST be in the JWT payload. Some of these claims can be disclosed, these are listed in the following tables that specify whether a claim is selectively disclosable [SD] or not [NSD]. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - [NSD].URL string representing the PID/(Q)EAA Issuer unique identifier. + - `[RFC7519, Section 4.1.1] `_. + * - **sub** + - [NSD]. The identifier of the subject of the Digital Credential, the User, MUST be opaque and MUST NOT correspond to any anagraphic data or be derived from the User's anagraphic data via pseudonymization. Additionally, it is required that two different Credentials issued MUST NOT use the same ``sub`` value. + - `[RFC7519, Section 4.1.2] `_. + * - **iat** + - [SD].UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. + - `[RFC7519, Section 4.1.6] `_. + * - **exp** + - [NSD].UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in :rfc:`7519`. + - `[RFC7519, Section 4.1.4] `_. + * - **status** + - [NSD].it MUST be a valid JSON object containing the information on how to read the status of the Verifiable Credential. It MUST contain the JSON member *status_attestation* set to a JSON Object containing the *credential_hash_alg* claim indicating the Algorithm used for hashing the Digital Credential to which the Status Attestation is bound. It is RECOMMENDED to use *sha-256*. + - `[SD-JWT-VC. Section 3.2.2.2] `_ and `[OAuth Status Attestations Draft 01] `_. + * - **cnf** + - [NSD].JSON object containing the proof-of-possession key materials. By including a **cnf** (confirmation) claim in a JWT, the issuer of the JWT declares that the Holder is in control of the private key related to the public one defined in the **cnf** parameter. The recipient MUST cryptographically verify that the Holder is in control of that key. + - `[RFC7800, Section 3.1] `_ and `[SD-JWT-VC. Section 3.2.2.2] `_. + * - **vct** + - [NSD].Credential type as a string, MUST be set in accordance to the type obtained from the PID/(Q)EAA Issuer metadata. For example, in the case of the PID, it MUST be set to ``PersonIdentificationData``. + - `[SD-JWT-VC. Section 3.2.2.2] `_. + + +.. _sec-pid-user-claims: + +PID Claims +---------- + +Depending on the Digital Credential type **vct**, additional claims data MAY be added. The PID MUST support the following data: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **given_name** + - [SD]. Current First Name. + - `[OpenID Connect Core 1.0, Section 5.1] `_ + * - **family_name** + - [SD]. Current Family Name. + - `[OpenID Connect Core 1.0, Section 5.1] `_ + * - **birth_date** + - [SD]. Date of Birth. + - + * - **unique_id** + - [SD]. Unique citizen identifier (ID ANPR) given by the National Register of the Resident Population (ANPR). It MUST be set according to `ANPR rules `_ + - + * - **tax_id_code** + - [SD]. National tax identification code of natural person as a String format. It MUST be set according to ETSI EN 319 412-1. For example ``TINIT-`` + - + + +PID Non-Normative Examples +-------------------------- + +In the following, the non-normative example of a PID in JSON format. + +.. code-block:: JSON + + { + "iss": "https://issuer.example.org", + "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs", + "iat": 1683000000, + "exp": 1883000000, + "status": { + "status_attestation": { + "credential_hash_alg": "sha-256" + }, + "vct": "PersonIdentificationData", + "unique_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", + "given_name": "Mario", + "family_name": "Rossi", + "birth_date": "1980-01-10", + "tax_id_code": "TINIT-XXXXXXXXXXXXXXXX" + } + +The corresponding SD-JWT verson for PID is given by + +.. code-block:: JSON + + { + "typ":"vc+sd-jwt", + "alg":"ES256", + "kid":"dB67gL7ck3TFiIAf7N6_7SHvqk0MDYMEQcoGGlkUAAw", + "trust_chain" : [ + "NEhRdERpYnlHY3M5WldWTWZ2aUhm ...", + "eyJhbGciOiJSUzI1NiIsImtpZCI6 ...", + "IkJYdmZybG5oQU11SFIwN2FqVW1B ..." + ] + } + +.. code-block:: JSON + + { + "_sd": [ + "7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc", + "NOxVzjUJg667iBdeDwmr6tZ46X-jchKwIVxMAfv43yc", + "TK2RguPYoXzCx0vv5hbN9u5M2mHlWBt41qGWlLXCNu8", + "UHChpGtNF2bj1FvAfBby1rnf7WXkxelFJ5a4vSj2FO4", + "q6Tqnxau97tu-MqUDg0fSAmLGZdSuMUMk6a2s3bcsC0", + "wyfxVqq9BosPT7tN4SHOI4E48P19aVA1ktW5Zf0E-fc" + ], + "exp": 1883000000, + "iss": "https://pidprovider.example.org", + "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs", + "status": { + "status_attestation": { + "credential_hash_alg": "sha-256" + } + }, + "vct": "PersonIdentificationData", + "_sd_alg": "sha-256", + "cnf": { + "jwk": { + "kty": "EC", + "crv": "P-256", + "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc", + "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ" + } + } + } + +In the following the disclosure list is given + +**Claim** ``iat``: + +- SHA-256 Hash: ``7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc`` +- Disclosure: + ``WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd`` +- Contents: ``["57mvycTh5yZCrKLZ5xnfUw", "iat", 1683000000]`` + +**Claim** ``unique_id``: + +- SHA-256 Hash: ``NOxVzjUJg667iBdeDwmr6tZ46X-jchKwIVxMAfv43yc`` +- Disclosure: + ``WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgInVuaXF1ZV9pZCIsICJ4eHh4`` + ``eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiXQ`` +- Contents: ``["kucrBmlo_hMaIFF585RzaQ", "unique_id",`` + ``"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]`` + +**Claim** ``given_name``: + +- SHA-256 Hash: ``wyfxVqq9BosPT7tN4SHOI4E48P19aVA1ktW5Zf0E-fc`` +- Disclosure: + ``WyJOVE5Sb09pdVZWUnRGNkNFenRkOVp3IiwgImdpdmVuX25hbWUiLCAiTWFy`` + ``aW8iXQ`` +- Contents: ``["NTNRoOiuVVRtF6CEztd9Zw", "given_name", "Mario"]`` + +**Claim** ``family_name``: + +- SHA-256 Hash: ``UHChpGtNF2bj1FvAfBby1rnf7WXkxelFJ5a4vSj2FO4`` +- Disclosure: + ``WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgImZhbWlseV9uYW1lIiwgIlJv`` + ``c3NpIl0`` +- Contents: ``["FDSSPggzGBUwQLHDSE6wQQ", "family_name", "Rossi"]`` + +**Claim** ``birth_date``: + +- SHA-256 Hash: ``TK2RguPYoXzCx0vv5hbN9u5M2mHlWBt41qGWlLXCNu8`` +- Disclosure: + ``WyJLWjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImJpcnRoX2RhdGUiLCAiMTk4`` + ``MC0wMS0xMCJd`` +- Contents: ``["KZ8e5wVEtDvb1ziSPA4DzA", "birth_date", "1980-01-10"]`` + +**Claim** ``tax_id_code``: + +- SHA-256 Hash: ``q6Tqnxau97tu-MqUDg0fSAmLGZdSuMUMk6a2s3bcsC0`` +- Disclosure: + ``WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgInRheF9pZF9jb2RlIiwgIlRJ`` + ``TklULVhYWFhYWFhYWFhYWFhYWFgiXQ`` +- Contents: ``["pZ5MRyOxpVWZuHLoJ-yjRg", "tax_id_code",`` + ``"TINIT-XXXXXXXXXXXXXXXX"]`` + + + +The combined format for the PID issuance is given by + +.. code-block:: + + eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImV4YW1wbGUrc2Qtand0In0.eyJfc2QiOiBb + IjdXRzRuVDZLMjZfUjM5NzV6Y3duVndnb0hBN2I5ODhfMy12SnpiWmY2WWMiLCAiTk94 + VnpqVUpnNjY3aUJkZUR3bXI2dFo0NlgtamNoS3dJVnhNQWZ2NDN5YyIsICJUSzJSZ3VQ + WW9YekN4MHZ2NWhiTjl1NU0ybUhsV0J0NDFxR1dsTFhDTnU4IiwgIlVIQ2hwR3RORjJi + ajFGdkFmQmJ5MXJuZjdXWGt4ZWxGSjVhNHZTajJGTzQiLCAicTZUcW54YXU5N3R1LU1x + VURnMGZTQW1MR1pkU3VNVU1rNmEyczNiY3NDMCIsICJ3eWZ4VnFxOUJvc1BUN3RONFNI + T0k0RTQ4UDE5YVZBMWt0VzVaZjBFLWZjIl0sICJleHAiOiAxODgzMDAwMDAwLCAiaXNz + IjogImh0dHBzOi8vcGlkcHJvdmlkZXIuZXhhbXBsZS5vcmciLCAic3ViIjogIk56Ykxz + WGg4dURDY2Q3bm9XWEZaQWZIa3hac1JHQzlYcyIsICJzdGF0dXMiOiB7InN0YXR1c19h + dHRlc3RhdGlvbiI6IHsiY3JlZGVudGlhbF9oYXNoX2FsZyI6ICJzaGEtMjU2In19LCAi + dmN0IjogIlBlcnNvbklkZW50aWZpY2F0aW9uRGF0YSIsICJfc2RfYWxnIjogInNoYS0y + NTYiLCAiY25mIjogeyJqd2siOiB7Imt0eSI6ICJFQyIsICJjcnYiOiAiUC0yNTYiLCAi + eCI6ICJUQ0FFUjE5WnZ1M09IRjRqNFc0dmZTVm9ISVAxSUxpbERsczd2Q2VHZW1jIiwg + InkiOiAiWnhqaVdXYlpNUUdIVldLVlE0aGJTSWlyc1ZmdWVjQ0U2dDRqVDlGMkhaUSJ9 + fX0.A36ovweqpCpPkYHX75dg-HIib7zQKlfmMCaixlpOCmEl1CxlX-NtZbFn_kdN0nlJ + YMLay4xSeetmic_ScLTxdg~WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsI + DE2ODMwMDAwMDBd~WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgInVuaXF1ZV9pZCIs + ICJ4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiXQ~WyJOVE5Sb09pd + VZWUnRGNkNFenRkOVp3IiwgImdpdmVuX25hbWUiLCAiTWFyaW8iXQ~WyJGRFNTUGdnek + dCVXdRTEhEU0U2d1FRIiwgImZhbWlseV9uYW1lIiwgIlJvc3NpIl0~WyJLWjhlNXdWRX + REdmIxemlTUEE0RHpBIiwgImJpcnRoX2RhdGUiLCAiMTk4MC0wMS0xMCJd~WyJwWjVNU + nlPeHBWV1p1SExvSi15alJnIiwgInRheF9pZF9jb2RlIiwgIlRJTklULVhYWFhYWFhYW + FhYWFhYWFgiXQ~ + +(Q)EAA non-normative examples +----------------------------- + +In the following, we provide a non-normative example of (Q)EAA in JSON. + +.. code-block:: JSON + + { + "iss": "https://issuer.example.org", + "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs", + "iat": 1683000000, + "exp": 1883000000, + "status": { + "status_attestation": { + "credential_hash_alg": "sha-256" + }, + "vct": "DisabilityCard", + "document_number": "XXXXXXXXXX", + "given_name": "Mario", + "family_name": "Rossi", + "birth_date": "1980-01-10", + "expiry_date": "2024-01-01", + "tax_id_code": "TINIT-XXXXXXXXXXXXXXXX", + "constant_attendance_allowance": true + } + +The corresponding SD-JWT for the previous data is represented as follow, as decoded JSON for both header and payload. + +.. code-block:: JSON + + { + "typ":"vc+sd-jwt", + "alg":"ES256", + "kid":"d126a6a856f7724560484fa9dc59d195", + "trust_chain" : [ + "NEhRdERpYnlHY3M5WldWTWZ2aUhm ...", + "eyJhbGciOiJSUzI1NiIsImtpZCI6 ...", + "IkJYdmZybG5oQU11SFIwN2FqVW1B ..." + ] + } + +.. code-block:: JSON + + { + "_sd": [ + "-LLA7MCh-YWWYNzFfwZsJBGGiE096fN8d60a-ml3sgo", + "7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc", + "AFRJaRPZTMaNxYu5IIWPifOAXJCnK-_h1eJt7MymcgM", + "TK2RguPYoXzCx0vv5hbN9u5M2mHlWBt41qGWlLXCNu8", + "UHChpGtNF2bj1FvAfBby1rnf7WXkxelFJ5a4vSj2FO4", + "i9XHLePHyV8OM35l3nf1MKqfpWuD7OFpRamSAsX0-5g", + "rhPkItz7BGGpjnWX2SGVH_OV9VhRjz9Hx_INXwBbz6o", + "wyfxVqq9BosPT7tN4SHOI4E48P19aVA1ktW5Zf0E-fc" + ], + "exp": 1883000000, + "iss": "https://issuer.example.org", + "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs", + "status": { + "status_attestation": { + "credential_hash_alg": "sha-256" + } + }, + "vct": "DisabilityCard", + "_sd_alg": "sha-256", + "cnf": { + "jwk": { + "kty": "EC", + "crv": "P-256", + "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc", + "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ" + } + } + } + +In the following the disclosure list is given: + +**Claim** ``iat``: + +- SHA-256 Hash: ``7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc`` +- Disclosure: + ``WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd`` +- Contents: ``["57mvycTh5yZCrKLZ5xnfUw", "iat", 1683000000]`` + +**Claim** ``document_number``: + +- SHA-256 Hash: ``AFRJaRPZTMaNxYu5IIWPifOAXJCnK-_h1eJt7MymcgM`` +- Disclosure: + ``WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgImRvY3VtZW50X251bWJlciIs`` + ``ICJYWFhYWFhYWFhYIl0`` +- Contents: + ``["kucrBmlo_hMaIFF585RzaQ", "document_number", "XXXXXXXXXX"]`` + +**Claim** ``given_name``: + +- SHA-256 Hash: ``wyfxVqq9BosPT7tN4SHOI4E48P19aVA1ktW5Zf0E-fc`` +- Disclosure: + ``WyJOVE5Sb09pdVZWUnRGNkNFenRkOVp3IiwgImdpdmVuX25hbWUiLCAiTWFy`` + ``aW8iXQ`` +- Contents: ``["NTNRoOiuVVRtF6CEztd9Zw", "given_name", "Mario"]`` + +**Claim** ``family_name``: + +- SHA-256 Hash: ``UHChpGtNF2bj1FvAfBby1rnf7WXkxelFJ5a4vSj2FO4`` +- Disclosure: + ``WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgImZhbWlseV9uYW1lIiwgIlJv`` + ``c3NpIl0`` +- Contents: ``["FDSSPggzGBUwQLHDSE6wQQ", "family_name", "Rossi"]`` + +**Claim** ``birth_date``: + +- SHA-256 Hash: ``TK2RguPYoXzCx0vv5hbN9u5M2mHlWBt41qGWlLXCNu8`` +- Disclosure: + ``WyJLWjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImJpcnRoX2RhdGUiLCAiMTk4`` + ``MC0wMS0xMCJd`` +- Contents: ``["KZ8e5wVEtDvb1ziSPA4DzA", "birth_date", "1980-01-10"]`` + +**Claim** ``expiry_date``: + +- SHA-256 Hash: ``i9XHLePHyV8OM35l3nf1MKqfpWuD7OFpRamSAsX0-5g`` +- Disclosure: + ``WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgImV4cGlyeV9kYXRlIiwgIjIw`` + ``MjQtMDEtMDEiXQ`` +- Contents: ``["pZ5MRyOxpVWZuHLoJ-yjRg", "expiry_date", "2024-01-01"]`` + +**Claim** ``tax_id_code``: + +- SHA-256 Hash: ``-LLA7MCh-YWWYNzFfwZsJBGGiE096fN8d60a-ml3sgo`` +- Disclosure: + ``WyJqdFZ1S0NwbjdiVGNIckFnX3NlVWJRIiwgInRheF9pZF9jb2RlIiwgIlRJ`` + ``TklULVhYWFhYWFhYWFhYWFhYWFgiXQ`` +- Contents: ``["jtVuKCpn7bTcHrAg_seUbQ", "tax_id_code",`` + ``"TINIT-XXXXXXXXXXXXXXXX"]`` + +**Claim** ``constant_attendance_allowance``: + +- SHA-256 Hash: ``rhPkItz7BGGpjnWX2SGVH_OV9VhRjz9Hx_INXwBbz6o`` +- Disclosure: + ``WyJXRGtkNkpzTmhERnZMUDRzMWhRZHlBIiwgImNvbnN0YW50X2F0dGVuZGFu`` + ``Y2VfYWxsb3dhbmNlIiwgdHJ1ZV0`` +- Contents: + ``["WDkd6JsNhDFvLP4s1hQdyA", "constant_attendance_allowance",`` + ``true]`` + + +The combined format for the PID issuance is represented below: + +.. code-block:: + + eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImV4YW1wbGUrc2Qtand0In0.eyJfc2QiOiBb + Ii1MTEE3TUNoLVlXV1lOekZmd1pzSkJHR2lFMDk2Zk44ZDYwYS1tbDNzZ28iLCAiN1dH + NG5UNksyNl9SMzk3NXpjd25Wd2dvSEE3Yjk4OF8zLXZKemJaZjZZYyIsICJBRlJKYVJQ + WlRNYU54WXU1SUlXUGlmT0FYSkNuSy1faDFlSnQ3TXltY2dNIiwgIlRLMlJndVBZb1h6 + Q3gwdnY1aGJOOXU1TTJtSGxXQnQ0MXFHV2xMWENOdTgiLCAiVUhDaHBHdE5GMmJqMUZ2 + QWZCYnkxcm5mN1dYa3hlbEZKNWE0dlNqMkZPNCIsICJpOVhITGVQSHlWOE9NMzVsM25m + MU1LcWZwV3VEN09GcFJhbVNBc1gwLTVnIiwgInJoUGtJdHo3QkdHcGpuV1gyU0dWSF9P + VjlWaFJqejlIeF9JTlh3QmJ6Nm8iLCAid3lmeFZxcTlCb3NQVDd0TjRTSE9JNEU0OFAx + OWFWQTFrdFc1WmYwRS1mYyJdLCAiZXhwIjogMTg4MzAwMDAwMCwgImlzcyI6ICJodHRw + czovL2lzc3Vlci5leGFtcGxlLm9yZyIsICJzdWIiOiAiTnpiTHNYaDh1RENjZDdub1dY + RlpBZkhreFpzUkdDOVhzIiwgInN0YXR1cyI6IHsic3RhdHVzX2F0dGVzdGF0aW9uIjog + eyJjcmVkZW50aWFsX2hhc2hfYWxnIjogInNoYS0yNTYifX0sICJ2Y3QiOiAiRGlzYWJp + bGl0eUNhcmQiLCAiX3NkX2FsZyI6ICJzaGEtMjU2IiwgImNuZiI6IHsiandrIjogeyJr + dHkiOiAiRUMiLCAiY3J2IjogIlAtMjU2IiwgIngiOiAiVENBRVIxOVp2dTNPSEY0ajRX + NHZmU1ZvSElQMUlMaWxEbHM3dkNlR2VtYyIsICJ5IjogIlp4amlXV2JaTVFHSFZXS1ZR + NGhiU0lpcnNWZnVlY0NFNnQ0alQ5RjJIWlEifX19.1kOe6IgFxgbb_jtaLUhM_bgjmby + j6B63rm_WjaOwpOBsiPSKJY7hBHd2a83euSI8JqbSkVHJS3wcr0kd9ppZRw~WyI1N212 + eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd~WyJrdWNyQm1sb19 + oTWFJRkY1ODVSemFRIiwgImRvY3VtZW50X251bWJlciIsICJYWFhYWFhYWFhYIl0~WyJ + OVE5Sb09pdVZWUnRGNkNFenRkOVp3IiwgImdpdmVuX25hbWUiLCAiTWFyaW8iXQ~WyJG + RFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgImZhbWlseV9uYW1lIiwgIlJvc3NpIl0~WyJL + WjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImJpcnRoX2RhdGUiLCAiMTk4MC0wMS0xMCJd + ~WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgImV4cGlyeV9kYXRlIiwgIjIwMjQtMDE + tMDEiXQ~WyJqdFZ1S0NwbjdiVGNIckFnX3NlVWJRIiwgInRheF9pZF9jb2RlIiwgIlRJ + TklULVhYWFhYWFhYWFhYWFhYWFgiXQ~WyJXRGtkNkpzTmhERnZMUDRzMWhRZHlBIiwgI + mNvbnN0YW50X2F0dGVuZGFuY2VfYWxsb3dhbmNlIiwgdHJ1ZV0~ + +MDOC-CBOR +========= + +The PID/(Q)EAA MDOC-CBOR data model is defined in ISO/IEC 18013-5, the standard born for the the mobile driving license (mDL) use case. + +The MDOC data elements MUST be encoded as defined in `RFC 8949 - Concise Binary Object Representation (CBOR) `_. + +The PID encoded in MDOC-CBOR format uses the document type set to `eu.europa.ec.eudiw.pid.1`, according to the reverse domain approach defined in the +`EIDAS-ARF`_ and ISO/IEC 18013-5. + +The document's data elements utilize a consistent namespace for the mandatory Mobile Driving License attributes, while the national PID attributes use the domestic namespace `eu.europa.ec.eudiw.pid.it.1`, as outlined in this implementation profile. + +In compliance with ISO/IEC 18013-5, the MDOC data model in the domestic namespace `eu.europa.ec.eudiw.pid.it.1`, requires the following attributes: + +.. _table-mdoc-attributes: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Attribute name** + - **Description** + - **Reference** + * - **version** + - *tstr (text string)*. Version of the data structure being used. It's a way to track changes and updates to the standard or to a specific implementation profile. This allows for backward compatibility and understanding of the data if the standard or implementation evolves over time. + - [ISO 18013-5#8.3.2.1.2] + * - **status** + - *uint (unsigned int)*. Status code. For example ``"status":0`` means OK (normal processing). + - [ISO 18013-5#8.3.2.1.2.3] + * - **documents** + - *bstr (byte string)*. The collection of digital documents. Each document in this collection represents a specific type of data or information related to the Digital Credential. + - [ISO 18013-5#8.3.2.1.2] + +Each document within the **documents** collection MUST have the following structure: + +.. _table-mdoc-documents-attributes: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Attribute name** + - **Description** + - **Reference** + * - **docType** + - *tstr (text string)*. Document type. For the PID, the value MUST be set to ``eu.europa.ec.eudiw.pid.1.`` For an mDL, the value MUST be ``org.iso.18013-5.1.mDL``. + - [ISO 18013-5#8.3.2.1.2] + * - **issuerSigned** + - *bstr (byte string)*. It MUST contain the Mobile Security Object for Issuer data authentication and the data elements protected by Issuer data authentication. + - [ISO 18013-5#8.3.2.1.2] + +The **issuerSigned** object MUST have the following structure: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Attribute name** + - **Description** + - **Reference** + * - **nameSpaces** + - *bstr (byte string)* with *tag* 24 and *major type* 6. Returned data elements for the namespaces. It MAY be possible to have one or more namespaces. The `nameSpaces` MUST use the same value for the document type. However, it MAY have a domestic namespace to include attributes defined in this implementation profile. The value MUST be set to ``eu.europa.ec.eudiw.pid.it.1``. + - [ISO 18013-5#8.3.2.1.2] + * - **issuerAuth** + - *bstr (byte string)*. Contains *Mobile Security Object* (MSO), a COSE Sign1 Document, issued by the Credential Issuer. + - [ISO 18013-5#9.1.2.4] + +During the presentation of the MDOC-CBOR credential, in addition to the objects in the table above, a **deviceSigned** object MUST also be added. **deviceSigned** MUST NOT be included in the issued credential provided by the PID/(Q)EAA Issuer. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Attribute name** + - **Description** + - **Reference** + * - **deviceSigned** + - *bstr (byte string)*. Data elements signed by the Wallet Instance during the presentation phase. + - [ISO 18013-5#8.3.2.1.2] + +Where the **deviceSigned** MUST have the following structure: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Attribute name** + - **Description** + - **Reference** + * - **nameSpaces** + - *tstr (text string)*. Returned data elements for the namespaces. It MAY be possible to have one or more namespaces. It MAY be used for self-attested claims. + - [ISO 18013-5#8.3.2.1.2] + * - **deviceAuth** + - *bstr (byte string)*. It MUST contain either the *DeviceSignature* or the *DeviceMac* element. + - [ISO 18013-5#8.3.2.1.2] + + +.. note:: + + A **deviceSigned** object given during the presentation phase has two purposes: + + 1. It provides optional self-attested attributes in the ``nameSpaces`` object. If no self-attested attributes are provided by the Wallet Instance, the ``nameSpaces`` object MUST be included with an empty structure. + 2. Provide a cryptographic proof attesting that the Holder is the legitimate owner of the Credential, by means of a ``deviceAuth`` object. + + +.. note:: + + The ``issuerSigned`` and the ``deviceSigned`` objects contain the ``nameSpaces`` object and the *Mobile Security Object*. The latter is the only signed object, while the ``nameSpaces`` object is not signed. + + + +nameSpaces +---------- + +The **nameSpaces** object contains one or more *IssuerSignedItemBytes* that are encoded using CBOR bitsring 24 tag (#6.24(bstr .cbor), marked with the CBOR Tag 24(<<... >>) and represented in the example using the diagnostic format). It represents the disclosure information for each digest within the `Mobile Security Object` and MUST contain the following attributes: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Name** + - **Encoding** + - **Description** + * - **digestID** + - *integer* + - Reference value to one of the ``ValueDigests`` provided in the *Mobile Security Object* (`issuerAuth`). + * - **random** + - *bstr (byte string)* + - Random byte value used as salt for the hash function. This value SHALL be different for each *IssuerSignedItem* and it SHALL have a minimum length of 16 bytes. + * - **elementIdentifier** + - *tstr (text string)* + - Data element identifier. + * - **elementValue** + - depends by the value, see the next table. + - Data element value. + +The **elementIdentifier** data that MUST be included in a PID/(Q)EAA are: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Namespace** + - **Element identifier** + - **Description** + * - **eu.europa.ec.eudiw.pid.1** + - **issue_date** + - *full-date (CBORTag 1004)*. Date when the PID/(Q)EAA was issued. + * - **eu.europa.ec.eudiw.pid.1** + - **expiry_date** + - *full-date (CBORTag 1004)*. Date when the PID/(Q)EAA will expire. + * - **eu.europa.ec.eudiw.pid.1** + - **issuing_authority** + - *tstr (text string)*. Name of administrative authority that has issued the PID/(Q)EAA. + * - **eu.europa.ec.eudiw.pid.1** + - **issuing_country** + - *tstr (text string)*. Alpha-2 country code as defined in [ISO 3166]. + + +Depending on the Digital Credential type, additional **elementIdentifier** data MAY be added. The PID MUST support the following data: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Namespace** + - **Element identifier** + - **Description** + * - **eu.europa.ec.eudiw.pid.1** + - **given_name** + - *tstr (text string)*. See :ref:`PID Claims fields Section `. + * - **eu.europa.ec.eudiw.pid.1** + - **family_name** + - *tstr (text string)*. See :ref:`PID Claims fields Section `. + * - **eu.europa.ec.eudiw.pid.1** + - **birth_date** + - *full-date (CBORTag 1004)*. See :ref:`PID Claims fields Section `. + * - **eu.europa.ec.eudiw.pid.1** + - **unique_id** + - *tstr (text string)*. See :ref:`PID Claims fields Section `. + * - **eu.europa.ec.eudiw.pid.it.1** + - **tax_id_code** + - *tstr (text string)*. See :ref:`PID Claims fields Section `. + + +Mobile Security Object +---------------------- + +The **issuerAuth** represents the `Mobile Security Object` which is a `COSE Sign1 Document` defined in `RFC 9052 - CBOR Object Signing and Encryption (COSE): Structures and Process `_. It has the following data structure: + +* protected header +* unprotected header +* payload +* signature. + +The **protected header** MUST contain the following parameter encoded in CBOR format: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Element** + - **Description** + - **Reference** + * - **Signature algorithm** + - `-7` means ES256, SHA-256. + - RFC8152 + +.. note:: + + Only the Signature Algorithm MUST be present in the protected headers, other elements SHOULD not be present in the protected header. + + +The **unprotected header** MUST contain the following parameter: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Element** + - **Description** + - **Reference** + * - **x5chain** + - Identified with the label 33 + - `RFC 9360 CBOR Object Signing and Encryption (COSE) - Header Parameters for Carrying and Referencing X.509 Certificates `_. + +.. note:: + The `x5chain` is included in the unprotected header with the aim to make the Holder able to update the X.509 certificate chain, related to the `Mobile Security Object` issuer, without invalidating the signature. + +The **payload** MUST contain the *MobileSecurityObject*, without the `content-type` COSE Sign header parameter and encoded as a *byte string* (bstr) using the *CBOR Tag* 24. + +The `MobileSecurityObjectBytes` MUST have the following attributes: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Element** + - **Description** + - **Reference** + * - **docType** + - See :ref:`Table `. + - [ISO 18013-5#9.1.2.4] + * - **version** + - See :ref:`Table `. + - [ISO 18013-5#9.1.2.4] + * - **validityInfo**. + - Object containing issuance and expiration datetimes. It MUST contain the following sub-value: + + * *signed* + * *validFrom* + * *validUntil* + - [ISO 18013-5#9.1.2.4] + * - **digestAlgorithm** + - According to the algorithm defined in the protected header. + - [ISO 18013-5#9.1.2.4] + * - **valueDigests** + - Mapped digest by unique id, grouped by namespace. + - [ISO 18013-5#9.1.2.4] + * - **deviceKeyInfo** + - It MUST contain the Wallet Instance's public key containing the following sub-values. + + * *deviceKey* (REQUIRED). + * *keyAuthorizations* (OPTIONAL). + * *keyInfo* (OPTIONAL). + - [ISO 18013-5#9.1.2.4] + +.. note:: + The private key related to the public key stored in the `deviceKey` object is used to sign the `DeviceSignedItems` object and proof the possession of the PID during the presentation phase (see the presentation phase with MDOC-CBOR). + + +MDOC-CBOR Examples +------------------ + +A non-normative example of a PID in MDOC-CBOR format is represented below using the AF Binary encoding: + +.. code-block:: text + + a366737461747573006776657273696f6e63312e3069646f63756d656e747381a267646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316c6973737565725369676e6564a26a697373756572417574688443a10126a1182159021930820215308201bca003020102021404ad06a30c1a6dc6e93be0e2e8f78dcafa7907c2300a06082a8648ce3d040302305b310b3009060355040613025a45312e302c060355040a0c25465053204d6f62696c69747920616e64205472616e73706f7274206f66205a65746f706961311c301a06035504030c1349414341205a65746573436f6e666964656e73301e170d3231303932393033333034355a170d3232313130333033333034345a3050311a301806035504030c114453205a65746573436f6e666964656e7331253023060355040a0c1c5a65746f70696120436974792044657074206f662054726166666963310b3009060355040613025a453059301306072a8648ce3d020106082a8648ce3d030107034200047c5545e9a0b15f4ff3ce5015121e8ad3257c28d541c1cd0d604fc9d1e352ccc38adef5f7902d44b7a6fc1f99f06eedf7b0018fd9da716aec2f1ffac173356c7da3693067301f0603551d23041830168014bba2a53201700d3c97542ef42889556d15b7ac4630150603551d250101ff040b3009060728818c5d050102301d0603551d0e04160414ce5fd758a8e88563e625cf056bfe9f692f4296fd300e0603551d0f0101ff040403020780300a06082a8648ce3d0403020347003044022012b06a3813ffec5679f3b8cddb51eaa4b95b0cbb1786b09405e2000e9c46618c02202c1f778ad252285ed05d9b55469f1cb78d773671f30fe7ab815371942328317c59032ad818590325a667646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316776657273696f6e63312e306c76616c6964697479496e666fa3667369676e6564c074323032332d30322d32325430363a32333a35365a6976616c696446726f6dc074323032332d30322d32325430363a32333a35365a6a76616c6964556e74696cc074323032342d30322d32325430303a30303a30305a6c76616c756544696765737473a2781865752e6575726f70612e65632e65756469772e7069642e31ac015820a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a025820cd372fb85148700fa88095e3492d3f9f5beb43e555e5ff26d95f5a6adc36f8e6035820e67e72111b363d80c8124d28193926000980e1211c7986cacbd26aacc5528d48045820f7d062d662826ed95869851db06bb539b402047baee53a00e0aa35bfbe98265d0658202a132dbfe4784627b86aa3807cd19cfeff487aab3dd7a60d0ab119a72e736936075820bdca9e8dbca354e824e67bfe1533fa4a238b9ea832f23fb4271ebeb3a5a8f7200858202c0eaec2f05b6c7fe7982683e3773b5d8d7a01e33d04dfcb162add8bd99bee9a095820bfe220d85657ccec3c67e7db1df747e9148a152334bb6d4b65b273279bcc36ec0a582018e38144f5044301d6a0b4ec9d5f98d4cd950e6ea2c29b849cbd457da29b6ad30b58203c71d2f0efa09d9e3fbbdffd29204f6b292c9f79570aef72dd86c91f7a3aa5c50c582065743d58d89d45e52044758f546034fd13a4f994bc270cdfa7844f74eb3f4b6e0d5820b4a8eb5d523bffa17b41bda12ddc7da32ae1e5f7ff3dcc394a35401f16919bbf781b65752e6575726f70612e65632e65756469772e7069642e69742e31a10e58209d6c11644651126c94acdaf0803e86d4c71d15d3b2712a14295416734efd514d6d6465766963654b6579496e666fa1696465766963654b6579a401022001215820ba01aea44eee1e338eb2f04e279dbd51b34655783ee185150838c9a7a7c4db7122582025ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96f646967657374416c676f726974686d675348412d32353658400813c28fd62f2602cbc14724e5865733c44a0fca589b55c085ec9d5c725d6cce25ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96a6e616d65537061636573a2781865752e6575726f70612e65632e65756469772e7069642e3188d818586da4686469676573744944016672616e646f6d5820156df9227ad341eaa61aabd301106fd21bdc18820e01dfc16bcf5fecc447111b71656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d30322d3232d818586fa4686469676573744944026672616e646f6d5820a3a1f13f05544d03a5b50b5fdb78465808393bcf3b7953a345fe28f820c7be0d71656c656d656e744964656e7469666965726d69737375616e63655f646174656c656c656d656e7456616c7565d903ec6a323032332d30322d3232d8185866a4686469676573744944036672616e646f6d5820852591f90f2c9ded57a03632e2c1322ab52a082a431e71a4149a6830c8f1ad0c71656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ca4686469676573744944046672616e646f6d5820d1d587b3512acce15c4f6b20944ceb002a464e4a158389788563408873c3fce571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c7565764d696e69737465726f2064656c6c27496e7465726e6fd8185864a4686469676573744944056672616e646f6d582094fdd7609c0e73dc8589b5cab11e1d9058cf8bff8a336da5f81fcba055396a0f71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c7565654d6172696fd8185865a4686469676573744944066672616e646f6d5820660c0a7bf79e0e0261ca1547a4294fb808aa70738f424b13ab1b9440b566ae1371656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756565526f737369d818586ba4686469676573744944076672616e646f6d5820315c53491286488fa07f5c2ce67135ef5c9959c3469c99a14e9b6dc924f9eba571656c656d656e744964656e746966696572696269727468646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3132d818587da4686469676573744944086672616e646f6d5820764ef39c9d01f3aa6a87f441603cfe853fba3cee3bc2c168bcc9e96271d6e06371656c656d656e744964656e74696669657269756e697175655f69646c656c656d656e7456616c7565781e78787878787878782d7878782d787878782d787878787878787878787878781b65752e6575726f70612e65632e65756469772e7069642e69742e3181d8185877a46864696765737449440d6672616e646f6d5820717df3f583b1484366c33a1f869f2b5d201d466a8b589c79ab1a2d85e595432571656c656d656e744964656e7469666965726d7461785f69645f6e756d6265726c656c656d656e7456616c75657554494e49542d585858585858585858585858585858 + +The `Diagnostic Notation` of the above MDOC-CBOR is given below: + +.. code-block:: text + + { + "status": 0, + "version": "1.0", + "documents": [ + { + "docType": "eu.europa.ec.eudiw.pid.1", + "issuerSigned": { + "issuerAuth": [ + << {1: -7} >>, % protected header with the value alg:ES256 + { + 33: h'30820215308201BCA003020102021404AD30C…'% 33->X5chain:COSE X_509 + }, + << + 24(<< + { + "docType": "eu.europa.ec.eudiw.pid.1", + "version": "1.0", + "validityInfo": { + "signed": 0("2023-02-22T06:23:56Z"), + "validFrom": 0("2023-02-22T06:23:56Z"), + "validUntil": 0("2024-02-22T00:00:00Z") + }, + "valueDigests": { + "eu.europa.ec.eudiw.pid.1": { + 1: h'0F1571A97FFB799CC8FCDF2BA4FC2909929…', + 2: h'0CDFE077400432C055A2B69596C90…', + 3: h'E2382149255AE8E955AF9B8984395…', + 4: h'BBC77E6CCA981A3AD0C3E544EDF86…', + 6: h'BB6E6C68D1B4B4EC5A2AE9206F5t4…', + 7: h'F8A5966E6DAC9970E0334D8F75E25…', + 8: h'DEFDF1AA746718016EF1B94BFE5R6…' + }, + "eu.europa.ec.eudiw.pid.it.1": { + 9: h'F9EE4D36F67DBD75E23311AC1C29…' + } + }, + "deviceKeyInfo": { + "deviceKey": { + 1: 2, % kty:EC2 (Eliptic curves with x and y coordinate pairs) + -1: 1, % crv:p256 + -2: h'B820963964E53AF064686DD9218303494A…', % x-coordiantes + -3: h'0A6DA0AF437E2943F1836F31C678D89298E9…'% y-ccordiantes + } + }, + "digestAlgorithm": "SHA-256" + } + >>) + >>, + h'1AD0D6A7313EFDC38FCD765852FA2BD43DEBF48BF5A580D' + ], + "nameSpaces": { + "eu.europa.ec.eudiw.pid.1": [ + 24(<< + { + "digestID": 1, + "random": h'E0B70BCEFBD43686F345C9ED429343AA', + "elementIdentifier": "expiry_date", + "elementValue": 1004("2024-02-22") + } + >>), + 24(<< + { + "digestID": 2, + "random": h'AE84834F389EE69888665B90A3E4FCCE', + "elementIdentifier": "issue_date", + "elementValue": 1004("2023-02-22") + } + >>), + 24(<< + { + "digestID": 3, + "random": h'960CB15A2EA9B68E5233CE902807AA95', + "elementIdentifier": "issuing_country", + "elementValue": "IT" + } + >>), + 24(<< + { + "digestID": 4, + "random": h'9D3774BD5994CCFED248674B32A4F76A', + "elementIdentifier": "issuing_authority", + "elementValue": "Ministero dell'Interno" + } + >>), + 24(<< + { + "digestID": 5, + "random": h'EB12193DC66C6174530CDC29B274381F', + "elementIdentifier": "given_name", + "elementValue": "Mario" + } + >>)), + 24(<< + { + "digestID": 6, + "random": h'DB143143538F3C8D41DC024F9CB25C9D', + "elementIdentifier": "family_name", + "elementValue": "Rossi" + } + >>), + 24(<< + { + "digestID": 7, + "random": h'6059FF1CE27B4997B4ADE1DE7B01DC60', + "elementIdentifier": "birth_date", + "elementValue": 1004("1956-01-12")% the tag 1004 defines the value + is a full date + } + >>), + 24(<< + { + "digestID": 8, + "random": h'53C15C57B3B076E788795829190220B4', + "elementIdentifier": "unique_id", + "elementValue": "xxxxxxxx-xxx-xxxx-xxxxxxxxxxxx" + } + >>) + ], + "eu.europa.ec.eudiw.pid.it.1": [ + 24(<< + { + "digestID": 9, + "random": h'11aa7273a2d2daa973f5951f0c34c2fbae', + "elementIdentifier": "tax_id_number", + "elementValue": "TINIT-XXXXXXXXXXXXXXX" + } + >>) + ] + } + } + } + ] + } + + + diff --git a/rp-vp-kid/en/_sources/pid-eaa-issuance.rst.txt b/rp-vp-kid/en/_sources/pid-eaa-issuance.rst.txt new file mode 100644 index 000000000..1b6df962d --- /dev/null +++ b/rp-vp-kid/en/_sources/pid-eaa-issuance.rst.txt @@ -0,0 +1,1224 @@ +.. include:: ../common/common_definitions.rst + +.. _pid_eaa_issuance.rst: + +PID/(Q)EAA Issuance ++++++++++++++++++++ + +This section describes the PID and (Q)EAAs issuance flow with an high level of security. +The relevant entities and interfaces involved in the issuance flow are: + + - *Wallet Provider*: The entity responsible for releasing an EUDI Wallet Solution. The Wallet Provider issues the Wallet Attestations to its Wallet Instances through an Attestation Service. The Wallet Attestation certifies the genuinity and authenticity of the Wallet Instance and its compliance with the security and privacy requirements. + - *Wallet Solution*: Entire product and service owned by a Wallet Provider, offered to all the Users and certified as EUDI-compliant by a Conformity Assessment Body (CAB). + - *Wallet Instance*: Instance of a Wallet Solution, installed on the User device. The Wallet Instance provides graphical interfaces for User interaction with Relying Parties, PID, (Q)EAA Providers and the Wallet Provider. + - *PID Provider*: The entity that issues the eIDAS Person Identification Data (PID). It is composed of: + + - OpenID4VCI Component: based on the "OpenID for Verifiable Credential Issuance" specification ` [OIDC4VCI. Draft 13] `_ to release the PID. + - National eID Relying Party: The component to authenticate the User with the national Digital Identity Providers, based on OpenID Connect Core 1.0 or SAML2. + - National Identity Provider: It represents preexisting identity systems based on SAML2 or OpenID Connect Core 1.0, already in production in each Member State (eg: the Italian SPID and CIE id schemes notified eIDAS with *LoA* **High**, see `SPID/CIE OpenID Connect Specifications `_). + + - *(Q)EAA Provider*: It represents the Issuer of (Q)EAAs. It is composed of: + + - OpenID4VCI Component: based on the "OpenID for Verifiable Credential Issuance" specification to release (Q)EAAs. + - Relying Party: Component to authenticate the User with the PID. The (Q)EAA Provider acts as a Verifier by sending a presentation request to the Wallet Instance, according to [`OpenID4VP`_]. The Wallet Instance MUST have a valid PID, obtained in a previous time, to get authenticated with the (Q)EAA Provider. + +High-Level PID flow +------------------- + +The :numref:`fig_High-Level-Flow-ITWallet-PID-Issuance` shows a general architecture and highlights the main operations involved in the issuance of a PID. + +.. _fig_High-Level-Flow-ITWallet-PID-Issuance: +.. figure:: ../../images/High-Level-Flow-ITWallet-PID-Issuance.svg + :figwidth: 100% + :align: center + + PID Issuance - General architecture and high level flow. + +Below the description of the steps represented in the previous picture: + + 0. **Wallet Instance Setup**: the first time the Wallet Instance is started a preliminary setup phase is carried out. It consists of the release of the Wallet Attestation issued by Wallet Attestation Service asserting the genuineness and the compliance of the Wallet Instance with the shared trust framework. The Wallet Attestation binds the public key provided by the Wallet Instance, related to one of the private keys generated by the Wallet Instance. + 1. **PID/(Q)EAA Provider Discovery**: the Wallet Instance discovers the trusted Digital Credential Issuers using the Federation API (e.g.: using the Subordinate Listing Endpoint of the Trust Anchor and its Intermediates), inspecting the Credential Issuer metadata and Trust Marks for filtering the PID Provider. + 2. **PID Provider Metadata**: the Wallet Instance establishes the trust to the PID Provider according to the Trust Model and obtains the Metadata that discloses the formats of the PID, the algorithms supported, and any other parameter required for interoperability needs. + 3. **PID Request**: using the Authorization Code Flow defined in `[OIDC4VCI. Draft 13] `_ the Wallet Instance requests the PID to the PID Provider. + 4. **User Authentication**: the PID Provider authenticates the User with LoA High, acting as an Identity and Access Management Proxy to the National eID system. + 5. **PID Issuance**: the User is authenticated with LoA High and the PID Provider releases a PID bound to the key material held by the requesting Wallet Instance. + +In the following sections the steps from 1 to 5 are further expanded into more technical details. + +High-Level (Q)EAA flow +---------------------- + +The :numref:`fig_High-Level-Flow-ITWallet-QEAA-Issuance` shows a general architecture and highlights the main operations involved in the issuance of a (Q)EAA, following the assumptions listed below: + + - the User has a valid PID stored in their own Wallet Instance; + - the (Q)EAA requires a high security implementation profile. + +.. _fig_High-Level-Flow-ITWallet-QEAA-Issuance: +.. figure:: ../../images/High-Level-Flow-ITWallet-QEAA-Issuance.svg + :figwidth: 70% + :align: center + + (Q)EAA Issuance - General architecture and high level flow + +Below the description of the most relevant operations involved in the (Q)EAA issuance: + + 1. **Discovery of the trusted (Q)EAA Provider**: the Wallet Instance obtains the list of the trusted (Q)EAA Provider using the Federation API (e.g.: using the Subordinate Listing Endpoint of the Trust Anchor and its Intermediates), then inspects the metadata and Trust Mark looking for the Digital Credential capabilities of each (Q)EAA Provider. + 2. **(Q)EAA Provider Metadata**: the Wallet Instance establishes the trust to the (Q)EAA Provider according to the Trust Model, obtaining the Metadata that discloses the formats of the (Q)EAA, the algorithms supported, and any other parameter required for interoperability needs. + 3. **(Q)EAA Request**: using the Authorization Code Flow , defined in `[OIDC4VCI. Draft 13] `_, the Wallet Instance requests a (Q)EAA to the (Q)EAA Provider. + 4. **User Authentication**: the (Q)EAA Provider, acting as a Verifier (Relying Party), authenticates the User evaluating the presentation of the PID. + 5. **(Q)EAA Issuance**: the User is authenticated with a valid PID and the (Q)EAA Provider releases a (Q)EAA bound to the key material held by the requesting Wallet Instance. + + +Detailed Flow +------------- + +The PID/(Q)EAA Issuance phase uses the **Authorization Code Flow** with the following specifications: + +* **Pushed Authorization Requests** (PAR) [:rfc:`9126`]; +* **PKCE** (Proof Key for Code Exchange, :rfc:`7636`) as recommended in `[OIDC4VCI. Draft 13. Section 3.4] `_. + +In this section a *Wallet Initiated Flow* is outlined, where the User receives the PID/(Q)EAA directly in response to the Credential Request. + +.. warning:: + + All the non-normative examples are referred to the PID Provider issuance flow. + +.. _fig_Low-Level-Flow-ITWallet-PID-QEAA-Issuance: + +.. figure:: ../../images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg + :figwidth: 100% + :align: center + :target: https://www.plantuml.com/plantuml/svg/bLJVRzis47xdNt587vO0DlPke4MTn6kC5OEHfSXB086HplOj4gcHnwZUm_xs7KLPfkQqQ8C0KSZxyNtVVSUFdhNZqDHA1xOcDC_eb6hbZ4fgjM6u-EBHNO3s49Hwjb_JmIyUV2DHxTuQl81tdsctv-iwu3JtsjbkJDVJkqTTryYmDWB1bDZ7T0fD1TBbVnWswrlOEFjArL2CbFnqCFy0OG7scJKPEDZWG29LWBbST0iue5VA6Si8zXKTTF3kyMxzi5931kyHQl8CTjj_FxZW6Il8s_a8gQyX3USVf5rfpPPSqsTuhB5aiYQMoDEK2W92CDYNAOGPYLhhJtSFd-vNgp_KpHxBbqaca0SXFuBw3ULGzpsqgOvaYJqqoBhIh7E449c3W7Ie6M7p-yrA05S8qfosXAulyhXUpZTsCyIJn6-Mzt2FVmVq39TF1i2XRwtnMF2XnLayAMj2mmLLwJyfMfJxE4IpmpUE2e6tjodOfSfv6UqzkiXgsY2_UIym_nsWFfaho7LyIyNag1yHSaZmj3EQWyCXv5XXoOoUJvf7iLzrJHNn0JAr5IMdZVeboU1ou5i4HpF0hoqvz0MPgsJQw5gzW6KGVHpza_gCufzaXgpCbGgwpwIVJbGJtMRXk0J1HpT8BScYCXNhYFU0wzlbdt0dAzspBoCdm-Uy1T4Pc562Q8OPH1Nb3ta_4kX-9Ybpz0vD71_2hTW1Nl3mpRlMMRlDVGvRwwOxnlO53GYZrf9GonRXGMv6KPCUMT7ByqNOEMquCx6jicquRjstdVy-EBCWvEr2lAeRlx1n98iKEnzZvp5syLV7y-FDoQDI_BkxCwnWHGxBtXDFqOcKn4kCyo7eiaJlYrwYML8gqSkSF8EoCDQKE7uKcStFtw6adlosrdkf7iT-EMJsuTFuNFApsKb85Ishwt60sVnkJhVdGyofzGR9HtkgMrIu9KEzjh5_etcMegxUUeEkFtzPgNlSaUUuKNKTtv8CvjnXBQGgK6HIDIdSyqhsIBltgyDNcpuXVsI6EUNCic4DwB9kFpmQ4VNqgaKnefs2XpA-ZLcSP-joEkgZW0jD_Hy0 + + PID/(Q)EAA Issuance - Detailed flow + + +**Steps 1-4 (Discovery):** The User selects the PID/(Q)EAA Provider using the Wallet Instance, the Metadata for the selected PID/(Q)EAA Provider are processed by the Wallet Instance. + +.. note:: + + **Federation Check:** The Wallet Instance needs to check if the PID/(Q)EAA Provider is part of the Federation, obtaining its protocol specific Metadata. A non-normative example of a response from the endpoint **.well-known/openid-federation** with the **Entity Configuration** and the **Metadata** of the PID/(Q)EAA Provider is represented within the section `Entity Configuration Credential Issuer`_. + +**Steps 5-6 (PAR Request):** The Wallet Instance: + + * creates a fresh PKCE code verifier, Wallet Attestation Proof of Possession, and ``state`` parameter for the *Pushed Authorization Request*. + * provides to the PID/(Q)EAA Provider PAR endpoint the parameters previously listed above, using the ``request`` parameter (hereafter Request Object) according to :rfc:`9126` Section 3 to prevent Request URI swapping attack. + * MUST create the ``code_verifier`` with enough entropy random string using the unreserved characters with a minimum length of 43 characters and a maximum length of 128 characters, making it impractical for an attacker to guess its value. The value MUST be generated following the recommendation in Section 4.1 of :rfc:`7636`. + * signs this request using the private key that is created during the setup phase to obtain the Wallet Attestation. The related public key that is attested by the Wallet Provider is provided within the Wallet Attestation ``cnf`` claim. + * MUST create the value of the ``client_assertion`` parameter according to OAuth 2.0 Attestation-based Client Authentication [`oauth-attestation-draft `_], since in this flow the Pushed Authorization Endpoint is a protected endpoint. The ``client_assertion`` value MUST NOT contain more or less than precisely two JWTs separated with the ``~`` character. The first JWT MUST be the Wallet Attestation JWT and the second JWT MUST be the Wallet Attestation Proof of Possession. + * specifies the types of the requested credentials using the ``authorization_details`` [RAR :rfc:`9396`] parameter. + +The PID/(Q)EAA Provider performs the following checks upon the receipt of the PAR request: + + 1. It MUST validate the signature of the Request Object using the algorithm specified in the ``alg`` header parameter (:rfc:`9126`, :rfc:`9101`) and the public key retrieved from the Wallet Attestation (``cnf.jwk``) referenced in the Request Object, using the ``kid`` JWS header parameter. + 2. It MUST check that the used algorithm for signing the request in the ``alg`` header is one of the listed within the Section `Cryptographic Algorithms `_. + 3. It MUST check that the ``client_id`` in the request body of the PAR request matches the ``client_id`` claim included in the Request Object. + 4. It MUST check that the ``iss`` claim in the Request Object matches the ``client_id`` claim in the Request Object (:rfc:`9126`, :rfc:`9101`). + 5. It MUST check that the ``aud`` claim in the Request Object is equal to the PID/(Q)EAA Provider authorization endpoint uri (:rfc:`9126`, :rfc:`9101`). + 6. It MUST reject the PAR request, if it contains the ``request_uri`` parameter (:rfc:`9126`). + 7. It MUST check that the Request Object contains all the mandatory parameters which values are validated according to :ref:`Table of the HTTP parameters ` [derived from :rfc:`9126`]. + 8. It MUST check that the Request Object is not expired, checking the ``exp`` claim (:rfc:`9126`). + 9. It MUST check that the Request Object was issued in a previous time than the value exposed in the ``iat`` claim. It SHOULD reject the request if the ``iat`` claim is far from the current time (:rfc:`9126`) of more than `5` minutes. + 10. It MUST check that the ``jti`` claim in the Request Object has not been used before by the Wallet Instance identified by the ``client_id``. This allows the PID/(Q)EAA Provider to mitigate replay attacks (:rfc:`7519`). + 11. It MUST validate the ``client_assertion`` parameter based on Sections 4.1 and 4.2 of [`oauth-attestation-draft `_]. + +Below a non-normative example of the PAR. + +.. code-block:: http + + POST /as/par HTTP/1.1 + Host: pid-provider.example.org + Content-Type: application/x-www-form-urlencoded + + response_type=code + &client_id=$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$ + &code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM + &code_challenge_method=S256 + &request=$SIGNED-JWT + &client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation + &client_assertion=$WIA~WIA-PoP + +Below an non-normative example of the Wallet Attestation Proof of Possession without encoding and signature applied: + +.. code-block:: + + { + "alg": "ES256", + "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "typ": "jwt-client-attestation-pop", + } + . + { + "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "aud": "https://pid-provider.example.org/par-endpoint", + "jti": "ad25868c-8377-479b-8094-46fb1e797625", + "iat": 1686645115, + "exp": 1686652315 + } + +Below an non-normative example of the signed Request Object without encoding and signature applied: + +.. code-block:: + + { + "alg": "ES256", + "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc", + } + . + { + "iss":"$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$", + "aud":"https://pid-provider.example.org", + "exp":1672422065, + "iat": 1672418465, + "jti":"ac80df576e7109686717bf50b869e882", + "response_type":"code", + "client_id":"$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$", + "state":"fyZiOL9Lf2CeKuNT2JzxiLRDink0uPcd", + "code_challenge":"E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM", + "code_challenge_method":"S256", + "authorization_details":[ + { + "type": "openid_credential", + "credential_configuration_id": "PersonIdentificationData" + } + ], + "redirect_uri":"eudiw://start.wallet.example.org", + } + + +.. note:: + + **Federation Check:** The PID/(Q)EAA Provider MUST check that the Wallet Provider is part of the federation. + + +.. note:: + The PID/(Q)EAA Provider MUST validate the signature of the the Wallet Attestation and that it is not expired. + + +**Step 7 (PAR Response):** The PID/(Q)EAA Provider provides a one-time use ``request_uri`` value. The issued ``request_uri`` value must be bound to the client identifier (``client_id``) that was provided in the Request Object. + + +.. note:: + The entropy of the ``request_uri`` MUST be sufficiently large. The adequate shortness of the validity and the entropy of the ``request_uri`` depends on the risk calculation based on the value of the resource being protected. The validity time SHOULD be less than a minute, and the ``request_uri`` MUST include a cryptographic random value of 128 bits or more (:rfc:`9101`). The entire ``request_uri`` SHOULD NOT exceed 512 ASCII characters due to the following two main reasons (:rfc:`9101`): + + 1. Many phones on the market still do not accept large payloads. The restriction is typically either 512 or 1024 ASCII characters. + 2. On a slow connection such as a 2G mobile connection, a large URL would cause a slow response; therefore, the use of such is not advisable from the user-experience point of view. + +The PID/(Q)EAA Provider returns the issued ``request_uri`` to the Wallet Instance. A non-normative example of the response is shown below. + +.. code-block:: http + + HTTP/1.1 201 Created + Cache-Control: no-cache, no-store + Content-Type: application/json + + { + "request_uri":"urn:ietf:params:oauth:request_uri:bwc4JK-ESC0w8acc191e-Y1LTC2", + "expires_in": 60 + } + + +**Steps 8-9 (Authorization Request):** The Wallet Instance sends an authorization request to the PID/(Q)EAA Provider Authorization Endpoint. Since parts of this Authorization Request content, e.g., the ``code_challenge`` parameter value, are unique to a particular Authorization Request, the Wallet Instance MUST only use a ``request_uri`` value once (:rfc:`9126`); The PID/(Q)EAA Provider performs the following checks upon the receipt of the Authorization Request: + + 1. It MUST treat ``request_uri`` values as one-time use and MUST reject an expired request. However, it MAY allow for duplicate requests due to a user reloading/refreshing their user-agent (derived from :rfc:`9126`). + 2. It MUST identify the request as a result of the submitted PAR (derived from :rfc:`9126`). + 3. It MUST reject all the Authorization Requests that do not contain the ``request_uri`` parameter as the PAR is the only way to pass the Authorization Request from the Wallet Instance (derived from :rfc:`9126`). + + +.. code-block:: http + + GET /authorize?client_id=$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$&request_uri=urn%3Aietf%3Aparams%3Aoauth%3Arequest_uri%3Abwc4JK-ESC0w8acc191e-Y1LTC2 HTTP/1.1 + Host: pid-provider.example.org + + +.. note:: + + **User Authentication and Consent:** The PID Provider performs the User authentication based on the requirements of eIDAS LoA High by means of national notified eIDAS scheme and requires the User consent for the PID issuance. + The (Q)EAA Provider performs the User authentication requesting a valid PID to the Wallet Instance. The (Q)EAA Provider MUST use [`OpenID4VP`_] to dynamically request the presentation of the PID. From a protocol perspective, the (Q)EAA Provider acts as a Relying Party, providing the presentation request to the Wallet Instance. The Wallet Instance MUST have a valid PID obtained prior to start the transaction with the (Q)EAA Provider. + + +**Steps 10-11 (Authorization Response):** The PID/(Q)EAA Provider sends an authorization ``code`` together with ``state`` and ``iss`` parameters to the Wallet Instance. The Wallet Instance performs the following checks on the Authorization Response: + + 1. It MUST check the Authorization Response contains all the defined parameters according to :ref:`Table of the HTTP Response parameters `. + 2. It MUST check the returned value by the PID/(Q)EAA Provider for ``state`` parameter is equal to the value sent by Wallet Instance in the Request Object (:rfc:`6749`). + 3. It MUST check that the URL of PID/(Q)EAA Provider in ``iss`` parameter is equal to the URL identifier of intended PID/(Q)EAA Provider that the Wallet Instance start the communication with (:rfc:`9027`). + +.. note:: + + The Wallet Instance redirect URI is a universal or app link registered with the local operating system, so this latter will resolve it and pass the response to the Wallet Instance. + +.. code-block:: http + + HTTP/1.1 302 Found + Location: https://start.wallet.example.org?code=SplxlOBeZQQYbYS6WxSbIA&state=fyZiOL9Lf2CeKuNT2JzxiLRDink0uPcd&iss=https%3A%2F%2Fpid-provider.example.org + +**Steps 12-13 (DPoP Proof for Token Endpoint)**: The Wallet Instance MUST create a new key pair for the DPoP and a fresh DPoP Proof JWT following the instruction provided in Section 4 of (:rfc:`9449`) for the token request to the PID/(Q)EAA Provider. The DPoP Proof JWT is signed using the private key for DPoP created by Wallet Instance for this scope. DPoP binds the Access Token to a certain Wallet Instance (:rfc:`9449`) and mitigates the misuse of leaked or stolen Access Tokens at the Credential Endpoint. + +**Step 14 (Token Request):** The Wallet Instance sends a token request to the PID/(Q)EAA Provider Token Endpoint with a *DPoP Proof JWT* and the parameters: ``code``, ``code_verifier``, and OAuth 2.0 Attestation based Client Authentication (``client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation`` and ``client_assertion=WIA~WIA-PoP``). +The ``client_assertion`` is signed using the private key that is created during the setup phase to obtain the Wallet Attestation. The related public key that is attested by the Wallet Provider is provided within the Wallet Attestation (``cnf`` claim). The PID/(Q)EAA Provider performs the following checks on the Token Request: + + 1. It MUST ensure that the Authorization ``code`` is issued to the authenticated Wallet Instance (:rfc:`6749`) and was not replied. + 2. It MUST ensure the Authorization ``code`` is valid and has not been previously used (:rfc:`6749`). + 3. It MUST ensure the ``redirect_uri`` matches the value included in the previous Request Object `OpenID.Core#TokenRequest `_. + 4. It MUST validate the DPoP Proof JWT, according to (:rfc:`9449`) Section 4.3. + +.. code-block:: http + + POST /token HTTP/1.1 + Host: pid-provider.example.org + Content-Type: application/x-www-form-urlencoded + DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik + VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR + nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE + QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj + oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia + WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg + 4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3Lg + + grant_type=authorization_code + &code=SplxlOBeZQQYbYS6WxSbIA + &code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk + &redirect_uri=https://start.wallet.example.org/cb + &client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation + &client_assertion=$WIA~WIA-PoP + +**Step 15 (Token Response):** The PID/(Q)EAA Provider validates the request, if successful an *Access Token* (bound to the DPoP key) and a fresh `c_nonce` are provided by the Issuer to the Wallet Instance. The parameter `c_nonce` is a string value, which MUST be unpredictable and is used later by the Wallet Instance in Step 18 to create the proof of possession of the key (*proof* claim) and it is the primary countermeasure against key proof replay attack. Note that, the received `c_nonce` value can be used to create the proof as long as the Issuer provides the Wallet Instance with a new `c_nonce` value. + +.. code-block:: + + HTTP/1.1 200 OK + Content-Type: application/json + Cache-Control: no-store + + { + "access_token": "Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU ...", + "token_type": "DPoP", + "expires_in": 2677, + "c_nonce": "tZign[...]snFbp", + "c_nonce_expires_in": 86400, + "authorization_details": [ + { + "type": "openid_credential", + "credential_configuration_id: "PersonIdentificationData" + } + } + ] + } + + +**Steps 16-17 (DPoP Proof for Credential Endpoint):** The Wallet Instance for requesting the Digital Credential creates a proof of possession with ``c_nonce`` obtained in **Step 15** and using the private key used for the DPoP, signing a DPoP Proof JWT according to (:rfc:`9449`) Section 4. The ``jwk`` value in the ``proof`` parameter MUST be equal to the public key referenced in the DPoP. + +**Step 18 (Credential Request):** The Wallet Instance sends a request for the Digital Credential to the PID/(Q)EAA Credential endpoint. This request MUST include the Access Token, DPoP Proof JWT, credential type, proof (which demonstrates possession of the key), and format parameters. The proof parameter MUST be an object that contains evidence of possession of the cryptographic key material to which the issued PID/(Q)EAA Digital Credential will be bound. To verify the proof, the PID/(Q)EAA Provider conducts the following checks at the Credential endpoint: + + 1. the JWT proof MUST include all required claims as specified in the table of Section :ref:`Token Request `; + 2. The key proof MUST be explicitly typed using header parameters as defined for the respective proof type; + 3. The header parameter alg MUST indicate a registered asymmetric digital signature algorithm, and MUST NOT be set to `none`; + 4. The signature on the key proof MUST be verified using the public key specified in the header parameter. + 5. The header parameter MUST NOT contain a private key. + 6. If a `c_nonce` value was previously provided by the server, the nonce claim in the JWT MUST match this `c_nonce` value. Furthermore, the creation time of the JWT, as indicated by the `iat` claim or a server-managed timestamp via the nonce claim, MUST be within an acceptable window of time as determined by the server. + + +.. note:: + + **PID/(Q)EAA Credential Schema and Status registration:** The PID/(Q)EAA Provider MUST register all the issued Credentials for their later revocation, if needed. + + +.. note:: + + It is RECOMMENDED that the public key contained in the ``jwt_proof`` be specifically generated for the requested Credential (fresh cryptographic key) to ensure that different issued Credentials do not share the same public key, thereby remaining unlinkable to each other. + +.. code-block:: + + POST /credential HTTP/1.1 + Host: pid-provider.example.org + Content-Type: application/json + Authorization: DPoP Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU + DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik + VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR + nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R + 1JEQSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiJlMWozVl9iS2ljOC1MQUVCIiwiaHRtIj + oiR0VUIiwiaHR1IjoiaHR0cHM6Ly9yZXNvdXJjZS5leGFtcGxlLm9yZy9wcm90ZWN0Z + WRyZXNvdXJjZSIsImlhdCI6MTU2MjI2MjYxOCwiYXRoIjoiZlVIeU8ycjJaM0RaNTNF + c05yV0JiMHhXWG9hTnk1OUlpS0NBcWtzbVFFbyJ9.2oW9RP35yRqzhrtNP86L-Ey71E + OptxRimPPToA1plemAgR6pxHF8y6-yqyVnmcw6Fy1dqd-jfxSYoMxhAJpLjA + { + "format": "vc+sd-jwt" + "credential_definition":{ + "type": ["PersonIdentificationData"] + }, + "proof": { + "proof_type": "jwt", + "jwt": "eyJraWQiOiJkaWQ6ZXhhbXBsZTplYm" + } + } + + +Where a non-normative example of the decoded content of the ``jwt`` parameter is represented below, +without encoding and signature. The JWS header: + +.. code-block:: JSON + + { + "alg": "ES256", + "typ": "openid4vci-proof+jwt", + "jwk": { + "kty": "EC", + "x": "l8tFrhx-34tV3hRICRDY9zCkDlpBhF42UQUfWVAWBFs", + "y": "9VE4jf_Ok_o64zbTTlcuNJajHmt6v9TDVrU0CdvGRDA", + "crv": "P-256" + } + + } + +And the JWS payload: + +.. code-block:: JSON + + { + "iss": "0b434530-e151-4c40-98b7-74c75a5ef760", + "aud": "https://pid-provider.example.org/credential", + "iat": 1504699136, + "nonce": "tZign...snFbp" + } + + +**Steps 19-21 (Credential Response):** The PID/(Q)EAA Provider MUST validate the *DPoP JWT Proof* based on the steps defined in Section 4.3 of (:rfc:`9449`) and whether the *Access Token* is valid and suitable for the requested PID/(Q)EAA. It also MUST validate the proof of possession for the key material the new credential SHALL be bound to, according to `OPENID4VCI`_ Section 7.2.2. If all checks succeed, the PID/(Q)EAA Provider creates a new Credential bound to the key material and provide it to the Wallet Instance. The Wallet Instance MUST perform the following checks before proceeding with the secure storage of the PID/(Q)EAA: + + 1. It MUST check that the PID Credential Response contains all the mandatory parameters and values are validated according to :ref:`Table of the credential response parameters `. + 2. It MUST check the PID integrity by verifying the signature using the algorithm specified in the ``alg`` header parameter of SD-JWT (:ref:`PID/(Q)EAA Data Model `) and the public key that is identified using using the ``kid`` header of the SD-JWT. + 3. It MUST check that the received PID (in credential claim) matches the schema defined in :ref:`PID/(Q)EAA Data Model `. + 4. It MUST process and verify the PID in SD-JWT VC format (according to `SD.JWT#Verification `_ Section 6.) or MDOC CBOR format. + 5. It MUST verify the Trust Chain in the header of SD-JWT VC to verify that the PID Provider is trusted. + +If the checks defined above are successful the Wallet Instance proceeds with the secure storage of the PID/(Q)EAA. + +.. code-block:: http + + HTTP/1.1 200 OK + Content-Type: application/json + Cache-Control: no-store + Pragma: no-cache + + { + "format": "vc+sd-jwt" + "credential" : "LUpixVCWJk0eOt4CXQe1NXK[...]WZwmhmn9OQp6YxX0a2L", + "c_nonce": "fGFF7[...]UkhLa", + "c_nonce_expires_in": 86400 + } + +Pushed Authorization Request Endpoint +------------------------------------- + +Pushed Authorization Request (PAR) Request +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The requests to the PID/(Q)EAA authorization endpoint MUST use the HTTP POST method with the parameters in the message body encoded in ``application/x-www-form-urlencoded`` format. The Pushed Authorization Endpoint is protected with OAuth 2.0 Attestation-based Client Authentication [`oauth-attestation-draft `_] and the following parameters MUST be provided: + +.. _table_http_request_claim: +.. list-table:: PAR http request parameters + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **response_type** + - MUST be set to ``code``. + - :rfc:`6749` + * - **client_id** + - MUST be set to the thumbprint of the ``jwk`` value in the ``cnf`` parameter inside the Wallet Attestation. + - :rfc:`6749` + * - **code_challenge** + - A challenge derived from the **code verifier** that is sent in the authorization request. + - :rfc:`7636#section-4.2`. + * - **code_challenge_method** + - A method that was used to derive **code challenge**. It MUST be set to ``S256``. + - :rfc:`7636#section-4.3`. + * - **request** + - It MUST be a signed JWT. The private key corresponding to the public one in the ``cnf`` parameter inside the Wallet Attestation MUST be used for signing the Request Object. + - `OpenID Connect Core. Section 6 `_ + * - **client_assertion_type** + - It MUST be set to ``urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation``. + - `oauth-attestation-draft `_. + * - **client_assertion** + - It MUST be set to a value containing the Wallet Attestation JWT and the Proof of Possession, separated with the ``~`` character. + - `oauth-attestation-draft `_. + +The JWT *Request Object* has the following JOSE header parameters: + +.. _table_request_object_claim: +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE header** + - **Description** + - **Reference** + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section `Cryptographic Algorithms `_ and MUST NOT be set to ``none`` or any symmetric algorithm (MAC) identifier. + - :rfc:`7516#section-4.1.1`. + * - **kid** + - Unique identifier of the ``jwk`` inside the ``cnf`` claim of Wallet Attestation as base64url-encoded JWK Thumbprint value. + - :rfc:`7638#section_3`. + +.. note:: + The parameter **typ**, if omitted, assumes the implicit value **JWT**. + + +The JWT payload is given by the following parameters: + +.. _table_jwt_request: +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - It MUST be set to the ``client_id``. + - :rfc:`9126` and :rfc:`7519`. + * - **aud** + - It MUST be set to the identifier of the PID/(Q)EAA Provider. + - :rfc:`9126` and :rfc:`7519`. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT. + - :rfc:`9126` and :rfc:`7519`. + * - **iat** + - UNIX Timestamp with the time of JWT issuance. + - :rfc:`9126` and :rfc:`7519`. + * - **response_type** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **client_id** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **state** + - Unique session identifier at the client side. This value will be returned to the client in the response, at the end of the authentication. It MUST be a random string composed by alphanumeric characters and with a minimum length of 32 digits. + - See `OpenID.Core#AuthRequest `_. + * - **code_challenge** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **code_challenge_method** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **authorization_details** + - Array of JSON Objects. Each JSON Object MUST include the following claims: + + - **type**: it MUST be set to ``openid_credential``, + - **credential_configuration_id**: JSON String. String specifying a unique identifier of the Credential being described in the `credential_configurations_supported` map in the Credential Issuer Metadata. For example, in the case of the PID, it MUST be set to ``PersonIdentificationData``. + - See [RAR :rfc:`9396`] and `[OIDC4VCI. Draft 13] `_. + * - **redirect_uri** + - Redirection URI to which the response is intended to be sent. It MUST be an universal or app link registered with the local operating system, so this latter will provide the response to the Wallet Instance. + - See `OpenID.Core#AuthRequest `_. + * - **client_assertion_type** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **client_assertion** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **jti** + - Unique identifier of the JWT that, together with the value contained in the ``iss`` claim, prevents the reuse of the JWT (replay attack). Since the `jti` value alone is not collision resistant, it MUST be identified uniquely together with its issuer. + - [:rfc:`7519`]. + +The JOSE header of the Wallet Attestation proof of possession MUST contain: + +.. _table_jwt_pop: +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE header** + - **Description** + - **Reference** + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section `Cryptographic Algorithms `_ and MUST NOT be set to ``none`` or any symmetric algorithm (MAC) identifier. + - :rfc:`7516#section-4.1.1`. + * - **kid** + - Unique identifier of the ``jwk`` inside the ``cnf`` claim of Wallet Attestation as base64url-encoded JWK Thumbprint value. + - :rfc:`7638#section_3`. + * - **typ** + - It MUST be set to ``jwt-client-attestation-pop`` + - Currently under discussion in [`oauth-attestation-draft `_]. + +The body of the Wallet Attestation proof of possession JWT MUST contain: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - Thumbprint of the JWK in the ``cnf`` parameter. + - :rfc:`9126` and :rfc:`7519`. + * - **aud** + - It MUST be set to the identifier of the PID/(Q)EAA Provider. + - :rfc:`9126` and :rfc:`7519`. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT. + - :rfc:`9126` and :rfc:`7519`. + * - **iat** + - UNIX Timestamp with the time of JWT issuance. + - :rfc:`9126` and :rfc:`7519`. + * - **jti** + - Unique identifier for the DPoP proof JWT. The value SHOULD be set using a *UUID v4* value according to [:rfc:`4122`]. + - [:rfc:`7519`. Section 4.1.7]. + +.. _sec_par: + +Pushed Authorization Request (PAR) Response +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +If the verification is successful, the PID/(Q)EAA Issuer MUST provide the response with a *201 HTTP status code*. The following parameters are included as top-level members in the HTTP response message body, using the ``application/json`` media type as defined in [:rfc:`8259`]. + +.. _table_http_response_claim: +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **request_uri** + - The request URI corresponding to the authorization request posted. This URI MUST be a single-use reference to the respective authorization request. It MUST contain some part generated using a cryptographically strong pseudorandom algorithm. The value format MUST be ``urn:ietf:params:oauth:request_uri:`` with ```` as the random part of the URI that references the respective authorization request data. + - [:rfc:`9126`]. + * - **expires_in** + - A JSON number that represents the lifetime of the request URI in seconds as a positive integer. + - [:rfc:`9126`]. + +If any errors occur during the PAR Request, the Authorization Server MUST return an error response as defined in :rfc:`9126#section-2.3`. The response MUST use *application/json* as the content type and MUST include the following parameters: + + - *error*. The error code. + - *error_description*. Text in human-readable form providing further details to clarify the nature of the error encountered. + +Below is a non-normative example of an error response. + +.. code:: + + HTTP/1.1 400 Bad Request + Content-Type: application/json + + { + "error": "invalid_request", + "error_description": + "The redirect_uri is not valid for the given client" + } + + + +Authorization endpoint +---------------------- + +The authorization endpoint is used to interact with the PID/(Q)EAA Issuer and obtain an authorization grant. +The authorization server MUST first verify the identity of the User that own the credential. + + +Authorization Request +^^^^^^^^^^^^^^^^^^^^^^^ + +The Authorization request is issued by the Web Browser in use by the Wallet Instance, the HTTP methods **POST** or **GET** are used. When the method **POST** is used, the parameters MUST be sent using the *Form Serialization*. When the method **GET** is used, the parameters MUST be sent using the *Query String Serialization*. For more details see `OpenID.Core#Serializations `_. + +The mandatory parameters in the HTTP authentication request are specified in the following table. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **client_id** + - It MUST be set as in the :ref:`Table of the HTTP parameters `. + - See :ref:`Table of the HTTP parameters `. + * - **request_uri** + - It MUST be set to the same value as obtained by PAR Response. See :ref:`Table of the HTTP PAR Response parameters `. + - [:rfc:`9126`]. + + +Authorization Response +^^^^^^^^^^^^^^^^^^^^^^^ + +The authentication response is returned by the PID/(Q)EAA authorization endpoint at the end of the authentication flow. + +If the authentication is successful the PID/(Q)EAA Issuer redirects the User by adding the following query parameters as required to the *redirect_uri*. The redirect URI MUST be an universal or app link registered with the local operating system, so this latter is able to provide the response to the Wallet Instance. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **code** + - Unique *Authorization Code* that the Wallet Instance submits to the Token Endpoint. + - [:rfc:`6749#section-4.1.2`], `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_ + * - **state** + - The Wallet Instance MUST check the correspondence with the ``state`` parameter value in the Request Object. It is defined as in the :ref:`Table of the JWT Request parameters `. + - [:rfc:`6749#section-4.1.2`]. + * - **iss** + - Unique identifier of the PID/(Q)EAA Issuer who created the Authentication Response. The Wallet Instance MUST validate this parameter. + - `OAuth 2.0 Authorization Server Issuer Identifier in Authorization Response `_, `[RFC7519, Section 4.1.1] `_. + +If any errors occur during the Authorization Request, the Authorization Server MUST return an error response as defined in :rfc:`6749#section-4.1.2.1`. The response MUST use *application/json* as the content type and MUST include the following parameters: + + - *error*. The error code. + - *error_description*. Text in human-readable form providing further details to clarify the nature of the error encountered. + +Token endpoint +-------------- + +The token endpoint is used by the Wallet Instance to obtain an Access Token by presenting an authorization grant, as +defined in :rfc:`6749`. The Token Endpoint is a protected endpoint with a client authentication based on the model defined in OAuth 2.0 Attestation-based Client Authentication [`oauth-attestation-draft `_]. + +.. _sec_token_request: + +Token Request +^^^^^^^^^^^^^^^ + +The request to the PID/(Q)EAA Token endpoint MUST be an HTTP request with method POST, with the body message encoded in ``application/x-www-form-urlencoded`` format. The Wallet Instance sends the Token endpoint request with ``client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation`` and ``client_assertion=WIA~WIA-PoP``. + +The Token endpoint MUST accept and validate the DPoP proof sent in the DPoP HTTP header. The Token endpoint MUST validate the DPoP proof according to Section 4.3 of the DPoP specifications (:rfc:`9449`). This mitigates the misuse of leaked or stolen Access Tokens at the credential endpoint. If the DPoP proof is invalid, the Token endpoint returns an error response, according to Section 5.2 of [:rfc:`6749`] with ``invalid_dpop_proof`` as the value of the error parameter. + +All the parameters listed below are REQUIRED: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **grant_type** + - It MUST be set to ``authorization_code``. + - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_. + * - **code** + - Authorization code returned in the Authentication Response. + - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_. + * - **redirect_uri** + - It MUST be set as in the Request Object :ref:`Table of the JWT Request parameters `. + - `Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants `_. + * - **code_verifier** + - Verification code of the **code_challenge**. + - `Proof Key for Code Exchange by OAuth Public Clients `_. + * - **client_assertion_type** + - It MUST be set to ``urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation``. + - `oauth-attestation-draft `_. + * - **client_assertion** + - It MUST be set to a value containing the Wallet Attestation JWT and the Proof of Possession JWT, separated with the ``~`` character (WIA~WIA-PoP). The Wallet Attestation Proof of Possession MUST contain the claims as defined in :ref:`Table of the JWT Wallet Attestation PoP `, Section :ref:`Pushed Authorization Request (PAR) Response`. + - `oauth-attestation-draft `_. + +A **DPoP Proof JWT** is included in the HTTP request using the ``DPoP`` header parameter containing a DPoP JWS. + +The JOSE header of a **DPoP JWT** MUST contain at least the following parameters: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE header** + - **Description** + - **Reference** + * - **typ** + - It MUST be equal to ``dpop+jwt``. + - [:rfc:`7515`] and [:rfc:`8725`. Section 3.11]. + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section :ref:`Cryptographic Algorithms ` and MUST NOT be set to ``none`` or with a symmetric algorithm (MAC) identifier. + - [:rfc:`7515`]. + * - **jwk** + - It represents the public key chosen by the Wallet Instance, in JSON Web Key (JWK) [:rfc:`7517`] format that the Access Token MUST be bound to, as defined in [:rfc:`7515`] Section 4.1.3. It MUST NOT contain a private key. + - [:rfc:`7517`] and [:rfc:`7515`]. + + +The payload of a **DPoP JWT Proof** MUST contain at least the following claims: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **jti** + - Unique identifier for the DPoP proof JWT. The value SHOULD be set using a *UUID v4* value according to [:rfc:`4122`]. + - [:rfc:`7519`. Section 4.1.7]. + * - **htm** + - The value of the HTTP method of the request to which the JWT is attached. + - [:rfc:`9110`. Section 9.1]. + * - **htu** + - The HTTP target URI, without query and fragment parts, of the request to which the JWT is attached. + - [:rfc:`9110`. Section 7.1]. + * - **iat** + - UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. + - [:rfc:`7519`. Section 4.1.6]. + + +Token Response +^^^^^^^^^^^^^^^ + +If the Token Request is successfully validated, the Authorization Server provides an HTTP Token Response with a *200 (OK)* status code. The Token Response MUST contain the following mandatory claims. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **access_token** + - The *DPoP-bound Access Token*, in signed JWT format, allows accessing the PID/(Q)EAA Credential Endpoint for obtaining the credential. + - :rfc:`6749`. + * - **token_type** + - Type of *Access Token* returned. It MUST be equal to ``DPoP``. + - :rfc:`6749`. + * - **expires_in** + - Expiry time of the *Access Token* in seconds. + - :rfc:`6749`. + * - **c_nonce** + - JSON string containing a ``nonce`` value to be used to create a *proof of possession* of key material when requesting a Credential. + - `[OIDC4VCI. Draft 13] `_. + * - **c_nonce_expires_in** + - JSON integer, it represents the lifetime in seconds of the **c_nonce**. + - `[OIDC4VCI. Draft 13] `_. + * - **authorization_details** + - JSON object, used to identify Credentials with the same metadata but different claimset/claim values and/or simplify the Credential request even when only one Credential is being issued. + - `[OIDC4VCI. Draft 13] `_. + +If any errors occur during the validation of the Token Request, the Authorization Server MUST return an error response as defined in :rfc:`6749#section-5.2`. + +.. code:: + + HTTP/1.1 400 Bad Request + Content-Type: application/json;charset=UTF-8 + Cache-Control: no-store + Pragma: no-cache + + { + "error":"invalid_client" + "error_description":"Client authentication failed" + } + + +Access Token +^^^^^^^^^^^^ + +A DPoP-bound Access Token is provided by the PID/(Q)EAA Token endpoint as a result of a successful token request. The Access Token is encoded in JWT format, according to [:rfc:`7519`]. The Access Token MUST have at least the following mandatory claims and it MUST be bound to the public key that is provided by the DPoP proof. This binding can be accomplished based on the methodology defined in Section 6 of (:rfc:`9449`). + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - It MUST be an HTTPS URL that uniquely identifies the PID/(Q)EAA Issuer. The Wallet Instance MUST verify that this value matches the PID/(Q)EAA Issuer where it has requested the credential. + - [:rfc:`9068`], `[RFC7519, Section 4.1.1] `_. + * - **sub** + - It identifies the subject of the JWT. It MUST be set to the value of the ``sub`` field in the PID/(Q)EAA SD-JWT-VC. + - [:rfc:`9068`], [:rfc:`7519`] and [`OpenID.Core#SubjectIDTypes `_]. + * - **aud** + - It MUST be set to the URL of Credential Endpoint of the PID/(Q)EAA Provider. + - [:rfc:`9068`]. + * - **iat** + - UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. + - [:rfc:`9068`], [:rfc:`7519`. Section 4.1.6]. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in :rfc:`7519`. + - [:rfc:`9068`], [:rfc:`7519`]. + * - **jti** + - It MUST be a String in *uuid4* format. Unique Token ID identifier that the RP SHOULD use to prevent reuse by rejecting the Token ID if already processed. + - [:rfc:`9068`], [:rfc:`7519`]. + * - **jkt** + - JWK SHA-256 Thumbprint Confirmation Method. The value of the jkt member MUST be the base64url encoding (as defined in [RFC7515]) of the JWK SHA-256 Thumbprint of the DPoP public key (in JWK format) to which the Access Token is bound. + - [:rfc:`9449`. Section 6.1] and [:rfc:`7638`]. + + +Credential endpoint +------------------- + +The Credential Endpoint issues a Credential upon the presentation of a valid Access Token, as defined in `OPENID4VCI`_. + + +Credential Request +^^^^^^^^^^^^^^^^^^^ + +The Wallet Instance when requests the PID/(Q)EAA to the PID/(Q)EAA Credential endpoint, MUST use the following parameters in the message body of the HTTP POST request, using the `application/json` media type. + +The Credential endpoint MUST accept and validate the *DPoP proof* sent in the DPoP HTTP Header parameter, according to the steps defined in (:rfc:`9449`) Section 4.3. The *DPoP proof* in addition to the values that are defined in the Token Endpoint section MUST contain the following claim: + + - **ath**: hash value of the Access Token encoded in ASCII. The value MUST use the base64url encoding (as defined in Section 2 of :rfc:`7515`) with the SHA-256 algorithm. + +If the *DPoP proof* is invalid, the Credential endpoint returns an error response per Section 5.2 of [:rfc:`6749`] with `invalid_dpop_proof` as the value of the error parameter. + +.. warning:: + The Wallet Instance MUST create a **new DPoP proof** for the Credential request and MUST NOT use the previously created proof for the Token Endpoint. + + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **credential_definition** + - JSON object containing the detailed description of the Credential type. It MUST have at least the **type** sub claims which is a JSON array containing the type values the Wallet SHALL request in the Credential Request. It MUST be set in accordance to the type of the requested PID/(Q)EAA that is obtained from the PID/(Q)EAA Issuer metadata. In the case of the PID it MUST be set to ``PersonIdentificationData``. + - `[OIDC4VCI. Draft 13] `_. + * - **format** + - Format of the Credential to be issued. This MUST be `vc+sd-jwt`. + - `[OIDC4VCI. Draft 13] `_. + * - **proof** + - JSON object containing proof of possession of the key material the issued credential shall be bound to. The proof object MUST contain the following mandatory claims: + + - **proof_type**: JSON string denoting the proof type. It MUST be `jwt`. + - **jwt**: the JWT used as proof of possession. + - `[OIDC4VCI. Draft 13] `_. + +.. note:: + + If the **format** value is `mso_mdoc`, the credential request MUST contain the ``doctype`` claim which is a JSON string identifying the credential type according to `EIDAS-ARF`_ . See Appendix E.2. of `[OIDC4VCI. Draft 13] `_ for more details. + + +The JWT proof type MUST contain the following parameters for the JOSE header and the JWT body: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE Header** + - **Description** + - **Reference** + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section :ref:`Cryptographic Algorithms ` and MUST NOT be set to ``none`` or to a symmetric algorithm (MAC) identifier. + - `[OIDC4VCI. Draft 13] `_, [:rfc:`7515`], [:rfc:`7517`]. + * - **typ** + - It MUST be set to `openid4vci-proof+jwt`. + - `[OIDC4VCI. Draft 13] `_, [:rfc:`7515`], [:rfc:`7517`]. + * - **jwk** + - Representing the public key chosen by the Wallet Instance, in JSON Web Key (JWK) [:rfc:`7517`] format that the PID/(Q)EAA shall be bound to, as defined in Section 4.1.3 of [:rfc:`7515`]. + - `[OIDC4VCI. Draft 13] `_, [:rfc:`7515`], [:rfc:`7517`]. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - The value of this claim MUST be the **client_id** of the Wallet Instance. + - `[OIDC4VCI. Draft 13] `_, `[RFC7519, Section 4.1.1] `_. + * - **aud** + - The value of this claim MUST be the identifier URL of the PID/(Q)EAA Issuer. + - `[OIDC4VCI. Draft 13] `_. + * - **iat** + - UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in :rfc:`7519`. + - `[OIDC4VCI. Draft 13] `_, [:rfc:`7519`. Section 4.1.6]. + * - **nonce** + - The value type of this claim MUST be a string, where the value is a **c_nonce** provided by the PID/(Q)EAA Issuer in the Token response. + - `[OIDC4VCI. Draft 13] `_. + + +Credential Response +^^^^^^^^^^^^^^^^^^^^ + +Credential Response to the Wallet Instance MUST be sent using `application/json` media type. If the Credential Request is successfully validated, the PID/(Q)EAA Provider MUST return HTTP response with a *200 (OK)* status code and MUST contain the following mandatory claims: + +.. _table_credential_response_claim: +.. list-table:: Credential http response parameters + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **format** + - Format of the Credential to be issued. This MUST be set to `vc+sd-jwt` when the credential type is SD-JWT. + - `[OIDC4VCI. Draft 13] `_. + * - **credential** + - Contains the issued PID/(Q)EAA. When the credential type is SD-JWT, it MUST be an SD-JWT JSON Object (see Section :ref:`PID/(Q)EAA Data Model `). + - Appendix E in `[OIDC4VCI. Draft 13] `_. + * - **c_nonce** + - JSON string containing a ``nonce`` value to be used to create a *proof of possession* of the key material when requesting a further Credential or for the renewal of a credential. + - `[OIDC4VCI. Draft 13] `_. + * - **c_nonce_expires_in** + - JSON integer corresponding to the **c_nonce** lifetime in seconds. + - `[OIDC4VCI. Draft 13] `_. + +.. note:: + + If the **format** value is `mso_mdoc`, the **credential** value MUST be a base64url-encoded JSON string according to Appendix E of `[OIDC4VCI. Draft 13] `_. + + +If the Credential Request is invalid, the PID/(Q)EAA Provider MUST return an error response as defined in `[OIDC4VCI. Draft 13] `. The response MUST use the content type *application/json* and MUST include the following parameters: + + - *error*. The error code. + - *error_description*. Text in human-readable form providing further details to clarify the nature of the error encountered. + +.. code:: + + HTTP/1.1 400 Bad Request + Content-Type: application/json + Cache-Control: no-store + + { + "error": "invalid_proof" + "error_description":"The proof field is not present or the provided key proof is invalid or not bound to a nonce provided by the Credential Issuer." + } + + +.. _Entity Configuration Credential Issuer: + +Entity Configuration Credential Issuer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Below is a non-normative example of an Entity Configuration of a PID Provider containing a metadata for + + - `federation_entity` + - `oauth_authorization_server` + - `openid_credential_issuer` + - `openid_relying_party` + +.. code-block:: http + + HTTP/1.1 200 OK + Content-Type: application/entity-statement+jwt + + { + + "alg": "ES256", + "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", + "typ": "entity-statement+jwt" + + } + . + { + "exp": "1649610249", + "iat": "1649437449", + "iss": "https://pid-provider.example.org", + "sub": "https://pid-provider.example.org", + "jwks": { + "keys": [{ + "kty": "RSA", + "use": "sig", + "n": "1Ta-sE ...", + "e": "AQAB", + "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs" + }] + }, + "authority_hints": ["https://superior-entity.example.org/federation"], + "metadata": { + "federation_entity": { + "organization_name": "PID Provider Organization Example", + "homepage_uri": "https://pid-provider.example.org", + "policy_uri": "https://pid-provider.example.org/privacy_policy", + "tos_uri": "https://pid-provider.example.org/info_policy", + "logo_uri": "https://pid-provider.example.org/logo.svg", + "contacts": ["ops@pid-provider.example.org"], + "federation_resolve_endpoint": "https://pid-provider.example.org/resolve" + }, + "oauth_authorization_server": { + "authorization_endpoint": "https://pid-provider.example.org/authorization", + "pushed_authorization_request_endpoint": "https://pid-provider.example.org/connect/par", + "dpop_signing_alg_values_supported": ["ES256", "ES512"], + "token_endpoint": "https://pid-provider.example.org/token", + "introspection_endpoint": "https://pid-provider.example.org/introspection", + "client_registration_types_supported": ["automatic"], + "code_challenge_methods_supported": ["S256"], + "authorization_details_types_supported":[ + "openid_credential", + ], + "acr_values_supported": [ + "https://www.spid.gov.it/SpidL2", + "https://www.spid.gov.it/SpidL3" + ], + "grant_types_supported": ["authorization_code"], + "issuer": "https://pid-provider.example.org", + "jwks": { + "keys": [ + { + "kty": "EC", + "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs" + // other claims ... + } + ] + }, + "scopes_supported": [ + "PersonIdentificationData" + ], + "request_parameter_supported":true, + "request_uri_parameter_supported":false, + "response_types_supported": ["code"], + "subject_types_supported": [ + "pairwise", + ], + "token_endpoint_auth_methods_supported": [ + "attest_jwt_client_auth" + ], + "token_endpoint_auth_signing_alg_values_supported": [ + "ES256", + "ES384", + "ES512" + ], + "request_object_signing_alg_values_supported": [ + "ES256", + "ES384", + "ES512" + ] + }, + "openid_credential_issuer": { + "credential_issuer": "https://pid-provider.example.org", + "credential_endpoint": "https://pid-provider.example.org/credential", + "revocation_endpoint": "https://pid-provider.example.org/revoke", + "status_attestation_endpoint": "https://pid-provider.example.org/status", + "display": [ + { + "name": "PID Provider Italiano di esempio", + "locale": "it-IT" + }, + { + "name": "Example PID Provider", + "locale": "en-US", + "logo": { + "uri": "https://pid-provider.example.org/public/logo.svg", + "alt_text": "logo di questo PID Provider" + }, + } + ], + "jwks": { + "keys": [ + { + "crv": "P-256", + "kty": "EC", + "x": "newK5qDYMekrCPPO-yEYTdJVWJMTzasMavt2vm1Mb-A", + "y": "VizXaLO6dzeesZPxfpGZabTK3cTXtBUbIiQpmiYRtSE", + "kid": "ff0bded045fe63fe5d1d64dd83b567e0" + } + ] + }, + "credential_configurations_supported": [ + { + "format": "vc+sd-jwt", + "cryptographic_binding_methods_supported": ["jwk"], + "credential_signing_alg_values_supported": ["ES256", "ES384", "ES512"], + "proof_types_supported": { + "jwt": { + "proof_signing_alg_values_supported": [ + "ES256" + ] + } + }, + "display": [{ + "name": "PID Italiano di esempio", + "locale": "it-IT", + "logo": { + "uri": "https://pid-provider example.org/public/logo.svg", + "alt_text": "logo di questa Credenziale" + }, + "background_color": "#12107c", + "text_color": "#FFFFFF" + }, + { + "name": "Example Italian PID", + "locale": "en-US", + "logo": { + "uri": "https://pid-provider.example.org/public/logo.svg", + "alt_text": "The logo of this credential" + }, + "background_color": "#12107c", + "text_color": "#FFFFFF" + } + ], + "credential_definition": { + "type": ["PersonIdentificationData"], + "verification": { + "trust_framework": "eidas", + "assurance_level": "high", + "evidence": [ + { + "type": "electronic_record", + "record": { + "type": "https://eudi.wallet.cie.gov.it", + "source": { + "organization_name": "Ministero dell'Interno", + "organization_id": "urn:eudi:it:organization_id:ipa_code:m_it", + "country_code": "IT" + } + } + } + ] + }, + "credentialSubject": { + "given_name": { + "mandatory": true, + "display": [{ + "name": "Current First Name", + "locale": "en-US" + }, + { + "name": "Nome", + "locale": "it-IT" + } + ] + }, + "family_name": { + "mandatory": true, + "display": [{ + "name": "Current Family Name", + "locale": "en-US" + }, + { + "name": "Cognome", + "locale": "it-IT" + } + ] + }, + "birth_date": { + "mandatory": true, + "display": [{ + "name": "Date of Birth", + "locale": "en-US" + }, + { + "name": "Data di Nascita", + "locale": "it-IT" + } + ] + }, + "unique_id": { + "mandatory": true, + "display": [{ + "name": "Unique Identifier", + "locale": "en-US" + }, + { + "name": "Identificativo univoco", + "locale": "it-IT" + } + ] + }, + "tax_id_code": { + "mandatory": true, + "display": [{ + "name": "Tax Id Number", + "locale": "en-US" + }, + { + "name": "Codice Fiscale", + "locale": "it-IT" + } + ] + } + } + } + } + } + }, + "openid_relying_party": { + + } + } + } + diff --git a/rp-vp-kid/en/_sources/proximity-flow.rst.txt b/rp-vp-kid/en/_sources/proximity-flow.rst.txt new file mode 100644 index 000000000..4b2246754 --- /dev/null +++ b/rp-vp-kid/en/_sources/proximity-flow.rst.txt @@ -0,0 +1,412 @@ + + +.. _proximity_flow_sec: + +Proximity Flow +============== + +This section describes how a Verifier requests the presentation of an *mDoc-CBOR* Credential to a Wallet Instance according to the *ISO 18013-5 Specification*. Only *Supervised Device Retrieval flow* is supported in this technical implementation profile. + +The presentation phase is divided into three sub-phases: + + 1. **Device Engagement**: This subphase begins when the User is prompted to disclose certain attributes from the mDoc(s). The objective of this subphase is to establish a secure communication channel between the Wallet Instance and the Verifier App, so that the mDoc requests and responses can be exchanged during the communication subphase. + The messages exchanged in this subphase are transmitted through short-range technologies to limit the possibility of interception and eavesdropping. + This technical implementation profile exclusively supports QR code for Device Engagement. + + 2. **Session establishment**: During the session establishment phase, the Verifier App sets up a secure connection. All data transmitted over this connection is encrypted using a session key, which is known to both the Wallet Instance and the Verifier at this stage. + The established session MAY be terminated based on the conditions as detailed in [ISO18013-5#9.1.1.4]. + + 3. **Communication - Device Retrieval**: The Verifier App encrypts the mDoc request with the appropriate session key and sends it to the Wallet Instance together with its public key in a session establishment message. The mDoc uses the data from the session establishment message to derive the session key and decrypt the mDoc request. + During the communication subphase, the Verifier App has the option to request information from the Wallet using mDoc requests and responses. The primary mode of communication is the secure channel established during the session setup. The Wallet Instance encrypts the mDoc response using the session key and transmits it to the Verifier App via a session data message. This technical implementation profile only supports Bluetooth Low Energy (BLE) for the communication sub-phase. + + +The following figure illustrates the flow diagram compliant with ISO 18013-5 for proximity flow. + +.. _fig_High-Level-Flow-ITWallet-Presentation-ISO: +.. figure:: ../../images/High-Level-Flow-ITWallet-Presentation-ISO.svg + :figwidth: 100% + :align: center + :target: https://www.plantuml.com/plantuml/svg/bL9BZnCn3BxFhx3A0H3q3_ImMlOXXBJYqGguzE9ct2RQn0bvJDb_ZoSP3QFI2xab_Xx-xDocZ34NPpiisNDn1ufT1t9GPH_XUw88cA3KjuF_3QlnwNM2dHDYq9vf1Q-Up4ddErkeme9KZ381ESFg9rfB6JwnEB4IiAYTAuou7nN_Al-WQ8xcVzHd2dm8eKeFI-cMfApNDpVd3Nm9n90rmKLBa3s4I8b441dSWrTm7wcNkq7RD3xxJE07CIhlXmqyq624-CWdF94RYQaSWiP4iAweRzjr1vLvRkOVYIcYY32TWO8c9rSBp_GYWKoSe88LzPtsvx5HKO5xtnCSVVpNibA6ATjE8IyfKr7aBgptVDry0WlPXIBOH2aPpoEcbgzDOJTXIEPui2PfrqROZogki56OfNuvcxkdHv5N9H8eZSnaPLRJwUPU95JTn9P-5J60Tn2AcAZQjJ_MiCljxndUN6texN8Dr-ErSjd0roZrNEUjFDSVaJqaZP6gOMpDK0-61UHglkcJjJL75Cx4NHflAKT30xLGH_41wnLQIDb7FD6C7URSAOZCSfCjxyjSWcHEZBb4slCuTQL9FJVsWDRq9akuxfQuByx-0G00 + + High-Level Proximity Flow + +**Step 1-3**: The Verifier requests the User to reveal certain attributes from their mDoc(s) stored in the Wallet Instance. The User initiates the Wallet Instance. The Wallet Instance MUST create a new temporary key pair (EDeviceKey.Priv, EDeviceKey.Pub), and incorporate the cipher suite identifier, the identifier of the elliptic curve for key agreement, and the EDeviceKey public point into the device engagement structure (refer to [ISO18013-5#9.1.1.4]). This key pair is temporary and MUST be invalidated immediately after the secure channel is established. Finally, the Wallet Instance displays the QR Code for Device Engagement. + +Below an example of a device engagement structure that utilizes QR for device engagement and Bluetooth Low Energy (BLE) for data retrieval. + +CBOR data: + +.. code-block:: + + a30063312e30018201d818584ba4010220012158205a88d182bce5f42efa59943f33359d2e8a968ff289d93e5fa444b624343167fe225820b16e8cf858ddc7690407ba61d4c338237a8cfcf3de6aa672fc60a557aa32fc670281830201a300f401f50b5045efef742b2c4837a9a3b0e1d05a6917 + +In diagnostic notation: + +.. code-block:: + + { + 0: "1.0", % Version + + 1: % Security + [ + 1, % defines the cipher suite 1 which contains only EC curves + 24(<< % embedded CBOR data item + { + 1: 2, % kty:EC2 (Elliptic curves with x and y coordinate pairs) + -1: 1, % crv:p256 + -2:h'5A88D182BCE5F42EFA59943F33359D2E8A968FF289D93E5FA444B624343 167FE',% x-coordinate + -3:h'B16E8CF858DDC7690407BA61D4C338237A8CFCF3DE6AA672FC60A557AA32FC67' % y-coordinate + } + >>) + ], + + 2: %DeviceRetrievalMethods(Device engagement using QR code) + [ + [ + 2, %BLE + 1, % Version + { %BLE options + 0: false, % no support for mdoc peripheral server mode + 1: true, % support mdoc central client mode + 11: h'45EFEF742B2C4837A9A3B0E1D05A6917' % UUID of mdoc client central mode + } + ] + ] + } + + + +**Step 4-6**: The Verifier App scans the QR Code and generates its own ephemeral key pair (EReaderKey.Priv, EReaderKey.Pub). It then calculates the session key, using the public key received in the Engagement Structure and its newly-generated private key, as outlined in [ISO18013-5#9.1.1.5]. Finally, it generates its session key, which must be independently derived by both the Wallet Instance and the Verifier App. + +**Step 7**: The Verifier App creates an mDoc request that MUST be encrypted using the relevant session key, and transmits it to the Wallet Instance along with EReaderKey.Pub within a session establishment message. The mDoc request MUST be encoded in CBOR, as demonstrated in the following non-normative example. + +CBOR data: +.. code-block:: + + a26776657273696f6e63312e306b646f63526571756573747381a26c6974656d7352657175657374d818590152a267646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e4954a375766572696669636174696f6e2e65766964656e6365f4781c766572696669636174696f6e2e6173737572616e63655f6c6576656cf4781c766572696669636174696f6e2e74727573745f6672616d65776f726bf4716f72672e69736f2e31383031332e352e31ab76756e5f64697374696e6775697368696e675f7369676ef47264726976696e675f70726976696c65676573f46f646f63756d656e745f6e756d626572f46a69737375655f64617465f46f69737375696e675f636f756e747279f47169737375696e675f617574686f72697479f46a62697274685f64617465f46b6578706972795f64617465f46a676976656e5f6e616d65f468706f727472616974f46b66616d696c795f6e616d65f46a726561646572417574688443a10126a11821590129308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97bf6584058a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9 + +The above CBOR data is represented in diagnostic notation as follows: +.. code-block:: + + { + "version": "1.0", + "docRequests": [ + { + "itemsRequest": 24(<< { + "docType": "org.iso.18013.5.1.mDL", + "nameSpaces": { + "org.iso.18013.5.1.IT": { + "verification.evidence": false, + "verification.assurance_level": false, + "verification.trust_framework": false + }, + "org.iso.18013.5.1": { + "un_distinguishing_sign": false, + "driving_privileges": false, + "document_number": false, + "issue_date": false, + "issuing_country": false, + "issuing_authority": false, + "birth_date": false, + "expiry_date": false, + "given_name": false, + "portrait": false, + "family_name": false + } + } + } >>), + "readerAuth": [ + h'a10126', + { + 33: h'308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97b' + }, + null, + h'58a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9' + ] + } + ] + } + +**Step 8**: The Wallet Instance uses the session establishment message to derive the session keys and decrypt the mDoc request. It computes the session key using the public key received from the Verifier App and its private key. + +**Step 9-10**: When the Wallet Instance receives the mDoc request, it locates the documents that contain the requested attributes and asks the User for permission to provide this information to the Verifier. If the User agrees, the Wallet generates an mDoc response and transmits it to the Verifier App through the secure channel. + +**Step 11-12**: If the User gives consent, the Wallet Instance creates an mDoc response and transmits it to the Verifier App via the secure channel. The mDoc response MUST be encoded in CBOR, with its structure outlined in [ISO18013-5#8.3.2.1.2.2]. Below is a non-normative example of an mDoc response. + +CBOR Data: +.. code-block:: + + a36776657273696f6e63312e3069646f63756d656e747381a367646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c6973737565725369676e6564a26a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e495483d81858f7a46864696765737449440b6672616e646f6d506d44f21ee875f2c1d502b43198e5a15271656c656d656e744964656e74696669657275766572696669636174696f6e2e65766964656e63656c656c656d656e7456616c756581a2647479706571656c656374726f6e69635f7265636f7264667265636f7264bf6474797065781f68747470733a2f2f657564692e77616c6c65742e70646e642e676f762e697466736f75726365bf716f7267616e697a6174696f6e5f6e616d65754d6f746f72697a7a617a696f6e6520436976696c656f6f7267616e697a6174696f6e5f6964656d5f696e666c636f756e7472795f636f6465626974ffffd8185866a4686469676573744944046672616e646f6d50185d84dfb71ce9b173010ddd62174fbe71656c656d656e744964656e746966696572781c766572696669636174696f6e2e74727573745f6672616d65776f726b6c656c656d656e7456616c7565656569646173d8185865a4686469676573744944006672616e646f6d50137f903174253c4585358267aae2ea4e71656c656d656e744964656e746966696572781c766572696669636174696f6e2e6173737572616e63655f6c6576656c6c656c656d656e7456616c75656468696768716f72672e69736f2e31383031332e352e318bd8185852a46864696765737449440c6672616e646f6d5053e29d0ddbbc7d2306a32bdbe2e56e5171656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756563446f65d8185855a4686469676573744944036672616e646f6d50990cba2069fa1b33b8d6ae910b6549dc71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c756567416e746f6e696fd818585ba46864696765737449440a6672616e646f6d504086c1379975f805f1b1f4975e6a126571656c656d656e744964656e7469666965726a69737375655f646174656c656c656d656e7456616c7565d903ec6a323031392d31302d3230d818585ca4686469676573744944016672616e646f6d50ab4ca30c918dd2fd0bf35242c15fa2d871656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d31302d3230d8185855a4686469676573744944076672616e646f6d508d9066f6c8da16619867cd4e2fab0c8871656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ea4686469676573744944056672616e646f6d5059fe68db795dee4c20976380ea24770571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c75657828497374697475746f20506f6c696772616669636f2065205a656363612064656c6c6f20537461746fd818585ba4686469676573744944026672616e646f6d5008b3f1ca5517019767be3dee3bb0614571656c656d656e744964656e7469666965726a62697274685f646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3230d818585ca4686469676573744944096672616e646f6d50a2395ec214350c26066306e23279b3ae71656c656d656e744964656e7469666965726f646f63756d656e745f6e756d6265726c656c656d656e7456616c756569393837363534333231d8185850a4686469676573744944066672616e646f6d50a25e1a5b915d2d6eafee9674e023293971656c656d656e744964656e74696669657268706f7274726169746c656c656d656e7456616c75654420212223d81858eea46864696765737449440d6672616e646f6d50eeed6a3b856563627589a360939d12f771656c656d656e744964656e7469666965727264726976696e675f70726976696c656765736c656c656d656e7456616c756582a37576656869636c655f63617465676f72795f636f646561416a69737375655f64617465d903ec6a323031382d30382d30396b6578706972795f64617465d903ec6a323032342d31302d3230a37576656869636c655f63617465676f72795f636f646561426a69737375655f64617465d903ec6a323031372d30322d32336b6578706972795f64617465d903ec6a323032342d31302d3230d818585ba4686469676573744944086672616e646f6d50c0ef486b2a194ed3cbf7f354fd40092171656c656d656e744964656e74696669657276756e5f64697374696e6775697368696e675f7369676e6c656c656d656e7456616c756561496a697373756572417574688443a10126a118215901423082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb + +In diagnostic notation: +.. code-block:: + + { + "version": "1.0", + "documents": [ + { + "docType": "org.iso.18013.5.1.mDL", + "issuerSigned": { + "nameSpaces": { + "org.iso.18013.5.1.IT": [ + 24(<< { + "digestID": 11, + "random": h'6d44f21ee875f2c1d502b43198e5a152', + "elementIdentifier": "verification.evidence", + "elementValue": [ + { + "type": "electronic_record", + "record": { + "type": "https://eudi.wallet.pdnd.gov.it", + "source": { + "organization_name": "Motorizzazione Civile", + "organization_id": "m_inf", + "country_code": "it" + } + } + } + ] + } >>), + 24(<< { + "digestID": 4, + "random": h'185d84dfb71ce9b173010ddd62174fbe', + "elementIdentifier": "verification.trust_framework", + "elementValue": "eidas" + } >>), + 24(<< { + "digestID": 0, + "random": h'137f903174253c4585358267aae2ea4e', + "elementIdentifier": "verification.assurance_level", + "elementValue": "high" + } >>) + ], + "org.iso.18013.5.1": [ + 24(<< { + "digestID": 12, + "random": h'53e29d0ddbbc7d2306a32bdbe2e56e51', + "elementIdentifier": "family_name", + "elementValue": "Doe" + } >>), + 24(<< { + "digestID": 3, + "random": h'990cba2069fa1b33b8d6ae910b6549dc', + "elementIdentifier": "given_name", + "elementValue": "Antonio" + } >>), + 24(<< { + "digestID": 10, + "random": h'4086c1379975f805f1b1f4975e6a1265', + "elementIdentifier": "issue_date", + "elementValue": 1004("2019-10-20") + } >>), + 24(<< { + "digestID": 1, + "random": h'ab4ca30c918dd2fd0bf35242c15fa2d8', + "elementIdentifier": "expiry_date", + "elementValue": 1004("2024-10-20") + } >>), + 24(<< { + "digestID": 7, + "random": h'8d9066f6c8da16619867cd4e2fab0c88', + "elementIdentifier": "issuing_country", + "elementValue": "IT" + } >>), + 24(<< { + "digestID": 5, + "random": h'59fe68db795dee4c20976380ea247705', + "elementIdentifier": "issuing_authority", + "elementValue": "Istituto Poligrafico e Zecca dello Stato" + } >>), + 24(<< { + "digestID": 2, + "random": h'08b3f1ca5517019767be3dee3bb06145', + "elementIdentifier": "birth_date", + "elementValue": 1004("1956-01-20") + } >>), + 24(<< { + "digestID": 9, + "random": h'a2395ec214350c26066306e23279b3ae', + "elementIdentifier": "document_number", + "elementValue": "987654321" + } >>), + 24(<< { + "digestID": 6, + "random": h'a25e1a5b915d2d6eafee9674e0232939', + "elementIdentifier": "portrait", + "elementValue": h'20212223' + } >>), + 24(<< { + "digestID": 13, + "random": h'eeed6a3b856563627589a360939d12f7', + "elementIdentifier": "driving_privileges", + "elementValue": [ + { + "vehicle_category_code": "A", + "issue_date": 1004("2018-08-09"), + "expiry_date": 1004("2024-10-20") + }, + { + "vehicle_category_code": "B", + "issue_date": 1004("2017-02-23"), + "expiry_date": 1004("2024-10-20") + } + ] + } >>), + 24(<< { + "digestID": 8, + "random": h'c0ef486b2a194ed3cbf7f354fd400921', + "elementIdentifier": "un_distinguishing_sign", + "elementValue": "I" + } >>) + ] + }, + "issuerAuth": [ + h'a10126', + { + 33: h'3082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb7d518bd9a519583e082d67effff06565804fc09abf0e4a08e699c9dba3796285a15f68e40ac7f9fc7700a15153a4065300a06082a8648ce3d040302034800304502210099b7d62e6bf7b1823db3713df889bf73e70bb4d9c58c21e92c58d2f1beffe932022058d039747a00d70e6d66be4797e6142b3608a014ee09b7b79af2cae2aaf27788' + }, + 24(<< { + "version": "1.0", + "digestAlgorithm": "SHA-256", + "docType": "org.iso.18013.5.1.mDL", + "valueDigests": { + "org.iso.18013.5.1": { + 1: h'0E5F0B6B33418E508740771E82F893372EAF5B2445BC4C84DCF08B005E9493FC', + 2: h'DE21BB62FF2897D8B986D2CDA9F9BC5865C02807F7B4D9DD1FA4A79DF4C0D37F', + 3: h'BC5568239E35CE9FF8798C27FFDCD757B134B679F0FE05729AA3491381912E65', + 5: h'E6048BDC7FD6454296F1E3F54536107C9C5B24C4064DE46A98121E3630EECCA2', + 6: h'73690D92DCAA61B0203870F67C6AA9FDFEA889B6F0C720DE757B4B0A8516A206', + 7: h'E353EA0B0FD92B6BE90C64CC3B2EE1284153A8F0F5066B99AAC599200E6EEEB2', + 8: h'29227872CEB49923D267B5F4BADE6D387B42AC2DC4B2AE26C9013067FEE7018A', + 9: h'A6A119F7CACAC0B8C6AACAC747FD3FE7E50B6D9BB8A507FDA79F0DF6646F285D', + 10: h'6D8025D2F02A5E7E1406FB6AAEB67F9EDE9B07191A53F3E23B77C528223A94E2', + 12: h'B0D43E4E2EA534E4D5304E64BCF7A0F13E2C8EE8304B9CD23ABA4909652A4647', + 13: h'FBF4DE318982F2DBAD43C601CAEB22628B301AC18AA8264C5831B2AAAC89C486' + }, + "org.iso.18013.5.1.IT": { + 0: h'CF57377B675F64F37314739592C1E8A911A7DDAF341CE2902FE877C5A835E4C1', + 4: h'4A4B4CC64EC9299C1A2501EA449F577005E9F7A60408057C07A7C67FB151E5F5', + 11: h'78824FBD6FBBA88A2AAB44DF8B6F5E9759126D87D1F4415995E658FD9239E1FE' + } + }, + "deviceKeyInfo": { + "deviceKey": { + 1: 2, + -1: 1, + -2: h'AFD09E720B918CEDC2B8A881950BAB6A1051E18AE16A814D51E609938663D5E1', + -3: h'61FBC6C8AD24EC86A78BB4E9AC377DD2B7C711D9F2EB9AFD4AA0963662847AED'}}, + "validityInfo": { + "signed": 0("2023-11-24T14:54:05Z"), + "validFrom": 0("2023-11-24T14:54:05Z"), + "validUntil": 0("2024-11-24T14:54:05Z")} + } >>), + h'f2461e4fab69e9f7bcffe552395424514524d1679440036213173101448d1b1ab4a293859b389ffa8b47aeed10e9b0c1545412ac37c51a76482cd9bbbe110152' + ] + }, + "deviceSigned": { + "nameSpaces": 24(<< {} >>), + "deviceAuth": { + "deviceSignature": [ + h'a10126', + {}, + null, + h'1fed7190d2975ab79c072e6f1d9d52436059d1fc959d55baf74f057d89b10fcc0dc77a50d433d4c76ddf26223c5560c4ab123b5cb5eb805a90036aa147493076' + ] + } + } + } + ], + "status": 0 + } + +**Step 13**: The Verifier App is required to validate the signatures in the mDoc's issuerSigned field using the public key of the Credential Issuer specified within the mDoc. Subsequently, the Verifier MUST validate the signature in the deviceSigned field. If these signature checks pass, the Verifier can confidently consider the received information as valid. + +Device Engagement +----------------- + +The Device Engagement structure MUST be have at least the following components: + + - **Version**: *tstr*. Version of the data structure being used. + - **Security**: an array that contains two mandatory values + + - the cipher identifier: see Table 22 of [ISO18013-5] + - the mDL public ephemeral key generated by the Wallet Instance and required by the Verifier App to derive the Session Key. The mDL public ephemeral key MUST be of a type allowed by the indicated cipher suite. + - **transferMethod**: an array that contains one or more transferMethod arrays when performing device engagement using the QR code. This array is for offline data retrieval methods. A transferMethod array holds two mandatory values (type and version). Only the BLE option is supported by this technical implementation profile, then the type value MUST be set to ``2``. + - **BleOptions**: this elements MUST provide options for the BLE connection (support for Peripheral Server or Central Client Mode, and the device UUID). + + +mDoc Request +------------ + +The messages in the mDoc Request MUST be encoded using CBOR. The resulting CBOR byte string for the mDoc Request MUST be encrypted with the Session Key obtained after the Device Engagement phase and MUST be transmitted using the BLE protocol. +The details on the structure of mDoc Request, including identifier and format of the data elements, are provided below. + + - **version**: (tstr). Version of the data structure. + - **docRequests**: Requested DocType, NameSpace and data elements. + + - **itemsRequest**: #6.24(bstr .cbor ItemsRequest). + + - **docType**: (tstr). The DocType element contains the type of document requested. See :ref:`Data Model Section `. + - **nameSpaces**: (tstr). See :ref:`Data Model Section ` for more details. + + - **dataElements**: (tstr). Requested data elements with *Intent to Retain* value for each requested element. + + - **IntentToRetain**: (bool). It indicates that the Verifier App intends to retain the received data element. + - **readerAuth**: *COSE_Sign1*. It is required for the Verifier App authentication. + +.. note:: + + The domestic data elements MUST not be returned unless specifically requested by the Verifier App. + +mDoc Response +------------- + +The messages in the mDoc Response MUST be encoded using CBOR and MUST be encrypted with the Session Key obtained after the Device Engagement phase. +The details on the structure of mDoc Response are provided below. + + - **version**: (tstr). Version of the data structure. + - **documents**: Returned *DocType*, and *ResponseData*. + + - **docType**: (tstr). The DocType element contains the type of document returned. See :ref:`Data Model Section `. + - **ResponseData**: + + - **IssuerSigned**: Responded data elements signed by the issuer. + + - **nameSpaces**: (tstr). See :ref:`Data Model Section ` for more details. + + - **IssuerSignedItemBytes**: #6.24(bstr .cbor). + + - **digestID**: (uint). Reference value to one of the **ValueDigests** provided in the *Mobile Security Object* (`issuerAuth`). + - **random**: (bstr). Random byte value used as salt for the hash function. This value SHALL be different for each *IssuerSignedItem* and it SHALL have a minimum length of 16 bytes. + - **elementIdentifier**: (tstr). Identifier of User attribute name contained in the Credential. + - **elementValue**: (any). User attribute value + - **DeviceSigned**: Responded data elements signed by the Wallet Instance. + + - **NameSpaces**: #6.24(bstr .cbor DeviceNameSpaces). The DeviceNameSpaces structure MAY be an empty structure. DeviceNameSpaces contains the data element identifiers and values. It is returned as part of the corresponding namespace in DeviceNameSpace. + + - **DataItemName**: (tstr). The identifier of the element. + - **DataItemValue**: (any). The value of the element. + - **DeviceAuth**: The DeviceAuth structure MUST contain the DeviceSignature elements. + + - **DeviceSignature**: It MUST contain the device signature for the Wallet Instance authentication. + - **status**: It contains a status code. For detailed description and action required refer to to Table 8 (ResponseStatus) of the [ISO18013-5] + + +Session Termination +------------------- + +The session MUST be terminated if at least one of the following conditions occur. + + - After a time-out of no activity of receiving or sending session establishment or session data messages occurs. The time-out for no activity implemented by the Wallet Instance and the Verifier App SHOULD be no less than 300 seconds. + - When the Wallet Instance doesn't accept any more requests. + - When the Verifier App does not send any further requests. + +If the Wallet Instance and the Verifier App does not send or receive any further requests, the session termination MUST be initiated as follows. + + - Send the status code for session termination, or + - dispatch the "End" command as outlined in [ISO18013-5#8.3.3.1.1.5]. + +When a session is terminated, the Wallet Instance and the Verifier App MUST perform at least the following actions: + + - destruction of session keys and related ephemeral key material; + - closure of the communication channel used for data retrieval. diff --git a/rp-vp-kid/en/_sources/pseudonyms.rst.txt b/rp-vp-kid/en/_sources/pseudonyms.rst.txt new file mode 100644 index 000000000..7b20567f9 --- /dev/null +++ b/rp-vp-kid/en/_sources/pseudonyms.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _pseudonyms.rst: + +pseudonyms.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/en/_sources/relying-party-solution.rst.txt b/rp-vp-kid/en/_sources/relying-party-solution.rst.txt new file mode 100644 index 000000000..afa4d6a06 --- /dev/null +++ b/rp-vp-kid/en/_sources/relying-party-solution.rst.txt @@ -0,0 +1,20 @@ + + + + +.. _relying-party-solution: + +Relying Party Solution ++++++++++++++++++++++++ + +This section describes how a remote Relying Party or a Verifier App requests to a Wallet Instance the presentation of the PID/EAAs. + +In this section the following flows are described: + +- :ref:`Remote Flow `, where the User presents a Credential to a remote Relying Party according to `OPENID4VP`_. In this scenario the user-agent and the Wallet Instance may be used in the same device (**Same Device Flow**), or in different devices (**Cross Device Flow**). +- :ref:`Proximity Flow `, where the User presents a Credential to a Verifier App according to ISO 18013-5. The User interacts with a Verifier using proximity connection technologies such as QR Code and Bluetooth Low Energy (BLE). + +.. include:: remote-flow.rst + +.. include:: proximity-flow.rst + diff --git a/rp-vp-kid/en/_sources/remote-flow.rst.txt b/rp-vp-kid/en/_sources/remote-flow.rst.txt new file mode 100644 index 000000000..f700a03e9 --- /dev/null +++ b/rp-vp-kid/en/_sources/remote-flow.rst.txt @@ -0,0 +1,922 @@ +.. include:: ../common/common_definitions.rst +.. _Wallet Attestation: wallet-attestation.html +.. _Trust Model: trust.html + +.. _remote_flow_sec: + +Remote Flow +=========== + +In this flow the Relying Party MUST provide the URL where the signed presentation Request Object is available for download. + +Depending on whether the User is using a mobile device or a workstation, the Relying Party MUST support the following remote flows: + +* **Same Device**, the Relying Party MUST provide a HTTP redirect (302) location to the Wallet Instance; +* **Cross Device**, the Relying Party MUST provide a QR Code which the User frames with the Wallet Instance. + +Once the Wallet Instance establishes the trust with the Relying Party and evaluates the request, the User gives the consent for the disclosure of the Digital Credentials, in the form of a Verifiable Presentation. + +A High-Level description of the remote flow, from the User's perspective, is given below: + + 1. the Wallet Instance obtains an URL in the Same Device flow or a QR Code containing the URL in Cross Device flow; + 2. the Wallet Instance extracts from the payload the following parameters: ``client_id``, ``request_uri``, ``state``, ``request_uri_method`` and ``client_id_scheme``; + 3. If the ``client_id_scheme`` is provided and set with the value ``entity_id``, the Wallet Instance MUST collect and validate the OpenID Federation Trust Chain related to the Relying Party. If the ``client_id_scheme`` is either not provided or is assigned a value different from ``entity_id``, the Wallet Instance MUST establish the trust by utilizing the ``client_id`` or an alternative ``client_id_scheme`` value. This alternative value MUST enable the Wallet Instance to establish trust with the Relying Party, ensuring compliance with the assurance levels mandated by the trust framework; + 4. If ``request_uri_method`` is provided and set with the value ``post``, the Wallet Instance SHOULD transmit its metadata to the Relying Party's ``request_uri`` endpoint using the HTTP POST method and obtain the signed Request Object. If ``request_uri_method`` is set with the value ``get`` or not present, the Wallet Instance MUST fetch the signed Request Object using an HTTP request with method GET to the endpoint provided in the ``request_uri`` parameter; + 5. the Wallet Instance verifies the signature of the signed Request Object, using the public key obtained with the trust chain, and that its issuer matches the ``client_id`` obtained at the step number 2; + 6. the Wallet Instance evaluates the requested Digital Credentials and checks the elegibility of the Relying Party in asking these by applying the policies related to that specific Relying Party, obtained with the trust chain; + 7. the Wallet Instance asks User disclosure and consent; + 8. the Wallet Instance presents the requested information to the Relying Party along with the Wallet Attestation. The Relying Party validates the presented Credentials checking the trust with their Issuers, and validates the Wallet Attestation by also checking that the Wallet Provider is trusted; + 9. the Wallet Instance informs the User about the successfull authentication with the Relying Party, the User continues the navigation. + +Below a sequence diagram that summarizes the interactions between all the involved parties. + +.. figure:: ../../images/cross_device_auth_seq_diagram.svg + :figwidth: 100% + :align: center + :target: https://www.plantuml.com/plantuml/svg/ZLLRRnit4ttdhpZGz_3PXkCcwPi05t5SDvUqjMefoKCI21Ht9B6co2qlgxX5_tjdIUo2SWIqXc5Or5pEd3apyo94wMFQ6I5JT3RjLkI545SgEe_9-q1-0XcGX5Yvh-NX_m4_KgSLXGd-zxFUREDBaqYq74ShtKeRCVaeZQ68DvR3MqKvnlxG976e9t93DfOCKf1jm5aEpUx8F6YxmOmV7x9bHq985NKd8p6mX2S_iFSK7sc5EVaU6Qpiz4P6xMnbAaL3jQFiFJkQuex-I1GYPjv5Kf4QVWakUSMPBY_vcGB3pE4msyf0kBmSu_PuEXf2NNlgtoJEpW9xqDaPEidqVBOhbxY-w30M7g6SkzT7t7q1j4nUmmzGEXeg_UtksZM4spkyNYnc3BRHdd7ZvFkdpq-nrt7xsIgZESDID-Trj7DaLEVuL3qkTnIthlc2JwFJCgWjxUXBnLZcdNystgMMWRemw03EceT29z8KywtR8svfWDbohGVCoqVjOxVz5BSjsUpsI3kGRNiEuvGqa8aDB8kZjBOEEiPadUrHGiwLj8m2FOpnyUPhz6oRKx7I91TFFc3jtIw_3VPa6p4wKTz43XuGVGenSvojHyQEaIUaYT1hVCirT42W4WUps_b20C1-a47hNQSR2WCNx2GR6IMYorbhVJ3ErcaRSuIwMG0mAgkgeE8uahAw9rR9LgwqqL5J46G2_GVOhsuMS1xMHRHbGaHLm-1TyWMziTGCRt2htqd5aVFZzUG6T3JeusY8n_eyqh231O9V1YQbRT0wenLNF7fz8A_N3pcLZCaJtBg2F-w9sv9xz996DzNOikM7sKauBGPfElgjdOToDbDrR0IkdLrhlwFcKDa3fLaek4hS2Q__BEk85rNRHyHdMxhIjSlexicEazvMssiPqcgdG-1_Z-ylt1JUA9UTwT1oPUXm1-O4erD5G2MjgyZa5_iB1bS-rWQped7Fm7L0l_C7jdyYViwU_1ttwUXMq24hprF7O9gB2ar9rQ_IXX5hQV0cX4GUYtvqIyWHCjv-N60-zBkAml0KXQ9UDOOImdDMWkl8indVlpUlNYzUtTtS_2gEUqm5hhUaxl7QcOQTtj43NchRi2Gp4FRYilbtvaAWt1fsUO8KsA8igRHYcUAU7SiDqNbFrWL6XovBjxHjLZfq8GGMMxAWQkKrEYZZ0ZMGCNgzIapM52f3r6imo-D4Qaw0CYoU83kf3MiXRyRCWgZeUj-E0dWVo2EKKd1IJXnI_huvHJNH_V7wxjd5Cpn_-XItxxWpVqrykMLv5KocsCRO1YHlYhWz5RKlbMi8Vul7urzkqrpkwE0qxOV3oT0on3fB7MClwYl5TVxRkUjelCPlvzFIwKTNgimXJlfgn-sLgodKd7upYGKihew5sUYER77F0NiYmZaIsnd3ZMvpqvn7IAfNupgPmzjxI5ckyGN_IJlp3m00 + + + Remote Protocol Flow + + +The details of each step shown in the previous picture are described in the table below. + +.. list-table:: + :widths: 10 50 + :header-rows: 1 + + * - **Id** + - **Description** + * - **1**, **2** + - The User requests to access to a protected resource of the Relying Party. + * - **3**, **4**, + - The Relying Party provides the Wallet Instance with a URL where the information about the Relying Party are provided, along with the information about where the signed request is available for download. + * - **5**, **6**, **7**, **8**, **9** + - In the **Cross Device Flow**, the Request URI is presented as a QR Code displayed to the User. The User scans the QR Code using the Wallet Instance, which retrieves a URL with the parameters ``client_id``, ``request_uri``, ``state``, ``client_id_scheme``, and ``request_uri_method``. Conversely, in the Same Device Flow, the Relying Party supplies identical information as in the Cross-Device flow, but directly through a URL. + * - **10**, + - The Wallet Instance evaluates the trust with the Relying Party. + * - **11**, **12** + - The Wallet Instance checks if the Relying Party has provided the ``request_uri_method`` within its signed Request Object. If provided and it is equal to ``post``, the Wallet Instance provides its metadata to the Relying Party. The Relying Party returns a signed Request Object compliant to the Wallet technical capabilities. + * - **13** + - When the Wallet Instance capabilities discovery is not supported by RP, the Wallet Instance request the signed Request Object using the HTTP method GET. + * - **14** + - The Wallet Instance obtains the signed Request Object. + * - **15**, **16**, **17** + - The Request Object JWS is verified by the Wallet Instance. The Wallet Instance processes the Relying Party metadata and applies the policies related to the Relying Party, attesting whose Digital Credentials and User data the Relying Party is granted to request. + * - **18**, **19** + - The Wallet Instance requests the User's consent for the release of the Credentials. The User authorizes and consents the presentation of the Credentials by selecting/deselecting the personal data to release. + * - **20** + - The Wallet Instance provides the Authorization Response to the Relying Party using an HTTP request with the method POST (response mode "direct_post.jwt"). + * - **21**, **22**, **23**, **24**, **25** + - The Relying Party verifies the Authorization Response, extracts the Wallet Attestation to establish the trust with the Wallet Solution. The Relying Party extracts the Digital Credentials and attests the trust to the Credentials Issuer and the proof of possession of the Wallet Instance about the presented Digital Credentials. Finally, the Relying Party verifies the revocation status of the presented Digital Credentials. + * - **26** + - The Relying Party provides to the Wallet Instance a redirect URI with a response code to be used by the Wallet Instance to finalize the authentication. + * - **27**, **28** and **29** + - The User is informed by the Wallet Instance that the Autentication succeded, then the protected resource is made available to the User. + + +Request URI with HTTP POST +-------------------------- + +The Relying Party SHOULD provide the POST method with its ``request_uri`` endpoint +allowing the Wallet Instance to inform the Relying Party about its technical capabilities. + +This feature can be useful when, for example, the Wallet Instance supports +a restricted set of features, supported algorithms or a specific url for +its ``authorization_endpoint``, and any other information that it deems necessary to +provide to the Relying Party for better interoperability. + +.. warning:: + The Wallet Instance, when providing its technical capabilities to the + Relying Party, MUST NOT include any User information or other explicit + information regarding the hardware used or usage preferences of its User. + +If both the Relying Party and the Wallet Instance +support the ``request_uri_method`` with HTTP POST, +the Wallet Instance capabilities (metadata) MUST +be provided using an HTTP request to the `request_uri` endpoint of the Relying Party, +with the method POST and content type set to `application/json`. + +A non-normative example of the HTTP request is represented below: + +.. code:: http + + POST /request-uri HTTP/1.1 + HOST: relying-party.example.org + Content-Type: application/json + + { + "authorization_endpoint": "https://wallet-solution.digital-strategy.europa.eu/authorization", + "response_types_supported": [ + "vp_token" + ], + "response_modes_supported": [ + "form_post.jwt" + ], + "vp_formats_supported": { + "vc+sd-jwt": { + "sd-jwt_alg_values": [ + "ES256", + "ES384" + ] + } + }, + "request_object_signing_alg_values_supported": [ + "ES256" + ], + "presentation_definition_uri_supported": false + } + +The response of the Relying Party is defined in the section below. + + +Authorization Request Details +----------------------------- + +The Relying Party MUST create a Request Object in the form of a signed JWT and +MUST provide it to the Wallet Instance through an HTTP URL (request URI). +The HTTP URL points to the web resource where the signed Request Object is +available for download. The URL parameters contained in the Relying Party +response, containing the request URI, are described in the Table below. + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **client_id** + - REQUIRED. Unique identifier of the Relying Party. + * - **request_uri** + - REQUIRED. The HTTPs URL where the Relying Party provides the signed Request Object to the Wallet Instance. + * - **client_id_scheme** + - OPTIONAL. The scheme used by the Relying Party for the client_id, detailing the format and structure and the trust evaluation method. It SHOULD be set with ``entity_id``. + * - **state** + - OPTIONAL. A unique identifier for the current transaction generated by the Relying Party. The value SHOULD be opaque to the Wallet Instance. + * - **request_uri_method** + - OPTIONAL. The HTTP method MUST be set with ``get`` or ``post``. The Wallet Instance should use this method to obtain the signed Request Object from the request_uri. If not provided or equal to ``get``, the Wallet Instance SHOULD use the HTTP method ``get``. Otherwise, the Wallet Instance SHOULD provide its metadata within the HTTP POST body encoded in ``application/json``. + +Below a non-normative example of the response containing the required parameters previously described. + +.. code-block:: javascript + + https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=...&request_uri=...&client_id_scheme=entity_id&request_uri_method=post + +The value corresponding to the `request_uri` endpoint SHOULD be randomized, according to `RFC 9101, The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR) `_ Section 5.2.1. + + +In the **Same Device Flow** the Relying Party uses an HTTP response redirect (with status code set to 302) as represented in the following non-normative example: + +.. code:: text + + HTTP/1.1 /authorization Found + Location: https://wallet-solution.digital-strategy.europa.eu? + client_id=https%3A%2F%2Frelying-party.example.org%2Fcb + &request_uri=https%3A%2F%2Frelying-party.example.org%2Frequest_uri + &client_id_scheme=entity_id + &request_uri_method=post + + +In the **Cross Device Flow**, a QR Code is shown by the Relying Party to the User in order to provide the Authorization Request. The User frames the QR Code using their Wallet Instance. + +Below is represented a non-normative example of a QR Code issued by the Relying Party. + +.. figure:: ../../images/verifier_qr_code.svg + :figwidth: 50% + :align: center + + +Below is represented a non-normative example of the QR Code raw payload: + +.. code-block:: text + + https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=https%3A%2F%2Frelying-party.example.org&request_uri=https%3A%2F%2Frelying-party.example.org&client_id_scheme=entity_id&request_uri_method=post + +.. note:: + The *error correction level* chosen for the QR Code MUST be Q (Quartily - up to 25%), since it offers a good balance between error correction capability and data density/space. This level of quality and error correction allows the QR Code to remain readable even if it is damaged or partially obscured. + + +Cross Device Flow Status Checks and Security +-------------------------------------------- + +When the flow is Cross Device, the user-agent needs to check the session status to the endpoint made available by Relying Party (status endpoint). This check MAY be implemented in the form of JavaScript code, within the page that shows the QRCode, then the user-agent checks the status with a polling strategy in seconds or a push strategy (eg: web socket). + +Since the QRcode page and the status endpoint are implemented by the Relying Party, it is under the Relying Party responsability the implementation details of this solution, since it is related to the Relying Party's internal API. However, the text below offers an implementation solution. + +The Relying Party MUST bind the request of the user-agent, with a session cookie marked as ``Secure`` and ``HttpOnly`` , with the issued request. The request url SHOULD include a parameter with a random value. The HTTP response returned by this specialized endpoint MAY contain the HTTP status codes listed below: + +* **201 Created**. The signed Request Object was issued by the Relying Party that waits to be downloaded by the Wallet Instance at the **request_uri** endpoint. +* **202 Accepted**. This response is given when the signed Request Object was obtained by the Wallet Instance. +* **200 OK**. The Wallet Instance has provided the presentation to the Relying Party's **response_uri** endpoint and the User authentication is successful. The Relying Party updates the session cookie allowing the user-agent to access to the protected resource. An URL is provided carrying the location where the user-agent is intended to navigate. +* **401 Unauthorized**. The Wallet Instance or its User have rejected the request, or the request is expired. The QRCode page SHOULD be updated with an error message. + +Below a non-normative example of the HTTP Request to this specialized endpoint, where the parameter ``id`` contains an opaque and random value: + +.. code:: + + GET /session-state?id=3be39b69-6ac1-41aa-921b-3e6c07ddcb03 + HTTP/1.1 + HOST: relying-party.example.org + + +Request Object Details +---------------------- + +Below a non-normative example of HTTP request made by the Wallet Instance to the Relying Party. + +.. code-block:: javascript + + GET /request_uri HTTP/1.1 + HOST: relying-party.example.org + + +Request URI Response +-------------------- + +The Relying Party issues the signed Request Object, where a non-normative example in the form of decoded header and payload is shown below: + +.. code-block:: text + + { + "alg": "ES256", + "typ": "JWT", + "trust_chain": [ + "MIICajCCAdOgAwIBAgIC...awz", + "MIICajCCAdOgAwIBAgIC...2w3", + "MIICajCCAdOgAwIBAgIC...sf2" + ] + } + . + { + "scope": "eu.europa.ec.eudiw.pid.it.1 WalletAttestation", + "client_id_scheme": "entity_id", + "client_id": "https://relying-party.example.org", + "response_mode": "direct_post.jwt", + "response_type": "vp_token", + "response_uri": "https://relying-party.example.org/response_uri", + "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb", + "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03", + "iss": "https://relying-party.example.org", + "iat": 1672418465, + "exp": 1672422065, + "request_uri_method": "post" + } + +The JWS header parameters are described below: + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **alg** + - Algorithm used to sign the JWT, according to [:rfc:`7516#section-4.1.1`]. It MUST be one of the supported algorithms in Section *Cryptographic Algorithms* and MUST NOT be set to ``none`` or to a symmetric algorithm (MAC) identifier. + * - **typ** + - Media Type of the JWT, as defined in [:rfc:`7519`]. + * - **kid** + - Key ID of the public key needed to verify the JWS signature, as defined in [:rfc:`7517`]. REQUIRED when ``trust_chain`` is used. + * - **trust_chain** + - Sequence of Entity Statements that composes the Trust Chain related to the Relying Party, as defined in `OIDC-FED`_ Section *3.2.1. Trust Chain Header Parameter*. + + +The JWS payload parameters are described herein: + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **scope** + - Aliases for well-defined Presentation Definitions IDs. It is used to identify which required Credentials and User attributes are requested by the Relying Party, according to the Section "Using scope Parameter to Request Verifiable Credential(s)" of [OID4VP]. + * - **client_id_scheme** + - String identifying the scheme of the value in the ``client_id``. It MUST be set to the value ``entity_id``. + * - **client_id** + - Unique Identifier of the Relying Party. + * - **response_mode** + - It MUST be set to ``direct_post.jwt``. + * - **response_type** + - It MUST be set to ``vp_token``. + * - **response_uri** + - The Response URI to which the Wallet Instance MUST send the Authorization Response using an HTTP request using the method POST. + * - **nonce** + - Fresh cryptographically random number with sufficient entropy, which length MUST be at least 32 digits. + * - **state** + - Unique identifier of the Authorization Request. + * - **iss** + - The entity that has issued the JWT. It will be populated with the Relying Party client id. + * - **iat** + - Unix Timestamp, representing the time at which the JWT was issued. + * - **exp** + - Unix Timestamp, representing the expiration time on or after which the JWT MUST NOT be valid anymore. + * - **request_uri_method** + - String determining the HTTP method to be used with the `request_uri` endpoint to provide the Wallet Instance metadata to the Relying Party. The value is case-insensitive and can be set to: `get` or `post`. The GET method, as defined in [@RFC9101], involves the Wallet Instance sending a GET request to retrieve a Request Object. The POST method involves the Wallet Instance requesting the creation of a new Request Object by sending an HTTP POST request, with its metadata, to the request URI of the Relying Party. + +.. warning:: + + Using the parameter ``scope`` requires that the Relying Party Metadata MUST contain the ``presentation_definition``, where a non-normative example of it is given below: + +.. code-block:: JSON + + { + "presentation_definition": { + "id": "presentation definitions", + "input_descriptors": [ + { + "id": "eu.europa.ec.eudiw.pid.it.1", + "name": "Person Identification Data", + "purpose": "User authentication", + "format": "vc+sd-jwt", + "constraints": { + "fields": [ + { + "path": [ + "$.credentialSubject.unique_id", + "$.credentialSubject.given_name", + "$.credentialSubject.family_name", + ] + } + ], + "limit_disclosure": "preferred" + } + }, + { + "id": "WalletAttestation", + "name": "Wallet Attestation", + "purpose": "Wallet Authentication", + "format": "jwt", + "constraints": { + "fields": [ + { + "path": [ + "$.iss", + "$.exp", + "$.iat", + "$.cnf.jwk", + "$.aal", + ] + } + ] + } + } + ] + } + } + + +.. note:: + + The following parameters, even if defined in [OID4VP], are not mentioned in the previous non-normative example, since their usage is conditional and may change in future release of this documentation. + + - ``presentation_definition``: JSON object according to `Presentation Exchange `_. This parameter MUST not be present when ``presentation_definition_uri`` or ``scope`` are present. + - ``presentation_definition_uri``: Not supported. String containing an HTTPS URL pointing to a resource where a Presentation Definition JSON object can be retrieved. This parameter MUST be present when ``presentation_definition`` parameter or a ``scope`` value representing a Presentation Definition is not present. + - ``client_metadata``: A JSON object containing the Relying Party metadata values. The ``client_metadata`` parameter MUST NOT be present when ``client_id_scheme`` is ``entity_id``. Since the ``client_metadata`` is taken from ``trust_chain``, this parameter is intended to not be used. + - ``client_metadata_uri``: string containing an HTTPS URL pointing to a resource where a JSON object with the Relying Party metadata can be retrieved. The ``client_metadata_uri`` parameter MUST NOT be present when ``client_id_scheme`` is ``entity_id``. Since the ``client_metadata`` is taken from ``trust_chain``, this parameter is intended to not be used. + + +Request URI Endpoint Errors +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When the Relying Party encounters errors while issuing the Request Object from the ``request_uri`` endpoint, the following error responses are applicable: + +- **invalid_request**: The ``request_uri`` URL is missing in some part within its webpath or urlparams, therefore it does not point to a valid Request Object and then it cannot be retrieved. This error is returned when the Request Object is not well referenced in the ``request_uri``. + +- **server_error**: The server encountered an unexpected condition that prevented it from fulfilling the request. This error is returned when the Relying Party's server is unable to process the Request Object due to a server-side issue, such as a malfunction or maintenance. The Wallet Instance should advise the User to try again later. + +The following is an example of an error response from ``request_uri`` endpoint: + +.. code-block:: + + HTTP/1.1 400 Bad Request + Content-Type: application/json + + { + "error": "invalid_request", + "error_description": "The request_uri is malformed or does not point to a valid Request Object." + } + + +Another example: + +.. code-block:: + + HTTP/1.1 500 Internal Server Error + Content-Type: application/json + + { + "error": "server_error", + "error_description": "The request_uri cannot be retrieved due to an internal server error." + } + +There are cases where the Wallet Instance cannot validate the Request Object or the Request Object results invalid. This error occurs if the Request Object is successfully fetched from the ``request_uri`` but fails validation checks by the Wallet Instance. This could be due to incorrect signatures, malformed claims, or other validation failures, such as the revocation of its issuer (Relying Party). + +Upon receiving an error response, the Wallet Instance SHOULD inform the User of the error condition in an appropriate manner. Additionally, the Wallet Instance SHOULD log the error and MAY attempt to recover from certain errors if feasible. For example, if the error is ``server_error``, the Wallet Instance MAY prompt the User to re-enter or scan a new QR code, if applicable. + +It is crucial for Wallet Instances to implement robust error handling to maintain a secure and user-friendly experience. Adhering to the specified error responses ensures interoperability and helps in diagnosing issues during the interaction with the Relying Party's endpoints. + +.. warning:: + + The current OpenID4VP specification outlines various error responses that a Wallet Instance may return to the Relying Party (Verifier) in case of faulty requests (OpenID4VP, Section 6.4. Error Response). For privacy enhancement, Wallet Instances SHOULD NOT notify the Relying Party of faulty requests in certain scenarios. This is to prevent any potential misuse of error responses that could lead to gather informations that could be exploited. + + +Authorization Response Details +------------------------------ + +After getting the User authorization and consent for the presentation of the Credentials, the Wallet Instance sends the Authorization Response to the Relying Party ``response_uri`` endpoint, the content SHOULD be encrypted according `OPENID4VP`_ Section 6.3, using the Relying Party public key. + +.. note:: + **Why the response is encrypted?** + + The response sent from the Wallet Instance to the Relying Party is encrypted to prevent a malicious agent from gaining access to the plaintext information transmitted within the Relying Party's network. This is only possible if the network environment of the Relying Party employs `TLS termination `_. Such technique employs a termination proxy that acts as an intermediary between the client and the webserver and handles all TLS-related operations. In this manner, the proxy deciphers the transmission's content and either forwards it in plaintext or by negotiates an internal TLS session with the actual webserver's intended target. In the first scenario, any malicious actor within the network segment could intercept the transmitted data and obtain sensitive information, such as an unencrypted response, by sniffing the transmitted data. + +Below a non-normative example of the request: + +.. code-block:: http + + POST /response_uri HTTP/1.1 + HOST: relying-party.example.org + Content-Type: application/x-www-form-urlencoded + + response=eyJhbGciOiJFUzI1NiIs...9t2LQ + + +Below is a non-normative example of the decrypted JSON ``response`` content: + +.. code-block:: + + { + "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03", + "vp_token": [ + "eyJhbGciOiJFUzI1NiIs...PT0iXX0", + $WalletAttestation-JWT + ], + "presentation_submission": { + "definition_id": "32f54163-7166-48f1-93d8-ff217bdb0653", + "id": "04a98be3-7fb0-4cf5-af9a-31579c8b0e7d", + "descriptor_map": [ + { + "id": "eu.europa.ec.eudiw.pid.it.1", + "path": "$.vp_token.verified_claims.claims._sd[0]", + "format": "vc+sd-jwt" + }, + { + "id": "WalletAttestation", + "path": "$", + "format": "jwt" + } + ] + } + } + +Where the following parameters are used: + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **vp_token** + - JSON Array containing the Verifiable Presentation(s). There MUST be at least two signed presentations in this Array: + - The requested Digital Credential (one or more, in format of SD-JWT VC or MDOC CBOR) + - The Wallet Attestation + * - **presentation_submission** + - JSON Object containing the mappings between the requested Verifiable Credentials and where to find them within the returned Verifiable Presentation Token, according to the `Presentation Exchange `_. + * - **state** + - Unique identifier provided by the Relying Party within the Authorization Request. + + +Below is a non-normative example of the ``vp_token`` decoded content, represented in the form of JWS header and payload, separated by a period: + +.. code-block:: text + + { + "alg": "ES256", + "typ": "JWT" + } + . + { + "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "jti": "3978344f-8596-4c3a-a978-8fcaba3903c5", + "aud": "https://relying-party.example.org/response_uri", + "iat": 1541493724, + "exp": 1573029723, + "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb", + "vp": "~~~...~" + } + +Where the following parameters are used: + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **vp** + - The Digital Credential in its original state. The public key contained in the Digital Credential MUST be used to verify the entire VP JWS as Proof of Possession of the private key which the public key is included in the Digital Credential. Eg: for SD-JWT VC the public key is provided within the ``cnf.jwk`` claim. + * - **jti** + - JWS unique identifier. + * - **iat** + - Unix timestamp of the time of issuance of this presentation. + * - **exp** + - Unix timestamp beyond which this presentation will no longer be considered valid. + * - **aud** + - Audience of the VP, corresponding to the ``response_uri`` within the Authorization request issued by the Relying Party. + * - **nonce** + - The nonce value provided by the Relying Party within the Authorization Request. + + +Authorization Response Errors +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +When the Wallet sends a response using ``direct_post.jwt`` to the Relying Party, several errors may occur, including: + + - **Invalid Credential**: This error occurs when one or more Credentials or VPs, included in the ``vp_token``, fail validation because they are malformed. The correct HTTP status code for this error is 400 (Bad Request). The error should be set to ``invalid_request``, and the ``error_description`` SHOULD identify the malformed Credentials. + - **Issuer Credential Trust Failure**: This error arises when the Relying Party cannot establish trust with the issuer of a presented Credential, included in the ``vp_token``. The appropriate HTTP status code for this error is 403 (Forbidden). The ``error`` should be labeled as ``invalid_request``, and the ``error_description`` SHOULD specify the issuer for which trust could not be established. + - **Invalid Nonce**: This error happens when the nonce provided in the request is incorrect. The HTTP status code for this error should be 403 (Forbidden). The error SHOULD be labeled as ``invalid_request``, with an ``error_description`` indicating that the nonce is incorrect. + - **Invalid Wallet Attestation**: This error occours when it's not possible to establish trust with the Wallet Attestation's issuer (Wallet Provider), or if the Wallet Attestation is invalid or does not meet the Relying Party's minimum security criteria. The correct HTTP status code for this error is 403 (Forbidden). The ``error`` SHOULD be marked as ``invalid_request``, and the ``error_description`` should clarify that the issue stems from the Wallet Attestation's failure to establish trust with its issuer or its non-compliance with required security standards. + - **Invalid Presentation Submission**: This error occurs when the presentation submission is not valid. The appropriate HTTP status code for this error is 400 Bad Request. The ``error`` should be labeled as ``invalid_request``, and the ``error_description`` should specify the invalid aspects of the presentation submission. + + To enhance clarity and ensure proper error handling, it's crucial to provide detailed error responses. Below are two examples of HTTP responses using ``application/json`` that include both the ``error`` and ``error_description`` members: + +.. code-block:: text + + HTTP/1.1 403 Forbidden + Content-Type: application/json + + { + "error": "invalid_request", + "error_description": "Trust cannot be established with the issuer: https://issuer.example.com" + } + + +.. code-block:: text + + HTTP/1.1 400 Bad Request + Content-Type: application/json + + { + "error": "invalid_request", + "error_description": "The following Credentials/VP are malformed: [CredentialX, vp_token[2]]" + } + +Redirect URI +------------ + +When the Relying Party provides the redirect URI, the Wallet Instance MUST send the user-agent to this redirect URI. The redirect URI allows the Relying Party to continue the interaction with the End-User on the device where the Wallet Instance resides after the Wallet Instance has sent the Authorization Response to the response URI. + +The Relying Party MUST include a response code within the redirect URI. The response code is a fresh, cryptographically random number used to ensure only the receiver of the redirect can fetch and process the Authorization Response. The number could be added as a path component, as a parameter or as a fragment to the URL. It is RECOMMENDED to use a cryptographic random value of 128 bits or more at the time of the writing of this specification. + +The following is a non-normative example of the response from the Relying Party to the Wallet Instance upon receiving the Authorization Response at the Response Endpoint. + + +.. code-block:: http + + HTTP/1.1 200 OK + Content-Type: application/json;charset=UTF-8 + + { + "redirect_uri": "https://relying-party.example.org/cb#response_code=091535f699ea575c7937fa5f0f454aee" + } + +The ``redirect_uri`` value MUST be used with an HTTP method GET by either the Wallet Instance or the user-agent to redirect the User to the Relying Party in order to complete the process. The specific entity that performs this action depends on whether the flow is Same device or Cross device. + +Redirect URI Errors +------------------- + +When the Wallet Instance sends the user-agent to the Redirect URI provided by the Relying Party, several errors may occur that prevent the successful completion of the process. These errors are critical as they directly impact the User experience by hindering the seamless flow of information between the Wallet Instance and the Relying Party. Below are potential errors related to the Redirect URI and their implications: + +- **Mismatched Redirect URI**: This error occurs when the Redirect URI provided by the Relying Party does not match any of the URIs linked with the User session. This mismatch can lead to a HTTP status error code set to 403 (Forbidden), indicating that the request cannot be processed due session/URI mismatch. + +- **Redirect URI Security Issues**: If the Relying Party incurs in security issues when evaluating the User session with the provided URI, the Relying Party MUST raise an error. In such cases, an HTTP status code set to 403 (Forbidden) MUST be returned, indicating that the request is valid but the server is refusing action due to security precautions. + +Handling these errors requires clear communication to the User within the returned navigation web page. It is crucial for the Relying Party to implement robust error handling and validation mechanisms for Redirect URIs to ensure a secure implementation. + +Relying Party Entity Configuration +----------------------------------- +According to the `Trust Model`_ section, the Relying Party is a Federation Entity and MUST expose a *well-known* endpoint containing its Entity Configuration. + +Below a non-normative example of the request made by the Wallet Instance to the *openid-federation* well-known endpoint to obtain the Relying Party Entity Configuration: + +.. code-block:: http + + GET /.well-known/openid-federation HTTP/1.1 + HOST: relying-party.example.org + + +Below is a non-normative response example: + +.. code-block:: text + + { + "alg": "ES256", + "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", + "typ": "entity-statement+jwt" + } + . + { + "exp": 1649590602, + "iat": 1649417862, + "iss": "https://rp.example.it", + "sub": "https://rp.example.it", + "jwks": { + "keys": [ + { + "kty": "EC", + "crv": "P-256", + "x": "5s4qi ...", + "y": "AQAB", + "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", + } + ] + }, + "metadata": { + "wallet_relying_party": { + "application_type": "web", + "client_id": "https://rp.example.it", + "client_name": "Name of an example organization", + "jwks": { + "keys": [ + { + "kty": "EC", + "crv": "P-256", + "x": "5s4qi ...", + "y": "AQAB", + "kid": "9tjiCaivhWLVUJ3AxwGGz_9", + } + ] + }, + + "contacts": [ + "ops@relying-party.example.org" + ], + + "request_uris": [ + "https://relying-party.example.org/request_uri" + ], + "response_uris": [ + "https://relying-party.example.org/response_uri" + ], + "default_acr_values": [ + "https://www.spid.gov.it/SpidL2", + "https://www.spid.gov.it/SpidL3" + ], + "vp_formats": { + "vc+sd-jwt": { + "sd-jwt_alg_values": [ + "ES256", + "ES384" + ], + "kb-jwt_alg_values": [ + "ES256", + "ES384" + ] + } + }, + "presentation_definitions": [ + { + "id": "32f54163-7166-48f1-93d8-ff217bdb0653", + "input_descriptors": [ + { + "id": "IdentityCredential", + "format": { + "vc+sd-jwt": {} + }, + "constraints": { + "limit_disclosure": "required", + "fields": [ + { + "path": [ + "$.type" + ], + "filter": { + "type": "string", + "const": "IdentityCredential" + } + }, + { + "path": [ + "$.family_name" + ] + }, + { + "path": [ + "$.given_name" + ] + }, + { + "path": [ + "$.unique_id" + ], + "intent_to_retain": "true" + } + ] + } + }, + { + "id": "WalletAttestation", + "format": { + "jwt": {} + }, + "constraints": { + "fields": [ + { + "path": [ + "$.iss" + ], + "filter": { + "type": "string", + "enum": [ + "https://issuer.example.org", + "https://issuer2.example.org", + "https://issuer3.example.org" + ] + } + }, + { + "path": [ + "$.iat" + ], + "filter": { + "type": "number", + "minimum": 1504699136 + } + }, + { + "path": [ + "$.exp" + ], + "filter": { + "type": "number", + "minimum": 1504700136 + } + }, + { + "path": [ + "$.cnf.jwk" + ], + "filter": { + "type": "object" + } + } + ] + } + } + ] + }, + { + "id": "mDL-sample-req", + "input_descriptors": [ + { + "id": "mDL", + "format": { + "mso_mdoc": { + "alg": [ + "EdDSA", + "ES256" + ] + }, + "constraints": { + "limit_disclosure": "required", + "fields": [ + { + "path": [ + "$.mdoc.doctype" + ], + "filter": { + "type": "string", + "const": "org.iso.18013.5.1.mDL" + } + }, + { + "path": [ + "$.mdoc.namespace" + ], + "filter": { + "type": "string", + "const": "org.iso.18013.5.1" + } + }, + { + "path": [ + "$.mdoc.family_name" + ], + "intent_to_retain": "false" + }, + { + "path": [ + "$.mdoc.portrait" + ], + "intent_to_retain": "false" + }, + { + "path": [ + "$.mdoc.driving_privileges" + ], + "intent_to_retain": "false" + } + ] + } + } + } + ] + } + ], + + "default_max_age": 1111, + + // JARM related + "authorization_signed_response_alg": [[ + "ES256" + ], + "authorization_encrypted_response_alg": [ + "RSA-OAEP", + "RSA-OAEP-256" + ], + "authorization_encrypted_response_enc": [ + "A128CBC-HS256", + "A192CBC-HS384", + "A256CBC-HS512", + "A128GCM", + "A192GCM", + "A256GCM" + ], + + // SIOPv2 related + "subject_type": "pairwise", + "require_auth_time": true, + "id_token_signed_response_alg": [ + "ES256" + ], + "id_token_encrypted_response_alg": [ + "RSA-OAEP", + "RSA-OAEP-256" + ], + "id_token_encrypted_response_enc": [ + "A128CBC-HS256", + "A192CBC-HS384", + "A256CBC-HS512", + "A128GCM", + "A192GCM", + "A256GCM" + ], + }, + "federation_entity": { + "organization_name": "OpenID Wallet Relying Party example", + "homepage_uri": "https://relying-party.example.org/home", + "policy_uri": "https://relying-party.example.org/policy", + "logo_uri": "https://relying-party.example.org/static/logo.svg", + "contacts": [ + "tech@relying-party.example.org" + ] + } + }, + "authority_hints": [ + "https://registry.eudi-wallet.example.it" + ] + } + } + + +The Entity Configuration is a JWS, where its header and payload parameters are defined below, based on the provided OpenID Federation Entity Configuration example: + +**JWT Header Parameters** + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **alg** + - The digital signature algorithm used to sign the JWT. For example, "ES256" for ECDSA using P-256 and SHA-256. + * - **typ** + - The Media Type of the JWT, it MUST be set to "entity-statement+jwt". + * - **kid** + - The Key ID used for identifying the key used to sign the JWS. + +**JWT Payload Parameters** + +.. list-table:: + :widths: 25 50 + :header-rows: 1 + + * - **Name** + - **Description** + * - **iss** + - The issuer of the Entity Configuration, identifying the entity that issued the Entity Configuration. + * - **sub** + - The subject of the Entity Configuration, identifying the principal that is the subject of the Entity Configuration. + * - **jwks** + - JSON Web Key Set representing the cryptographic keys used for trust evaluation operations and for signing this Entity Configuration. + * - **metadata** + - Metadata describing the entity, including information about the wallet relying party, client ID, client name, contacts, request URIs, response URIs, default ACR values, and VP formats. + * - **authority_hints** + - URLs hinting at the authority or authorities that the entity trusts and which the public keys for verifieng this Entity Confgiuration are intended to be available within a Subordinate Statement. + * - **exp** + - Unix Timestamp representing the expiration time of the Entity Configuration, after which the Entity Configuration MUST NOT be accepted for processing. + * - **iat** + - Unix Timestamp representing the issued at time of the Entity Configuration, representing the time at which the Entity Configuration was issued. + diff --git a/rp-vp-kid/en/_sources/revocation-lists.rst.txt b/rp-vp-kid/en/_sources/revocation-lists.rst.txt new file mode 100644 index 000000000..908e41111 --- /dev/null +++ b/rp-vp-kid/en/_sources/revocation-lists.rst.txt @@ -0,0 +1,557 @@ +.. include:: ../common/common_definitions.rst + +.. _sec_revocation_intro: + +Credential Lifecycle +++++++++++++++++++++ + +The value of a Digital Credential is conditional on its validity. A Credential that has been revoked, due to legal requirements, inaccuracy or compromise, is valueless and potentially harmful. +For these reasons a robust mechanism for managing the life-cycle and the revocation of a Digital Credential is required. + +This section outlines the key technical requirements and processes related to the revocation of Digital Credentials. +Furthermore, it provides the technical details that the Verifiers MUST implement to verify, in a secure and reliable manner, the validity of a Digital Credential during the presentation phase. + +The verification of the validity of a Digital Credential is based on the `[OAuth Status Attestation draft 01] `_ specification. + +A Status Attestation is a signed document serving as proof of a Digital Credential's current validity status. The Issuer provides these attestations to Holders who can present them to Verifiers together with the corresponding Digital Credentials. + +The Status Attestations have the following features: + +- automated issuance, as the User authentication is not required for the provisioning of the Status Attestation; +- verification of the Digital Credential validity status in both online and offline scenarios; +- privacy-preserving, according to the following evidences: + + 1. the Verifier cannot check over time the validity of a given Digital Credential related to the User; + 2. the Issuers cannot track when and where a Digital Credential is verified; + 3. it doesn't reveal any information about the Users or the content of their Digital Credentials. + +.. _sec_revocation_assumption: + +Operational Requirements +------------------------ + +- **Internet Connection for Status Attestations**: Status Attestations can be obtained only when the Wallet Instance is connected to the internet and actively operated by the User. +- **Role of a Credential Issuer**: A Credential Issuer is responsible for creating and issuing Credentials, as well as managing their lifecycle and validity status. +- **Involvement of Authentic Sources**: When one or more Authentic Sources are involved in the issuance of a Digital Credential, the information exchanged between the Authentic Source and the Credential Issuer is crucial for the Digital Credential's issuance. Furthermore, in cases where the Authentic Source initiates a revocation or data changes, revoking the Digital Credential becomes necessary. + + +.. _sec_revocation_requirements: + +Functional Requirements +----------------------- + +**The Status Attestation MUST:** + +- be presented in conjunction with the Digital Credential; +- be timestamped with the issuance datetime; +- contain the expiration datetime after which it SHOULD NOT be considered valid anymore and it MUST NOT be greater than the one contained in the Digital Credential which it refers to; +- have a validity period not greater than 24 hours; +- provide the proof about the non-revocation of the Digital Credential which is related to and MUST be validated using the cryptographic signature of the Issuer; +- not reveal any information about the Relying Party, the User's device or the User's data contained in the Digital Credential the attestation is related to; +- be non-repudiable even beyond its expiration time and even in the case of cryptographic keys rotation. + + +**The Issuer MUST:** + +- ensure that the data contained in a Digital Credential is kept up to date, including the status of validity of the data from the Authentic Source; +- revoke a Digital Credential when the following circumstances occur: + + - the Digital Credential requires to be updated, whenever one or more attributes are changed; in this case the User will request a new issuance for that Digital Credential; + - the Wallet Instance that holds the Digital Credential was issued is revoked; + - the User deletes the Digital Credential from the Wallet Instance; + +- provide a web service for allowing a Wallet Instance, with a proof of possession of a specific Digital Credential, to + + - request a revocation of that Digital Credential; + - obtain a related Status Attestation; + +- provide out-of-band mechanisms through which the User can request the revocation of their Digital Credentials, using a robust procedure for identity proofing and User authentication, in particular when the User is unable to use the personal Wallet Instance. + + +**The Wallet Instance MUST:** + +- check periodically the validity status of the Digital Credential that is stored in it, requesting a Status Attestation for each Digital Credential; +- be able to present a Status Attestation if required by a Verifier, along with the corresponding Digital Credential; +- request a revocation of a Digital Credential when the Users delete it from the storage. + + +**The Authentic Sources MUST:** + +- provide web services for the providing of updated User data and the validity status; +- store in local databases only the minimum information required to provide the Issuer with the User data or a change in the validity status. + + +Revocation Use Cases +-------------------- + +The revocation of a Digital Credential MAY be triggered by: + +- Users using their personal Wallet Instance or by some out-of-band touchpoints. +- Revocation of the Wallet Instance. +- Authentic Sources (e.g., for attribute updates) following administrative purposes. +- Law-Enforcing Bodies for the fulfillment of their functions and any other judicial reasons (e.g., Police). + +Credential Revocation Flows can start under different scenarios, such as: + + - The User reports the loss or theft of their own physical document to the Law-Enforcement Authorities: this implies that the Credentials, if any, shall be revoked. + - The User notifies an Authentic Source that one or more attributes are changed (e.g. the current resident address): in this case the Credentials SHALL be revoked, as they are no longer valid due to the change in attributes. + - Users who lose access to their Wallet Instance (e.g., due to theft or loss of the device) can request the Credential Issuer to revoke their Credentials or ask the Wallet Provider to revoke the Wallet Instance. If the Wallet Provider is authorized by the User and is aware of the types of Credentials and their issuers stored in the Wallet, it can then initiate the revocation of all Digital Credentials contained within the Wallet Instance on behalf of the User. + - The Law-Enforcing Authorities, for the fulfillment of their functions and any other judicial reasons, may request the Authentic Source to revoke entitlements, licenses, certificates, identification documents, etc., which in turn leads to the revocation of any linked Credentials. + - The Authentic Sources that for any administrative reasons update one or more attributes of a User, shall inform the Issuer of related Credentials. + - The Issuers, for technical security reasons (e.g. in the case of compromised cryptographic keys, death of the User, etc.), can decide to revoke the Credentials. + + +The revocation scenarios involve two main flows: + + - The **Revocation flows**: these flows describe how an Entity requests for a Digital Credential revocation. + - The **Status Attestation flows**: these flows define the technical protocols for requesting and obtaining a Status Attestation and how the Wallet Instance will provide it to a Verifier as a proof of validity of a corresponding Digital Credential. + + +.. _sec_revocation_high_level_flow: + +Revocation Flows +---------------- + +Depending on the different scenarios that may involve the revocation of a Digital Credential, different processes and technical flows may be implemented, according to national laws or Regulations of specific domains. +The subsequent sections define the protocol interface between the Wallet Instances and the Issuers during the revocation request. The communication between the Issuers and other Entities is out-of-scope of this technical implementation profile. + + +.. _sec_revocation_wi_initiated_flow: + +Revocation Request by Wallet Instance +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +A Wallet Instance MUST request the revocation of a Digital Credential as defined below. + +.. _fig_Low-Level-Flow-Revocation: +.. figure:: ../../images/Low-Level-Flow-Revocation.svg + :figwidth: 100% + :align: center + :target: https://www.plantuml.com/plantuml/svg/LOz1IyKm383l_HNXuK4FubrG7dXwNbxHuIw2n2rYM9VK9dL_tpBHCUYb-RwFaACv5gzp2bXTfSxlL49k8nuuepWSUao974xIJ1de06YmyDuvcLKgA-8G5eRhU-1RYEVd3cuAVUj4KEYhaldbK6WaSSRqbZNVNJpy_wF6nxwx2k6lVy748pg1Vn9itgl4ele1xKKr8pDMsQgdtttxPiMDBwjWMSK8pbCuaepj-Xy0 + + Wallet Instance Initiated Revocation Flow + +**Step 1 (Credential Revocation Request)**: The Wallet Instance initiates the process by creating a Credential Revocation Request. This request includes a Digital Credential Proof of Possession as a JWT. It MUST be signed with the private key related to the public key contained within the Credential (such as the Issuer Signed JWT in the case of SD-JWT, or the MSO in the case of Mdoc CBOR). Then, the Wallet Instance sends the request to the Issuer as in the following non-normative example. + +.. _credential_revocation_request_ex: +.. code-block:: + + POST /revoke HTTP/1.1 + Host: pid-provider.example.org + Content-Type: application/x-www-form-urlencoded + + credential_pop=$CredentialPoPJWT + + +Below, is given a non-normative example of a Credential PoP with decoded JWT headers and payload and without signature for better readability: + +.. _credential_pop_jwt_ex: +.. code-block:: + + { + "alg": "ES256", + "typ": "status-attestation-request+jwt", + "kid": $CREDENTIAL-CNF-JWKID + } + . + { + "iss": "0b434530-e151-4c40-98b7-74c75a5ef760", + "aud": "https://pid-provider.example.org/revoke", + "iat": 1698744039, + "exp": 1698744139, + "jti": "6f204f7e-e453-4dfd-814e-9d155319408c", + "credential_hash": $Issuer-Signed-JWT-Hash + "credential_hash_alg": "sha-256", + } + +**Step 2 (PoP verification)**: The Issuer verifies the signature of the PoP JWTs using the public key that was attested in the issued Digital Credential. If the verification is successful, it means that the Wallet Instance owns the private keys associated with the Digital Credential, and therefore is entitled to request its revocation. + +**Step 3 (Credential Revocation)**: The Issuer revokes the Credential provided in the Credential PoP JWT. After the revocation, the Issuer MAY also send a notification to the User (e.g. using a User's email address, telephone number, or any other verified and secure communication channel), with all needed information related to the Credential revocation status update. This communication is out of scope of the current technical implementation profile. + +**Step 4 (Credential Revocation Response)**: The Issuer sends a response back to the Wallet Instance with the result of the revocation request. + +.. code:: + + .. code-block:: http + + HTTP/1.1 204 No Content + + +Credential Revocation HTTP Request +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The requests to the *Issuer Revocation endpoint* MUST be HTTP with method POST, using the mandatory parameters listed below within the HTTP request message body. These MUST be encoded in ``application/x-www-form-urlencoded`` format. + +.. _table_revocation_request_params: +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **credential_pop** + - It MUST contain a JWT proof of possession of the cryptographic key the Credential to be revoked shall be bound to. See Section :ref:`Credential Proof of Possession ` for more details. + - `[OAuth Status Attestation draft 01] `_ + +The Revocation Endpoint MUST be provided by the Issuer within its Metadata. + + +Credential Revocation HTTP Response +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +In case of successful revocation, the Issuer MUST return an HTTP Response with status code *204 No Content*. +Otherwise, an HTTP error response MUST be provided by the Issuer using status codes according to the table below. + +The following HTTP Status Codes MUST be supported: + +.. list-table:: + :widths: 20 20 60 + :header-rows: 1 + + * - **Status Code** + - **Body** + - **Description** + * - *204 No Content* + - + - The Digital Credential has been successfully revoked. + * - *400 Bad Request* + - Error code and description + - The issuer cannot fulfill the request because of invalid parameters. + * - *404 Not Found* + - + - The Digital Credential to be revoked can not be found by the Issuer. + * - *500 Internal Server Error* + - + - The Issuer encountered an internal problem. (:rfc:`6749#section-5.2`). + * - *503 Service Unavailable* + - + - The Issuer is temporary unavailable. (:rfc:`6749#section-5.2`). + +For HTTP error responses that involve a body, the body MUST be encoded in ``application/json`` format and MUST contain the following parameters: + + - *error*. The error code, as registerd in the table below. + - *error_description*. Text in human-readable form providing further details to clarify the nature of the error encountered. + +Error codes are meant to provide additional information about the failure so that the User can be informed and take the appropriate action. +The following Error Codes MUST be supported: + +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - **Error Code** + - **Description** + * - ``invalid_request`` + - The request is not valid due to the lack or incorrectness of one or more parameters. (:rfc:`6749#section-5.2`). + + +Below a non-normative example of an HTTP Response with an error. + +.. code:: + + HTTP/1.1 400 Bad Request + Content-Type: application/json;charset=UTF-8 + + { + "error": "invalid_request" + "error_description": "The signature of credential_pop JWT is not valid" + } + + + +Status Attestation Flows +------------------------ + +The Status Attestation process is divided into the following phases: + + 1. The Status Attestation Request by a Wallet Instance: it involves the Wallet Instance and the Issuer. + 2. The Status Attestation Presentation to a Verifier: it involves the Wallet Instance and the Verifier. + + +.. figure:: ../../images/High-Level-Flow-Status-Attestation.svg + :figwidth: 100% + :align: center + + High-Level Status Attestation Flows + + +.. _sec_revocation_status_attestation_request: + +Status Attestation Request by Wallet Instance +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The presentation of a Credential to a Verifier may occur long after it has been issued by the Issuer. During this time interval, the Credential can be invalidated for any reason and therefore the Verifier also needs to verify its revocation or suspension status. To address this scenario, the Issuer provides the Wallet Instance with a *Status Attestation*. This Attestation is bound to a Credential so that the Wallet Instance can present it to a Verifier, along with the Credential itself, as proof of non-revocation status of the Credential. + +The following diagram shows how the Wallet Instance requests a Status Attestation to the Issuer. + +.. _fig_Low-Level-Flow-Status-Attestation: +.. figure:: ../../images/Low-Level-Flow-Revocation-Attestation.svg + :figwidth: 100% + :align: center + :target: https://www.plantuml.com/plantuml/svg/NP31Rk9038RlynGMsWD8mDwHTWM22tlOHWML2r8rIHmoQZ9EnnuGRryFeK0vsl_tErzcpcA3nBOnDWhvsEOOJAShLxZEUe71pZOD2gozahx00LY6a_l9h9aZXalqb2oYrEXrXWt5SArRDkRaOF8Nt0oobyqMVkjnYGm1FoEo38k0PQhPvhsZxi-lvMtEAFktsuwC-Uw_sSQLLX3k32W4IXdZIGCwOW0tjZo3ROtGomBbOfrdg0Are9Bmh0fxdzQnIzTBi2B1vL5G_NrvQHpJfvsSeRVN0bKfIFS2nKEj952K2LMJF9LQB6hh7RTZPOSuFKoLJE3bNBRwlu95jcRWCmks8xZ_vRB6uWCg2WyUUz-x9P-RoqCbO0etoKtPXGWcJqU-Vnlb53mf-OhSaMVKGUfh0PxvEVeojiqN + + Status Attestation Request Flow + +**Step 1 (Status Attestation Request)**: The Wallet Instance sends the Status Attestation Request to the Issuer. The request MUST contain the Credential Proof of Possession JWT, signed with the private key related to the public key contained within the Credential. + +.. code:: + + POST /status HTTP/1.1 + Host: pid-provider.example.org + Content-Type: application/x-www-form-urlencoded + + credential_pop=$CredentialPoPJWT + +A non-normative example of Credential Proof of Possession is provided :ref:`in the previous section `. + +**Step 2 (PoP verification)**: The Issuer verifies the signature of the PoP JWTs using the public key that was attested in the Digital Credential, which is proof that the Wallet Instance owns the private keys associated with the Digital Credential. Therefore the Wallet Instance is entitled to request its Status Attestation. + +**Step 3 (Check for validity)**: The Issuer checks that the User's attributes are not updated by the Authentic Source or that the latter has not revoked them. The technical mechanisms for obtaining this information are out-of-scope of this technical implementation profile. + + +**Step 4 (Status Attestation Creation)**: The Issuer creates the corresponding Status Attestation. A non-normative example of a Status Attestation is given below. + +.. code:: + + { + "alg": "ES256", + "typ": "status-attestation+jwt, + "kid": $ISSUER-JWKID + } + . + { + "iss": "https://pid-provider.example.org", + "iat": 1504699136, + "exp": 1504700136, + "credential_hash": $CREDENTIAL-HASH, + "credential_hash_alg": "sha-256", + "cnf": { + "jwk": $CREDENTIAL-CNF-JWK + } + } + +**Step 4 (Status Attestation Response)**: The Issuer then returns the Status Attestation to the Wallet Instance, as in the following non-normative example. + +.. code:: + + HTTP/1.1 201 Created + Content-Type: application/json + + { + "status_attestation": "eyJhbGciOiJFUzI1NiIsInR5cCI6IndhbGxldC1...", + } + + +Status Attestation HTTP Request +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The requests to the *Credential status endpoint* of the Issuers MUST be HTTP with method POST, using the same mandatory parameters as in the :ref:`Table of Credential Request parameters `. These MUST be encoded in ``application/x-www-form-urlencoded`` format. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **credential_pop** + - It MUST contain a signed JWT as a cryptographic proof of possession of the Digital Credential. See Section :ref:`Credential Proof of Possession ` for more details. + - `[OAuth Status Attestation draft 01] `_ + +The *typ* value in the *credential_pop* JWT MUST be set to **status-attestation+jwt** + +The *Credential status endpoint* MUST be provided by the Issuers within their Metadata. The Issuers MUST include in the issued Digital Credentials the object *status* with the JSON member *status_attestation* set to a JSON Object containing the *credential_hash_alg* claim. It MUST contain the algorithm used for hashing the Digital Credential. Among the hash algorithms, the value ``sha-256`` is RECOMMENDED . + + +Status Attestation HTTP Response +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The *Credential status endpoint* MUST return a HTTP response with status code *201 Created* if the Credential is valid at the time of the request. The responses MUST be encoded in ``application/json`` format. It MUST contain the following mandatory claims. + +.. _table_http_response_claim: +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **status_attestation** + - It MUST contain the Status Attestation as a signed JWT. + - `[OAuth Status Attestation draft 01] `_. + +The following HTTP Status Codes MUST be supported: + +.. list-table:: + :widths: 20 20 60 + :header-rows: 1 + + * - **Status Code** + - **Body** + - **Description** + * - *201 Created* + - Status Attestation response + - The Status Attestation has been successfully created and it has been returned. + * - *400 Bad Request* + - Error code and description + - The issuer cannot fulfill the request because of invalid parameters. + * - *404 Not Found* + - + - The Digital Credential can not be found by the Issuer. + * - *500 Internal Server Error* + - + - The Issuer encountered an internal problem. (:rfc:`6749#section-5.2`). + * - *503 Service Unavailable* + - + - The Issuer is temporary unavailable. (:rfc:`6749#section-5.2`). + +For HTTP error responses that involve a body, the body MUST be encoded in ``application/json`` format and MUST contain the following parameters: + + - *error*. The error code, as registerd in the table below. + - *error_description*. Text in human-readable form providing further details to clarify the nature of the error encountered. + +Error codes are meant to provide additional information about the failure so that the User can be informed and take the appropriate action. +The following Error Codes MUST be supported: + +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - **Error Code** + - **Description** + * - ``invalid_request`` + - The request is not valid due to the lack or incorrectness of one or more parameters. (:rfc:`6749#section-5.2`). + * - ``credential_revoked`` + - The Digital Credential is revoked. The reason of revocation MUST be provided in the *error_description* field. + * - ``credential_updated`` + - One or more attributes contained in the Digital Credential are changed. The *error_description* field MUST contain a list of updated attributes. + +Below a non-normative example of an HTTP Response with an error. + +.. code:: + + HTTP/1.1 400 Bad Request + Content-Type: application/json;charset=UTF-8 + + { + "error": "invalid_request" + "error_description": "The signature of credential_pop JWT is not valid" + } + +.. _sec_revocation_nra_presentation: + +Status Attestation Presentation to the Verifiers +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +During the presentation phase, a Verifier MAY request the Wallet Instance to provide a Non-Revocation Attestation along with the requested Credential. If a Verifier requests a Status Attestation for a requested Digital Credential, the Wallet Instance MUST provide the Status Attestations in the *vp_token* JSON array. If the Status Attestation is requested by the Verifier and the Wallet Instance is not able to provide it or it is expired or it is issued far back in time, the Verifier MAY decide to accept or reject the Credential according to its security policy. + +Law-Enforcement Authorities or Third Parties authorized by national law, MAY require deferred non-revocation status verification but the definition of these protocols is currently out-of-scope for this technical implementation profile. + + + +.. _sec_revocation_credential_pop: + +Credential Proof of Possession +------------------------------ + +The Credential Proof of Possession (**credential_pop**) MUST be a JWT that MUST contain the parameters (JOSE Header and claims) in the following table. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE header** + - **Description** + - **Reference** + * - **typ** + - In case of revocation request it MUST be set to ``revocation-request+jwt``. In case of Status Attestation request it MUST be set to ``status-attestation-request+jwt``, according to `[OAuth Status Attestation draft 01] `_. + - :rfc:`7516#section-4.1.1`. + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section `Cryptographic Algorithms `_ and MUST NOT be set to ``none`` or any symmetric algorithm (MAC) identifier. + - :rfc:`7516#section-4.1.1`. + * - **kid** + - Unique identifier of the ``jwk`` inside the ``cnf`` claim of the Credential to be revoked, as base64url-encoded JWK Thumbprint value. + - :rfc:`7638#section_3`. + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - Thumbprint of the JWK in the ``cnf`` parameter of the Wallet Attestation. + - :rfc:`9126` and :rfc:`7519`. + * - **aud** + - It MUST be set to the Issuer endpoint at which the JWT is used. + - :rfc:`9126` and :rfc:`7519`. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT. + - :rfc:`9126` and :rfc:`7519`. + * - **iat** + - UNIX Timestamp with the time of JWT issuance. + - :rfc:`9126` and :rfc:`7519`. + * - **jti** + - Unique identifier for the PoP proof JWT. The value SHOULD be set using a *UUID v4* value according to [:rfc:`4122`]. + - [:rfc:`7519`. Section 4.1.7]. + * - **credential_hash** + - It MUST contain the hash value of a Digital Credential, derived by computing the base64url encoded hash of the Digital Credential. + - `[OAuth Status Attestation draft 01] `_. + * - **credential_hash_alg** + - It MUST contain the Algorithm used for hashing the Digital Credential. The value SHOULD be set to `S256`. + - `[OAuth Status Attestation draft 01] `_. + + + +Status Attestation +------------------ + +The Status Attestation MUST contain the following claims. + +.. _table_non_revocation_attestation_header: +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE Header** + - **Description** + - **Reference** + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section :ref:`Cryptographic Algorithms ` and MUST NOT be set to ``none`` or to a symmetric algorithm (MAC) identifier. + - `[OIDC4VCI. Draft 13] `_, [:rfc:`7515`], [:rfc:`7517`]. + * - **typ** + - It MUST be set to `status-attestation+jwt`. + - [:rfc:`7515`], [:rfc:`7517`], `[OAuth Status Attestation draft 01] `_.. + * - **kid** + - Unique identifier of the Issuer ``jwk`` as base64url-encoded JWK Thumbprint value. + - :rfc:`7638#section_3`. + +.. _table_non_revocation_attestation_claim: +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - It MUST be set to the identifier of the Issuer. + - :rfc:`9126` and :rfc:`7519`. + * - **iat** + - UNIX Timestamp with the time of JWT issuance. + - :rfc:`9126` and :rfc:`7519`. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT. + - :rfc:`9126` and :rfc:`7519`. + * - **credential_hash** + - Hash value of the Credential the Status Attestation is bound to. + - `[OAuth Status Attestation draft 01] `_. + * - **credential_hash_alg** + - The Algorithm used for hashing the Credential to which the Status Attestation is bound. The value SHOULD be set to ``S256``. + - `[OAuth Status Attestation draft 01] `_. + * - **cnf** + - JSON object containing the proof-of-possession key materials. The ``cnf`` jwk value MUST match with the one provided within the related Credential. + - `[RFC7800, Section 3.1] `_. + diff --git a/rp-vp-kid/en/_sources/ssi-introduction.rst.txt b/rp-vp-kid/en/_sources/ssi-introduction.rst.txt new file mode 100644 index 000000000..263d0cb66 --- /dev/null +++ b/rp-vp-kid/en/_sources/ssi-introduction.rst.txt @@ -0,0 +1,41 @@ +.. include:: ../common/common_definitions.rst + +.. _ssi-introduction.rst: + +Self Sovereign Identity ++++++++++++++++++++++++ + +Introduction to SSI +------------------- + +**Definition** + +Self-Sovereign Identity (SSI) refers to a new paradigm in Identity and Access Management (IAM) that improves the privacy and grants complete control and ownership over the personal data by their owner, the citizens. +Users possess their digital documents and determine to which actors they present these documents, with the ability to revoke the use of said documents, all while maintaining a history of their activities. + +The main difference between this new approach and the traditional IAM infrastructure is that during the presentation phase there are no intermediates between the Wallet (Holder of the credentials) and the Relying Party, while in the SAML2 or OIDC based infrastructure an Identity Provider is always involved, knowing which services a citizen is accessing to. + +SSI is also significant in the field of data exchange and data governance. This is relevant at both national and European levels, including the new eIDAS Regulation. In fact, it envisions a login option designed for European Users - be they citizens, public administrations, or companies - who want to access another Member State's services using their national authentication systems. + +The main roles in an SSI ecosystem are are listed as follow: + + - Issuers: parties who can issue digital credentials about a person; + - verifiers: parties who request Holders' digital credentials for authentication and authorization purposes; + - Holders: individuals who own a Wallet and have control over the digital credentials they can request, acquire, store, and present to verifiers; + - Verifiable Data Registries: Authorities that publish certificates, attestations, metadata, and schemes needed for allowing the trust establishment between the parties. + +In the SSI model, the data source (e.g., an educational institution) provides digital credentials to the User, who can store them in their digital Wallet. +A secure Self-Sovereign Identity Wallet is crucial, as it allows people to carry their credentials on their personal digital devices. The Wallet typically comes in the form of an application on the User's mobile phone. Portability is, therefore, one of the principles of SSI. + +Other key elements that characterize an SSI system include: + + - **Privacy and control**: SSI enables individuals to maintain control over their personal data. They can choose what information to release, to whom, and for what purpose; + - **Security**: SSI leverages advanced cryptographic techniques to ensure the integrity and security of identity information. It avoids the risk of identity theft, fraud, and unauthorized access since the data remains under the individual's control; + - **Interoperability**: SSI promotes interoperability by enabling different systems and organizations to recognize and verify identities without relying on a central authority. This allows for seamless and trusted interactions between individuals, organizations, and even across borders; + - **Efficiency and cost reduction**: individuals can manage their own identities with SSI, eliminating the need for multiple identity credentials and repetitive identity verification processes. This can streamline administrative procedures, reduce costs, and enhance the user experience. + +**Example** + +When a User wants to purchase a good or access to a service, the service provider asks the User for authentication or for a specific proof. Instead of presenting physical identification documents or disclosing their full data, the individual can use their SSI system if supported by the service provider. +An example of SSI in action could be a scenario where an individual needs to prove their age to access a restricted service, such as purchasing age-restricted items. They would release only the necessary information, such as a digitally signed proof of being above the legal age, without revealing any other personal details. The verifier can then cryptographically validate the proof. + diff --git a/rp-vp-kid/en/_sources/standards.rst.txt b/rp-vp-kid/en/_sources/standards.rst.txt new file mode 100644 index 000000000..2a2c017f8 --- /dev/null +++ b/rp-vp-kid/en/_sources/standards.rst.txt @@ -0,0 +1 @@ +.. include:: ../common/standards.rst diff --git a/rp-vp-kid/en/_sources/trust.rst.txt b/rp-vp-kid/en/_sources/trust.rst.txt new file mode 100644 index 000000000..8fd26a866 --- /dev/null +++ b/rp-vp-kid/en/_sources/trust.rst.txt @@ -0,0 +1,661 @@ +.. include:: ../common/common_definitions.rst + +.. _trust.rst: + +The Infrastructure of Trust ++++++++++++++++++++++++++++ + +The EUDI Wallet Architecture Reference Framework (`EIDAS-ARF`_) describes the Trust Model as a *"collection of rules that ensure the legitimacy of the components and the entities involved in the EUDI Wallet ecosystem"*. + +This section outlines the implementation of the Trust Model in an infrastructure that complies with OpenID Federation 1.0 `OIDC-FED`_. This infrastructure involves a RESTful API for distributing metadata, metadata policies, trust marks, public keys, X.509 certificates, and the revocation status of the participants, also called Federation Entities. + +The Infrastructure of trust facilitates the application of a trust assessment mechanism among the parties defined in the `EIDAS-ARF`_. + +.. figure:: ../../images/trust-roles.svg + :alt: federation portrait + :width: 100% + + The roles within the Federation, where the Trust Anchor oversees its subordinates, + which include one or more Intermediates and Leaves. In this + representation, both the Trust Anchor and the Intermediates MAY assume the role of Accreditation Body. + +Functional Requirements +----------------------- + +This section includes the requirements necessary for the successful implementation and operation of the infrastructure of trust. + +- [FR #1] - **Federation Trust Establishment**: the system must be able to establish trust between different entities (Credential Issuers, Relying Parties, etc.) within a federation, using cryptographic signatures for secure information exchange about the participants in the ecosystem. +- [FR #2] - **Entity Authentication**: the system must implement mechanisms for authenticating entities within the federation, ensuring compliance with the shared rules. +- [FR #3] - **Signature Validation**: the system must support the creation, verification, and validation of electronic signatures and provide standard and secure mechanisms to obtain the public keys required for the signature validation. +- [FR #4] - **Time Stamping**: the signed artifacts must contain time stamps to ensure the integrity and non-repudiation of transactions over time, thanks to the interfaces, services, storage model and approaches defined within the federation. +- [FR #5] - **Certificate Validation**: the system requires confidential transmission, secured via TLS over HTTP, and validation of certificates for website authentication, ensuring they meet eIDAS criteria. +- [FR #6] - **Interoperability and Standards Compliance**: ensure interoperability between federation members by adhering to technical standards, facilitating cross-border electronic transactions. +- [FR #7] - **Data Protection and Privacy**: implement data protection measures in compliance with GDPR and eIDAS regulations, ensuring the privacy and security of personal data processed within the federation. +- [FR #8] - **User Consent and Control**: design mechanisms for obtaining and managing user consent, empowering users with control over their personal information. +- [FR #9] - **Audit and Logging**: the system must minimize data, anonymize if possible, define retention periods, secure access, and storage encryption. This protects privacy while enabling security and accountability. +- [FR #10] - **Dispute Resolution and Liability**: establish clear procedures for dispute resolution and define liability among federation members, in accordance with eIDAS provisions. +- [FR #11] - **Accessibility**: ensure that the system is accessible to all users, including those with disabilities, aligning with eIDAS and local accessibility standards. +- [FR #12] - **Emergency and Revocation Services**: implement mechanisms for the immediate revocation of electronic identification means and participants in case of security breaches or other emergencies. +- [FR #13] - **Scalable Trust Infrastructure**: the system must support scalable trust establishment mechanisms, leveraging approaches and technical solutions that complement delegation transitive approaches to efficiently manage trust relationships as the federation grows, removing central registries that might technically or administratively fail. +- [FR #14] - **Efficient Storage Scalability**: implement a storage solution that scales horizontally to accommodate increasing data volumes while minimizing central storage and administrative costs. The system should enable members to independently store and present historical trust attestations and signed artifacts during dispute resolutions, with the federation infrastructure maintaining only a registry of historical keys to validate the historical data, stored and provided by the participants. +- [FR #15] - **Verifiable Attestation (Trust Mark)**: incorporate a mechanism for issuing and verifying verifiable attestations that serve as proof of compliance with specific profiles or standards. This allows entities within the federation to demonstrate adherence to agreed-upon security, privacy, and operational standards. +- [FR #16] - **Dynamic Policy Language**: develop and implement a dynamic, extensible policy language that allows for the creation and modification of federation policies in response to evolving requirements, technological advancements, and regulatory changes. This policy language should support the specification of rules governing entity behavior, metadata handling, and trust validation within the federation. +- [FR #17] - **Automated Policy Enforcement**: the system must automatically enforce federation policies as defined by policy language and verifiable attestations, ensuring that all operations and transactions comply with current rules and standards. +- [FR #18] - **Decentralized Dispute Resolution Mechanism**: design a decentralized mechanism for dispute resolution that allows federation members to independently verify historical trust establishment and signed artifacts, reducing reliance on central authorities and streamlining the resolution process. +- [FR #19] - **Adaptive Load Management**: implement adaptive load management strategies to ensure the system remains responsive and efficient under varying loads, particularly during peak usage times or when processing complex tasks. +- [FR #20] - **Cross-Federation Interoperability**: ensure the system is capable of interoperating with other federations or trust frameworks, facilitating cross-federation transactions and trust establishment without compromising security or compliance. +- [FR #21] - **Future-Proof Cryptography**: the system should employ a flexible cryptographic framework that can be updated in response to new threats or advancements in cryptographic research, ensuring long-term security and integrity of federation operations. +- [FR #23] - **Autonomous Accreditation Bodies**: the system must facilitate the integration of autonomous accreditation bodies that operate in compliance with federation rules. These bodies are tasked with evaluating and accrediting entities within the federation, according to the pre-established rules and their compliance that must be periodically asserted. +- [FR #24] - **Compliance Evaluation for Federation Entity Candidates**: accreditation bodies must evaluate the compliance of candidate entities against federation standards before their registration in the federation. +- [FR #25] - **Periodic Auditing of Accreditation Bodies and Entities**: implement mechanisms for the periodic auditing and monitoring of the compliance status of both accreditation bodies and their accredited entities. This ensures ongoing adherence to federation standards and policies. +- [FR #26] - **Certification of Compliance for Personal Devices**: trusted bodies, in the form of federation entities, should issue certifications of compliance and provide signed proof of such compliance for the hardware of personal devices used within the federation. These certifications should be attested and periodically renewed to ensure the devices meet current security standards. +- [FR #27] - **Certification of Compliance for Cryptographic Devices**: similar to personal devices, personal cryptographic devices used within the federation must also receive certifications of compliance and signed proof thereof from trusted bodies. These certifications should be subject to periodic renewal to reflect the latest security and compliance standards. +- [FR #28] - **Transparent Compliance Reporting**: develop a system for transparent reporting and publication of compliance statuses, audit results, and certification renewals for all federation entities. This transparency fosters trust within the federation and with external stakeholders. +- [FR #29] - **Automated Compliance Monitoring**: the system should include automated tools for monitoring the compliance of entities with federation standards. This automation aids in the early detection of potential compliance issues. +- [FR #30] - **Secure Protocol Capabilities Binding**: the secure protocol must enable the exchange of protocol-specific capabilities data as cryptographically-bound metadata attached to a specific identity. This metadata should define the technical capabilities associated with the identity, ensuring verifiable proof and tamper-proof association for robust trust establishment and access control. + + + +Federation Roles +------------------ + +All the participants are Federation Entities that MUST be accredited by an Accreditation Body, +except for Wallet Instances which are End-User's personal devices certified by their Wallet Provider. + +.. note:: + The Wallet Instance, as a personal device, is certified as reliable through a verifiable attestation issued and signed by a trusted third party. + + This is called *Wallet Attestation* and is documented in `the dedicated section `_. + + +Below the table with the summary of the Federation Entity roles, mapped on the corresponding EUDI Wallet roles, as defined in the `EIDAS-ARF`_. + +.. list-table:: + :widths: 20 20 60 + :header-rows: 1 + + * - EUDI Role + - Federation Role + - Notes + * - Public Key Infrastructure (PKI) + - Trust Anchor + - The Federation has PKI capabilities. The Entity that configures the entire infrastructure is the Trust Anchor. + * - Qualified Trust Service Provider (QTSP) + - Leaf + - + * - Person Identification Data Provider + - Leaf + - + * - Qualified Electronic Attestations of Attributes Provider + - Leaf + - + * - Electronic Attestations of Attributes Provider + - Leaf + - + * - Relying Party + - Leaf + - + * - Trust Service Provider (TSP) + - Leaf + - + * - Trusted List + - Trust Anchor + - The listing endpoint, the trust mark status endpoint, and the fetch endpoint must be exposed by both Trust Anchors and Intermediates, making the Trusted List distributed over multiple Federation Entities, where each of these is responsible for their accredited subordinates. + * - Wallet Provider + - Leaf + - + + +General Properties +------------------ + +The architecture of the trust infrastructure based on OpenID Federation is built upon several core principles: + +- [P1] **Security**: incorporates mechanisms to ensure the integrity, confidentiality, and authenticity of the trust relationships and interactions within the federation. +- [P2] **Privacy**: designed to respect and protect the privacy of the entities and individuals involved, minimal disclosure is part of this. +- [P3] **Interoperability**: supports seamless interaction and trust establishment between diverse systems and entities within the federation. +- [P4] **Transitive Trust**: trust established indirectly through a chain of trusted relationships, enabling entities to trust each other based on common authorities and trusted intermediaries. +- [P6] **Scalability**: designed to efficiently manage an increasing number of entities or interactions without a significant increase in trust management complexity. +- [P5] **Delegation**: technical ability/feature to delegate authority or responsibilities to other entities, allowing for a distributed trust mechanism. +- [P7] **Flexibility**: adaptable to various operational and organizational needs, allowing entities to define and adjust their trust relationships and policies. +- [P8] **Autonomy**: while part of a federated ecosystem, each entity retains control over its own definitions and configurations. +- [P9] **Decentralization**: unlike traditional centralized systems, the OpenID Federation model promotes a decentralized approach. This ensures that no single entity has control over the entire system, enhancing privacy and security for all participants. + +Trust Model Requirements +------------------------ + +In the table below is provided the map of the components that the ARF defines within the Trust Model, in the same table is provided their coverage in `OIDC-FED`_. + +.. list-table:: + :widths: 20 20 60 + :header-rows: 1 + + * - Component + - Satisfied + - How + * - Issuers identification + - |check-icon| + - Trust Chain + * - Issuers registration + - |check-icon| + - Trust Anchor, Intermediates accreditation system + * - Recognised data models and schemas + - |check-icon| + - Entity Configuration, Entity Statements + * - Relying Parties' registration and authentication + - |check-icon| + - Trust Chains, Federation Entity Discovery + * - Trust mechanisms in a cross-domain scenario + - |check-icon| + - Trust Chains, Federation Entity Discovery + + +Federation API endpoints +------------------------ + +OpenID Federation 1.0 uses RESTful Web Services secured over +HTTPs. OpenID Federation 1.0 defines which are the web endpoints that the participants MUST make +publicly available. The table below summarises the endpoints and their scopes. + +All the endpoints listed below are defined in the `OIDC-FED`_ specs. + +.. list-table:: + :widths: 20 20 20 20 + :header-rows: 1 + + * - endpoint name + - http request + - scope + - required for + * - federation metadata + - **GET** .well-known/openid-federation + - Metadata that an Entity publishes about itself, verifiable with a trusted third party (Superior Entity). It's called Entity Configuration. + - Trust Anchor, Intermediate, Wallet Provider, Relying Party, Credential Issuer + * - subordinate list endpoint + - **GET** /list + - Lists the Subordinates. + - Trust Anchor, Intermediate + * - fetch endpoint + - **GET** /fetch?sub=https://rp.example.org + - Returns a signed document (JWS) about a specific subject, its Subordinate. It's called Entity Statement. + - Trust Anchor, Intermediate + * - trust mark status + - **POST** /status?sub=...&trust_mark_id=... + - Returns the status of the issuance (validity) of a Trust Mark related to a specific subject. + - Trust Anchor, Intermediate + * - historical keys + - **GET** /historical-jwks + - Lists the expired and revoked keys, with the motivation of the revocation. + - Trust Anchor, Intermediate + + +All the responses of the federation endpoints are in the form of JWS, with the exception of the **Subordinate Listing endpoint** and the **Trust Mark Status endpoint** that are served as plain JSON by default. + + +Configuration of the Federation +------------------------------- + +The configuration of the federation is published by the Trust Anchor within its Entity Configuration, it is available at the well-known web path corresponding to **.well-known/openid-federation**. + +All the participants in the federation MUST obtain the federation configuration before entering the operational phase, and they +MUST keep it up-to-date. The federation configuration is the Trust Anchor's Entity Configuration, it contains the +public keys for signature operations and the maximum number of Intermediates allowed between a Leaf and the Trust Anchor (**max_path_length**). + +Below is a non-normative example of a Trust Anchor Entity Configuration, where each parameter is documented in the `OpenID Federation `_ specification: + +.. code-block:: text + + { + "alg": "ES256", + "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc", + "typ": "entity-statement+jwt" + } + . + { + "exp": 1649375259, + "iat": 1649373279, + "iss": "https://registry.eidas.trust-anchor.example.eu", + "sub": "https://registry.eidas.trust-anchor.example.eu", + "jwks": { + "keys": [ + { + + "kty": "EC", + "kid": "X2ZOMHNGSDc4ZlBrcXhMT3MzRmRZOG9Jd3o2QjZDam51cUhhUFRuOWd0WQ", + "crv": "P-256", + "x": "1kNR9Ar3MzMokYTY8BRvRIue85NIXrYX4XD3K4JW7vI", + "y": "slT14644zbYXYF-xmw7aPdlbMuw3T1URwI4nafMtKrY" + } + ] + }, + "metadata": { + "federation_entity": { + "organization_name": "example TA", + "contacts":[ + "tech@eidas.trust-anchor.example.eu" + ], + "homepage_uri": "https://registry.eidas.trust-anchor.example.eu", + "logo_uri":"https://registry.eidas.trust-anchor.example.eu/static/svg/logo.svg", + "federation_fetch_endpoint": "https://registry.eidas.trust-anchor.example.eu/fetch", + "federation_resolve_endpoint": "https://registry.eidas.trust-anchor.example.eu/resolve", + "federation_list_endpoint": "https://registry.eidas.trust-anchor.example.eu/list", + "federation_trust_mark_status_endpoint": "https://registry.eidas.trust-anchor.example.eu/trust_mark_status" + } + }, + "trust_mark_issuers": { + "https://registry.eidas.trust-anchor.example.eu/openid_relying_party/public": [ + "https://registry.spid.eidas.trust-anchor.example.eu", + "https://public.intermediary.spid.org" + ], + "https://registry.eidas.trust-anchor.example.eu/openid_relying_party/private": [ + "https://registry.spid.eidas.trust-anchor.example.eu", + "https://private.other.intermediary.org" + ] + }, + "constraints": { + "max_path_length": 1 + } + } + + +Entity Configuration +-------------------- + +The Entity Configuration is the verifiable document that each Federation Entity MUST publish on its own behalf, in the **.well-known/openid-federation** endpoint. + +The Entity Configuration HTTP Response MUST set the media type to `application/entity-statement+jwt`. + +The Entity Configuration MUST be cryptographically signed. The public part of this key MUST be provided in the +Entity Configuration and within the Entity Statement issued by a immediate superior and related to its subordinate Federation Entity. + +The Entity Configuration MAY also contain one or more Trust Marks. + +.. note:: + **Entity Configuration Signature** + + All the signature-check operations regarding the Entity Configurations, Entity Statements and Trust Marks, are carried out with the Federation public keys. For the supported algorithms refer to Section `Cryptografic Algorithm`. + +Entity Configurations Common Parameters +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Entity Configurations of all the participants in the federation MUST have in common the parameters listed below. + + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - **iss** + - String. Identifier of the issuing Entity. + * - **sub** + - String. Identifier of the Entity to which it is referred. It MUST be equal to ``iss``. + * - **iat** + - UNIX Timestamp with the time of generation of the JWT, coded as NumericDate as indicated at :rfc:`7519`. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated at :rfc:`7519`. + * - **jwks** + - A JSON Web Key Set (JWKS) :rfc:`7517` that represents the public part of the signing keys of the Entity at issue. Each JWK in the JWK set MUST have a key ID (claim kid) and MAY have a `x5c` parameter, as defined in :rfc:`7517`. It contains the Federation Entity Keys required for the operations of trust evaluation. + * - **metadata** + - JSON Object. Each key of the JSON Object represents a metadata type identifier + containing JSON Object representing the metadata, according to the metadata + schema of that type. An Entity Configuration MAY contain more metadata statements, but only one for each type of + metadata (<**entity_type**>). the metadata types are defined in the section `Metadata Types `_. + + +Entity Configuration Trust Anchor +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Trust Anchor Entity Configuration, in addition of the common parameters listed above, MAY contain the following parameters: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Required** + * - **constraints** + - JSON Object that describes the trust evaluation mechanisms bounds. It MUST contain the attribute **max_path_length** that + defines the maximum number of Intermediates between a Leaf and the Trust Anchor. + - |check-icon| + * - **trust_mark_issuers** + - JSON Array that defines which Federation authorities are considered trustworthy + for issuing specific Trust Marks, assigned with their unique identifiers. + - |uncheck-icon| + * - **trust_mark_owners** + - JSON Array that lists which entities are considered to be the owners of + specific Trust Marks. + - |uncheck-icon| + + +Entity Configuration Leaves and Intermediates +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +In addition to the previously defined claims, the Entity Configuration of the Leaf and of the Intermediate Entities, MUST contain the parameters listed below: + + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Required** + * - **authority_hints** + - Array of URLs (String). It contains a list of URLs of the immediate superior entities, such as the Trust Anchor or + an Intermediate, that issues an Entity Statement related to this subject. + - |check-icon| + * - **trust_marks** + - A JSON Array containing the Trust Marks. + - |uncheck-icon| + +Metadata Types +^^^^^^^^^^^^^^^^ + +In this section are defined the main metadata types mapped to the roles of the ecosystem, +giving the references of the metadata protocol for each of these. + + +.. note:: + + The entries that don't have any reference to a known draft or standard are intended to be defined in this technical reference. + +.. list-table:: + :widths: 20 20 20 60 + :header-rows: 1 + + * - OpenID Entity + - EUDI Entity + - Metadata Type + - References + * - Trust Anchor + - Trust Anchor + - ``federation_entity`` + - `OIDC-FED`_ + * - Intermediate + - Intermediate + - ``federation_entity`` + - `OIDC-FED`_ + * - Wallet Provider + - Wallet Provider + - ``federation_entity``, ``wallet_provider`` + - -- + * - Authorization Server + - + - ``federation_entity``, ``oauth_authorization_server`` + - `OPENID4VCI`_ + * - Credential Issuer + - PID Provider, (Q)EAA Provider + - ``federation_entity``, ``openid_credential_issuer``, [``oauth_authorization_server``] + - `OPENID4VCI`_ + * - Relying Party + - Relying Party + - ``federation_entity``, ``wallet_relying_party`` + - `OIDC-FED`_, `OpenID4VP`_ + + +.. note:: + Wallet Provider metadata is defined in the section below. + + `Wallet Solution section `_. + + +.. note:: + In instances where a PID/EAA Provider implements both the Credential Issuer and the Authorization Server, + it MUST incorporate both + ``oauth_authorization_server`` and ``openid_credential_issuer`` within its metadata types. + Other implementations may divide the Credential Issuer from the Authorization Server, when this happens the Credential Issuer metadata MUST contain the `authorization_servers` parameters, including the Authorization Server unique identifier. + Furthermore, should there be a necessity for User Authentication by the Credential Issuer, + it could be necessary to include the relevant metadata type, either ``openid_relying_party`` + or ``wallet_relying_party``. + +Entity Statements +----------------- + +Trust Anchors and Intermediates publish Entity Statements related to their immediate Subordinates. +The Entity Statement MAY contain a metadata policy and the Trust Marks related to a Subordinate. + +The metadata policy, when applied, makes one or more changes to the final metadata of the Leaf. The final metadata of a Leaf is derived from the Trust Chain that contains all the statements, starting from the Entity Configuration up to the Entity Statement issued by the Trust Anchor. + +Trust Anchors and Intermediates MUST expose the Federation Fetch endpoint, where the Entity Statements are requested to validate the Leaf's Entity Configuration signature. + +.. note:: + The Federation Fetch endpoint MAY also publish X.509 certificates for each of the public keys of the Subordinate. Making the distribution of the issued X.509 certificates via a RESTful service. + +Below there is a non-normative example of an Entity Statement issued by an Accreditation Body (such as the Trust Anchor or its Intermediate) in relation to one of its Subordinates. + +.. code-block:: text + + { + "alg": "ES256", + "kid": "em3cmnZgHIYFsQ090N6B3Op7LAAqj8rghMhxGmJstqg", + "typ": "entity-statement+jwt" + } + . + { + "exp": 1649623546, + "iat": 1649450746, + "iss": "https://intermediate.eidas.example.org", + "sub": "https://rp.example.it", + "jwks": { + "keys": [ + { + "kty": "EC", + "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs", + "crv": "P-256", + "x": "1kNR9Ar3MzMokYTY8BRvRIue85NIXrYX4XD3K4JW7vI", + "y": "slT14644zbYXYF-xmw7aPdlbMuw3T1URwI4nafMtKrY", + "x5c": [ ] + } + ] + }, + "metadata_policy": { + "wallet_relying_party": { + "scope": { + "subset_of": [ + "eu.europa.ec.eudiw.pid.1", + "given_name", + "family_name", + "email" + ] + }, + "vp_formats": { + "vc+sd-jwt": { + "sd-jwt_alg_values": [ + "ES256", + "ES384" + ], + "kb-jwt_alg_values": [ + "ES256", + "ES384" + ] + } + } + } + } + } + + +.. note:: + + **Entity Statement Signature** + + The same considerations and requirements made for the Entity Configuration + and in relation to the signature mechanisms MUST be applied for the Entity Statements. + + +Entity Statement +^^^^^^^^^^^^^^^^^^ + +The Entity Statement issued by Trust Anchors and Intermediates contains the following attributes: + + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Required** + * - **iss** + - See `OIDC-FED`_ Section 3.1 for further details. + - |check-icon| + * - **sub** + - See `OIDC-FED`_ Section 3.1 for further details. + - |check-icon| + * - **iat** + - See `OIDC-FED`_ Section 3.1 for further details. + - |check-icon| + * - **exp** + - See `OIDC-FED`_ Section 3.1 for further details. + - |check-icon| + * - **jwks** + - Federation JWKS of the *sub* entity. See `OIDC-FED`_ Section 3.1 for further details. + - |check-icon| + * - **metadata_policy** + - JSON Object that describes the Metadata policy. Each key of the JSON Object represents an identifier of the metadata type and each value MUST be a JSON Object that represents the metadata policy according to that metadata type. Please refer to the `OIDC-FED`_ specifications, Section-5.1, for the implementation details. + - |uncheck-icon| + * - **trust_marks** + - JSON Array containing the Trust Marks issued by itself for the subordinate subject. + - |uncheck-icon| + * - **constraints** + - It MAY contain the **allowed_leaf_entity_types**, that restricts what types of metadata the subject is allowed to publish. + - |check-icon| + + +Trust Evaluation Mechanism +-------------------------- + +The Trust Anchor publishes the list of its Subordinates (Federation Subordinate Listing endpoint) and the attestations of their metadata and public keys (Entity Statements). + +Each participant, including Trust Anchor, Intermediate, Credential Issuer, Wallet Provider, and Relying Party, publishes its own metadata and public keys (Entity Configuration endpoint) in the well-known web resource **.well-known/openid-federation**. + +Each of these can be verified using the Entity Statement issued by a superior, such as the Trust Anchor or an Intermediate. + +Each Entity Statement is verifiable over time and MUST have an expiration date. The revocation of each statement is verifiable in real time and online (only for remote flows) through the federation endpoints. + +.. note:: + The revocation of an Entity is made with the unavailability of the Entity Statement related to it. If the Trust Anchor or its Intermediate doesn't publish a valid Entity Statement, or if it publishes an expired/invalid Entity Statement, the subject of the Entity Statement MUST be intended as not valid or revoked. + +The concatenation of the statements, through the combination of these signing mechanisms and the binding of claims and public keys, forms the Trust Chain. + +The Trust Chains can also be verified offline, using one of the Trust Anchor's public keys. + +.. note:: + Since the Wallet Instance is not a Federation Entity, the Trust Evaluation Mechanism related to it **requires the presentation of the Wallet Attestation during the credential issuance and presentation phases**. + + The Wallet Attestation conveys all the required information pertaining to the instance, such as its public key and any other technical or administrative information, without any User's personal data. + + +Relying Party Attestation +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Relying Party is accredited by a Trust Anchor or its Intermediate and obtains a Trust Mark to be included in its Entity Configuration. In its Entity Configuration the Relying Party publishes its specific metadata, including the supported signature and encryption algorithms and any other necessary information for the interoperability requirements. + +Any requests for User attributes, such as PID or (Q)EAA, from the Relying Party to Wallet Instances are signed and SHOULD contain the verifiable Trust Chain regarding the Relying Party. + +The Wallet Instance verifies that the Trust Chain related to the Relying Party is still active, proving that the Relying Party is still part of the Federation and not revoked. + +The Trust Chain SHOULD be contained within the signed request in the form of a JWS header parameter. + +In offline flows, Trust Chain verification enables the assessment of the reliability of Trust Marks and Attestations contained within. + + +Wallet Attestation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Wallet Provider issues the Wallet Attestation, certifying the operational status of its Wallet Instances and including one of their public keys. + +The Wallet Attestation contains the Trust Chain that attests the reliability for its issuer (Wallet Provider) at the time of issuance. + +The Wallet Instance provides its Wallet Attestation within the signed request during the PID issuance phase, containing the Trust Chain related to the Wallet Provider. + + +Trust Chain +^^^^^^^^^^^^^^^ + +The Trust Chain is a sequence of verified statements that validates a participant's compliance with the Federation. It has an expiration date time, beyond which it MUST be renewed to obtain the fresh and updated metadata. The expiration date of the Trust Chain is determined by the earliest expiration timestamp among all the expiration timestamp contained in the statements. No Entity can force the expiration date of the Trust Chain to be higher than the one configured by the Trust Anchor. + +Below is an abstract representation of a Trust Chain. + +.. code-block:: python + + [ + "EntityConfiguration-as-SignedJWT-selfissued-byLeaf", + "EntityStatement-as-SignedJWT-issued-byTrustAnchor" + ] + +Below is a non-normative example of a Trust Chain in its original format (JSON Array containing JWS as strings) with an Intermediate involved. + +.. code-block:: python + + [ + "eyJhbGciOiJFUzI1NiIsImtpZCI6Ik5GTTFXVVZpVWxZelVXcExhbWxmY0VwUFJWWTJWWFpJUmpCblFYWm1SSGhLWVVWWVVsZFRRbkEyTkEiLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk1OTA2MDIsImlhdCI6MTY0OTQxNzg2MiwiaXNzIjoiaHR0cHM6Ly9ycC5leGFtcGxlLm9yZyIsInN1YiI6Imh0dHBzOi8vcnAuZXhhbXBsZS5vcmciLCJqd2tzIjp7ImtleXMiOlt7Imt0eSI6IkVDIiwia2lkIjoiTkZNMVdVVmlVbFl6VVdwTGFtbGZjRXBQUlZZMlZYWklSakJuUVhabVJIaEtZVVZZVWxkVFFuQTJOQSIsImNydiI6IlAtMjU2IiwieCI6InVzbEMzd2QtcFgzd3o0YlJZbnd5M2x6cGJHWkZoTjk2aEwyQUhBM01RNlkiLCJ5IjoiVkxDQlhGV2xkTlNOSXo4a0gyOXZMUjROMThCa3dHT1gyNnpRb3J1UTFNNCJ9XX0sIm1ldGFkYXRhIjp7Im9wZW5pZF9yZWx5aW5nX3BhcnR5Ijp7ImFwcGxpY2F0aW9uX3R5cGUiOiJ3ZWIiLCJjbGllbnRfaWQiOiJodHRwczovL3JwLmV4YW1wbGUub3JnLyIsImNsaWVudF9yZWdpc3RyYXRpb25fdHlwZXMiOlsiYXV0b21hdGljIl0sImp3a3MiOnsia2V5cyI6W3sia3R5IjoiRUMiLCJraWQiOiJORk0xV1VWaVVsWXpVV3BMYW1sZmNFcFBSVlkyVlhaSVJqQm5RWFptUkhoS1lVVllVbGRUUW5BMk5BIiwiY3J2IjoiUC0yNTYiLCJ4IjoidXNsQzN3ZC1wWDN3ejRiUllud3kzbHpwYkdaRmhOOTZoTDJBSEEzTVE2WSIsInkiOiJWTENCWEZXbGROU05JejhrSDI5dkxSNE4xOEJrd0dPWDI2elFvcnVRMU00In1dfSwiY2xpZW50X25hbWUiOiJOYW1lIG9mIGFuIGV4YW1wbGUgb3JnYW5pemF0aW9uIiwiY29udGFjdHMiOlsib3BzQHJwLmV4YW1wbGUuaXQiXSwiZ3JhbnRfdHlwZXMiOlsicmVmcmVzaF90b2tlbiIsImF1dGhvcml6YXRpb25fY29kZSJdLCJyZWRpcmVjdF91cmlzIjpbImh0dHBzOi8vcnAuZXhhbXBsZS5vcmcvb2lkYy9ycC9jYWxsYmFjay8iXSwicmVzcG9uc2VfdHlwZXMiOlsiY29kZSJdLCJzY29wZSI6ImV1LmV1cm9wYS5lYy5ldWRpdy5waWQuMSBldS5ldXJvcGEuZWMuZXVkaXcucGlkLml0LjEgZW1haWwiLCJzdWJqZWN0X3R5cGUiOiJwYWlyd2lzZSJ9LCJmZWRlcmF0aW9uX2VudGl0eSI6eyJmZWRlcmF0aW9uX3Jlc29sdmVfZW5kcG9pbnQiOiJodHRwczovL3JwLmV4YW1wbGUub3JnL3Jlc29sdmUvIiwib3JnYW5pemF0aW9uX25hbWUiOiJFeGFtcGxlIFJQIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9ycC5leGFtcGxlLml0IiwicG9saWN5X3VyaSI6Imh0dHBzOi8vcnAuZXhhbXBsZS5pdC9wb2xpY3kiLCJsb2dvX3VyaSI6Imh0dHBzOi8vcnAuZXhhbXBsZS5pdC9zdGF0aWMvbG9nby5zdmciLCJjb250YWN0cyI6WyJ0ZWNoQGV4YW1wbGUuaXQiXX19LCJ0cnVzdF9tYXJrcyI6W3siaWQiOiJodHRwczovL3JlZ2lzdHJ5LmVpZGFzLnRydXN0LWFuY2hvci5leGFtcGxlLmV1L29wZW5pZF9yZWx5aW5nX3BhcnR5L3B1YmxpYy8iLCJ0cnVzdF9tYXJrIjoiZXlKaCBcdTIwMjYifV0sImF1dGhvcml0eV9oaW50cyI6WyJodHRwczovL2ludGVybWVkaWF0ZS5laWRhcy5leGFtcGxlLm9yZyJdfQ.Un315HdckvhYA-iRregZAmL7pnfjQH2APz82blQO5S0sl1JR0TEFp5E1T913g8GnuwgGtMQUqHPZwV6BvTLA8g", + "eyJhbGciOiJFUzI1NiIsImtpZCI6IlNURkRXV2hKY0dWWFgzQjNSVmRaYWtsQ0xUTnVNa000WTNGNlFUTk9kRXRyZFhGWVlYWjJjWGN0UVEiLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk2MjM1NDYsImlhdCI6MTY0OTQ1MDc0NiwiaXNzIjoiaHR0cHM6Ly9pbnRlcm1lZGlhdGUuZWlkYXMuZXhhbXBsZS5vcmciLCJzdWIiOiJodHRwczovL3JwLmV4YW1wbGUub3JnIiwiandrcyI6eyJrZXlzIjpbeyJrdHkiOiJFQyIsImtpZCI6Ik5GTTFXVVZpVWxZelVXcExhbWxmY0VwUFJWWTJWWFpJUmpCblFYWm1SSGhLWVVWWVVsZFRRbkEyTkEiLCJjcnYiOiJQLTI1NiIsIngiOiJ1c2xDM3dkLXBYM3d6NGJSWW53eTNsenBiR1pGaE45NmhMMkFIQTNNUTZZIiwieSI6IlZMQ0JYRldsZE5TTkl6OGtIMjl2TFI0TjE4Qmt3R09YMjZ6UW9ydVExTTQifV19LCJtZXRhZGF0YV9wb2xpY3kiOnsib3BlbmlkX3JlbHlpbmdfcGFydHkiOnsic2NvcGUiOnsic3Vic2V0X29mIjpbImV1LmV1cm9wYS5lYy5ldWRpdy5waWQuMSwgIGV1LmV1cm9wYS5lYy5ldWRpdy5waWQuaXQuMSJdfSwicmVxdWVzdF9hdXRoZW50aWNhdGlvbl9tZXRob2RzX3N1cHBvcnRlZCI6eyJvbmVfb2YiOlsicmVxdWVzdF9vYmplY3QiXX0sInJlcXVlc3RfYXV0aGVudGljYXRpb25fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZCI6eyJzdWJzZXRfb2YiOlsiUlMyNTYiLCJSUzUxMiIsIkVTMjU2IiwiRVM1MTIiLCJQUzI1NiIsIlBTNTEyIl19fX0sInRydXN0X21hcmtzIjpbeyJpZCI6Imh0dHBzOi8vdHJ1c3QtYW5jaG9yLmV4YW1wbGUuZXUvb3BlbmlkX3JlbHlpbmdfcGFydHkvcHVibGljLyIsInRydXN0X21hcmsiOiJleUpoYiBcdTIwMjYifV19._qt5-T6DahP3TuWa_27klE8I9Z_sPK2FtQlKY6pGMPchbSI2aHXY3aAXDUrObPo4CHtqgg3J2XcrghDFUCFGEQ", + "eyJhbGciOiJFUzI1NiIsImtpZCI6ImVXa3pUbWt0WW5kblZHMWxhMjU1ZDJkQ2RVZERSazQwUWt0WVlVMWFhRFZYT1RobFpHdFdXSGQ1WnciLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk2MjM1NDYsImlhdCI6MTY0OTQ1MDc0NiwiaXNzIjoiaHR0cHM6Ly90cnVzdC1hbmNob3IuZXhhbXBsZS5ldSIsInN1YiI6Imh0dHBzOi8vaW50ZXJtZWRpYXRlLmVpZGFzLmV4YW1wbGUub3JnIiwiandrcyI6eyJrZXlzIjpbeyJrdHkiOiJFQyIsImtpZCI6IlNURkRXV2hKY0dWWFgzQjNSVmRaYWtsQ0xUTnVNa000WTNGNlFUTk9kRXRyZFhGWVlYWjJjWGN0UVEiLCJjcnYiOiJQLTI1NiIsIngiOiJyQl9BOGdCUnh5NjhVTkxZRkZLR0ZMR2VmWU5XYmgtSzh1OS1GYlQyZkZJIiwieSI6IlNuWVk2Y3NjZnkxcjBISFhLTGJuVFZsamFndzhOZzNRUEs2WFVoc2UzdkUifV19LCJ0cnVzdF9tYXJrcyI6W3siaWQiOiJodHRwczovL3RydXN0LWFuY2hvci5leGFtcGxlLmV1L2ZlZGVyYXRpb25fZW50aXR5L3RoYXQtcHJvZmlsZSIsInRydXN0X21hcmsiOiJleUpoYiBcdTIwMjYifV19.r3uoi-U0tx0gDFlnDdITbcwZNUpy7M2tnh08jlD-Ej9vMzWMCXOCCuwIn0ZT0jS4M_sHneiG6tLxRqj-htI70g" + ] + + +.. note:: + + The entire Trust Chain is verifiable by only possessing the Trust Anchor's public keys. + + +Offline Trust Attestation Mechanisms +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The offline flows do not allow for real-time evaluation of an Entity's status, such as its revocation. At the same time, using short-lived Trust Chains enables the attainment of trust attestations compatible with the required revocation administrative protocols (e.g., a revocation must be propagated in less than 24 hours, thus the Trust Chain must not be valid for more than that period). + + +Offline EUDI Wallet Trust Attestation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Given that the Wallet Instance cannot publish its metadata online at the *.well-known/openid-federation* endpoint, +it MUST obtain a Wallet Attestation issued by its Wallet Provider. The Wallet Attestation MUST contain all the relevant information regarding the security capabilities of the Wallet Instance and its protocol related configuration. It SHOULD contain the Trust Chain related to its issuer (Wallet Provider). + + +Offline Relying Party Metadata +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Since the Federation Entity Discovery is only applicable in online scenarios, it is possible to include the Trust Chain in the presentation requests that the Relying Party may issue for a Wallet Instance. + +The Relying Party MUST sign the presentation request, the request SHOULD include the `trust_chain` claim in its JWS header parameters, containing the Federation Trust Chain related to itself. + +The Wallet Instance that verifies the request issued by the Relying Party MUST use the Trust Anchor's public keys to validate the entire Trust Chain related to the Relying Party before attesting its reliability. + +Furthermore, the Wallet Instance applies the metadata policy, if any. + + +Non-repudiability of the Long Lived Attestations +-------------------------------------------------- + +The Trust Anchor and its Intermediate MUST expose the Federation Historical Keys endpoint, where are published all the public part of the Federation Entity Keys that are no longer used, whether expired or revoked. + +The details of this endpoint are defined in the `OIDC-FED`_ Section 7.6. + +Each JWS containing a Trust Chain in the form of a JWS header parameter can be verified over time, since the entire Trust Chain is verifiable using the Trust Anchor's public key. + +Even if the Trust Anchor has changed its cryptographic keys for digital signature, the Federation Historical Keys endpoint always makes the keys no longer used available for historical signature verifications. + + +Privacy Remarks +--------------- + +- Wallet Instances MUST NOT publish their metadata through an online service. +- The trust infrastructure MUST be public, with all endpoints publicly accessible without any client credentials that may disclose who is requesting access. +- When a Wallet Instance requests the Entity Statements to build the Trust Chain for a specific Relying Party or validates a Trust Mark online, issued for a specific Relying Party, the Trust Anchor or its Intermediate do not know that a particular Wallet Instance is inquiring about a specific Relying Party; instead, they only serve the statements related to that Relying Party as a public resource. +- The Wallet Instance metadata MUST not contain information that may disclose technical information about the hardware used. +- Leaf entity, Intermediate, and Trust Anchor metadata may include the necessary amount of data as part of administrative, technical, and security contact information. It is generally not recommended to use personal contact details in such cases. From a legal perspective, the publication of such information is needed for operational support concerning technical and security matters and the GDPR regulation. + + +Considerations about Decentralization +------------------------------------- + +- There may be more than a single Trust Anchor. +- In some cases, a trust verifier may trust an Intermediate, especially when the Intermediate acts as a Trust Anchor within a specific perimeter, such as cases where the Leafs are both in the same perimeter like a Member State jurisdiction (eg: an Italian Relying Party with an Italian Wallet Instance may consider the Italian Intermediate as a Trust Anchor for the scopes of their interactions). +- Trust attestations (Trust Chain) should be included in the JWS issued by Credential Issuers, and the Presentation Requests of RPs should contain the Trust Chain related to them (issuers of the presentation requests). +- Since the credential presentation must be signed, storing the signed presentation requests and responses, which include the Trust Chain, the Wallet Instance may have the snapshot of the federation configuration (Trust Anchor Entity Configuration in the Trust Chain) and the verifiable reliability of the Relying Party it has interacted with. +- Each signed attestation is long-lived since it can be cryptographically validated even when the federation configuration changes or the keys of its issuers are renewed. +- Each participant should be able to update its Entity Configuration without notifying the changes to any third party. The metadata policy contained within a Trust Chain must be applied to overload any information related to protocol specific metadata. diff --git a/rp-vp-kid/en/_sources/wallet-attestation.rst.txt b/rp-vp-kid/en/_sources/wallet-attestation.rst.txt new file mode 100644 index 000000000..d716b88fc --- /dev/null +++ b/rp-vp-kid/en/_sources/wallet-attestation.rst.txt @@ -0,0 +1,579 @@ +.. include:: ../common/common_definitions.rst + +.. _wallet-attestation.rst: + +Wallet Attestation +++++++++++++++++++ + +Wallet Attestation contains information regarding the security level of the device hosting the Wallet Instance. It primarily certifies the **authenticity**, **integrity**, **security**, **privacy**, and **trustworthiness** of a particular Wallet Instance. The Wallet Attestation MUST contain a Wallet Instance public key. + +Requirements +------------ + +The following requirements for the Wallet Attestation are met: + +- The Wallet Attestation MUST use the signed JSON Web Token (JWT) format; +- The Wallet Attestation MUST give all the relevant information to attests the **integrity** and **security** of the device where the Wallet Instance is installed. +- The Wallet Attestation MUST be issued and signed by an accredited and reliable Wallet Provider, thereby providing integrity and authenticity to the attestation. +- The Wallet Provider MUST ensure the integrity, authenticity, and genuineness of the Wallet Instance, preventing any attempts at manipulation or falsification by unauthorized third parties. +- The Wallet Attestation MUST have a mechanism in place for revoking the Wallet Instance, allowing the Wallet Provider to terminate service for a specific instance at any time. +- The Wallet Attestation MUST be securely bound to the Wallet Instance ephemeral public key. +- The Wallet Attestation MAY be usable multiple times during its validity period, allowing for repeated authentication and authorization without the need to request new attestations with each interaction. +- The Wallet Attestation MUST be short-lived and MUST have an expiration date time, after which SHOULD no longer be considered valid. +- The Wallet Attestation MUST NOT be issued by the Wallet Provider if the authenticity, integrity, and genuineness are not guaranteed. In this case, the Wallet Instance MUST be revoked. +- Each Wallet Instance SHOULD be able to request multiple attestations with different ephemeral public keys associated to them. This requirement provides a privacy-preserving measure, as the public key MAY be used as a tracking tool during the presentation phase (see also the point listed below). +- The Wallet Attestation MUST NOT contain any information that can be used to directly reference the User. +- The Wallet Instances MUST secure a Wallet Attestation as a prerequisite for transitioning to the Operational state, as defined by `ARF`_. +- Private keys MUST be generated and stored in the WSCD using at least one of the approaches listed below: + + - **Local Internal WSCD**: in this approach, the WSCD relies entirely on the device's native cryptographic hardware, such as the Secure Enclave on iOS devices or the Hardware Backed Keystore or Strongbox on Android devices. + - **Local External WSCD**: the WSCD is an hardware external to the User's device, such as a smart card compliant with _GlobalPlatform_ and supporting _JavaCard_. + - **Remote WSCD**: Here, the WSCD utilizes a remote Hardware Security Module (HSM). + + - **Local Hybrid WSCD**: the WSCD involves a pluggable internal hardware component within the User's device, such as an _eUICC_ that adheres to _GlobalPlatform_ standards and supports _JavaCard_. + - **Remote Hybrid WSCD**: the WSCD involves a local component mixed with a remote service. + +.. warning:: + At the current stage, the current implementation profile defined in this document supports only the **Local Internal WSCD**. Future versions of this specification MAY include other approaches depending on the required `AAL`. + +Static Component View +--------------------- + +.. figure:: ../../images/static_view_wallet_instance_attestation.svg + :name: Wallet Solution Schema + :alt: The image illustrates the containment of Wallet Provider and Wallet Instances within the Wallet Solution, managed by the Wallet Provider. + :target: https://www.plantuml.com/plantuml/uml/VP8nJyCm48Lt_ugdTexOCw22OCY0GAeGOsMSerWuliY-fEg_9mrEPTAqw-VtNLxEtaJHGRh6AMs40rRlaS8AEgAB533H3-qS2Tu2zxPEWSF8TcrYv-mJzTOGNfzVnXXJ0wKCDorxydAUjMNNYMMVpug9OTrR7i22LlaesXlADPiOraToZWyBsgCsF-JhtFhyGyZJgNlbXVR1oX5R2YSoUdQYEzrQO1seLcfUeGXs_ot5_VzqYM6lQlRXMz6hsTccIbGHhGu2_hhfP1tBwHuZqdOUH6WuEmrKIeqtNonvXhq4ThY3Dc9xBNJv_rSwQeyfawhcZsTPIpKLKuFYSa_JyOPytJNk5m00 + +Dynamic Component View +---------------------- + +The Wallet Attestation acquisition flow can be divided into two main phases. The first phase involves device initialization and registration, which occurs only during the initial launch of the Wallet Instance (after installation). The second phase pertains to the actual acquisition of the Wallet Attestation. + +Wallet Instance Initialization and Registration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. figure:: ../../images/wallet_instance_initialization.svg + :name: Sequence Diagram for Wallet Instance Initialization + :alt: The figure illustrates the sequence diagram for initializa a Wallet Instance, with the steps explained below. + :target: https://www.plantuml.com/plantuml/uml/ZLFHRjD047o_hrYb3xHM-84yeA8Iqgf04IdmlBOtpYhEdRMt3eIlPy-cQMoPmeCZQszcTcOklewAeks-TjXgyEq-9t5RBWas8MWUVhfNZG6uu0QzEeU51e7PrqWo0upGseixGy3iEzOrATnvK_O5TIXi6XYYtj612pAKKYMiHrYJf4aFHurm4HjXNrL2v2StV9PmCAC2EHOxycL7pOkTSvM4je7WwoEqJV2mOOaAR8wCYSes2XlGBILZBaLu_SRU5j2L4PzEuB8d6k0g1US3Qa-nvm_ZPal53dW3Vmi4R7aEo3NcDJadFfX6E90aeRdPXOiFTwlRnzMNvVAJw-N60KqY5V1a-ZtPi8-1leIGAx87DkDxKYnHqLaTtIRdUg-sPm4hqyooOflKVKLPzXmgrMRF2UX9qZXu0kKzfGf6r8JkEnWTb3HGFLLrKZNyZHmR3PLWi-K2Rb7A7oW4ztICMMPPMRfaKOEy38T7h6ndlmGrBW1LAQeTNPvCpU5bWIkNgCzfqlXj9zELR8uYLvvAo8_miFnurkZQUXx6dq_oBSn_nPY-ZczOSuawke59m7Zt0BR-PvrnUB4FznEtQOVfYrd0w4Et5rOs9x-eFASP9VqTtRNzjFlwDm00 + +**Step 1:**: The User starts the Wallet Instance mobile app for the first time. + +**Step 2:**: The Wallet Instance: + + * check if Device Integrity Service is available. + * check whether the device meets the minimum security requirements. + +.. note:: + + **Federation Check:** The Wallet Instance needs to check if the Wallet Provider is part of the Federation, obtaining its protocol specific Metadata. A non-normative example of a response from the endpoint **.well-known/openid-federation** with the **Entity Configuration** and the **Metadata** of the Wallet Provider is represented within the section `Wallet Provider metadata`_. + +**Steps 3-5:**: The Wallet Instance sends a request to the Wallet Provider Backend and receives a one-time ``challenge``. This "challenge" is a ``nonce``, which must be unpredictable to serve as the main defense against replay attacks. The backend must generate the ``nonce`` value in a manner that ensures it is single-use and valid only within a specific time frame. This endpoint is compliant with the specification `OAuth 2.0 Nonce Endpoint`_. + + +.. code-block:: http + + GET /nonce HTTP/1.1 + Host: walletprovider.example.com + +.. code-block:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "nonce": "d2JhY2NhbG91cmVqdWFuZGFt" + } + +**Step 6**: The Wallet Instance, through the operating system, creates a pair of Cryptographic Hardware Keys and stores the corresponding Cryptographic Hardware Key Tag in local storage once the following requirements are met: + + 1. It MUST ensure that Cryptographic Hardware Keys do not already exist, if they exist and the Wallet is in the initialization phase they MUST be deleted. + 2. It MUST generate a pair of asymmetric Elliptic Curve keys (Cryptographic Hardware Keys) via a local WSCD. + 3. It SHOULD obtain a unique identifier (Cryptographic Hardware Key Tag) for the generated Cryptographic Hardware Keys from the operating system. If the operating system permits specifying a tag during the creation of keys, then a random string for the Cryptographic Hardware Key Tag MUST be selected. This random value MUST be collision-resistant and unpredictable to ensure security. To achieve this, consider using a cryptographic hash function or a secure random number generator provided by the operating system or a reputable cryptographic library. + 4. If the previous points are satisfied, It MUST store the Cryptographic Hardware Key Tag in a local storage. + +.. note:: + + **WSCD:** The Wallet Instance MAY use a local WSCD for key generation on devices that support this feature. On Android devices, Strongbox is RECOMMENDED, Trusted Execution Environment (TEE) SHOULD be used only when Strongbox is unavailable. For iOS devices, Secure Elements (SE) SHOULD be used. Given that each OEM offers a distinct SDK for accessing the local WSCD, the discussion hereafter will address this topic in a general context. + + +**Step 7**: The Wallet Instance uses the Device Integrity Service, providing a "challenge" and the Cryptographic Hardware Key Tag to acquire the Key Attestation. + +.. note:: + + **Device Integrity Service:** In this section the Device Integrity Service is considered as it is provided by device manufacturers. This service allows the verification of a key being securely stored within the device's hardware through a signed object. Additionally, it offers the verifiable proof that a specific Wallet Instance is authentic, unaltered, and in its original state using a specialized signed document made for this scope. + + The service also incorporates details in the signed object, such as the device type, model, app version, operating system version, bootloader status, and other relevant information to assess the device has not been compromised. For Android the service used is `Key Attestation`_ in addition to `Play Integrity API`_, while for iOS the `DeviceCheck`_ service. + +**Step 8**: The Device Integrity Service performs the following actions: + +* Creates a Key Attestation that is linked with the provided "challenge" and the public key of the Wallet Hardware. +* Incorporates information pertaining to the device's security. +* Uses an OEM private key to sign the Key Attestation, therefore verifieable with the related OEM certificate, confirming that the Cryptographic Hardware Keys are securely managed by the operating system. + +**Step 9**: The Wallet Instance sends the ``challenge`` with Key Attestation and Cryptographic Hardware Key Tag to the Wallet Provider Backend in order to register the Wallet Instance identified with the Cryptographic Hardware Key public key. + +.. note:: + + The Key Attestation (``key_attestation``) MUST be encoded in base64. + + +.. code-block:: http + + PUT /wallet-instance HTTP/1.1 + Host: walletprovider.example.com + Content-Type: application/json + + { + "challenge": "0fe3cbe0-646d-44b5-8808-917dd5391bd9", + "key_attestation": "o2NmbXRvYXBwbGUtYXBw... redacted", + "hardware_key_tag": "WQhyDymFKsP95iFqpzdEDWW4l7aVna2Fn4JCeWHYtbU=" + } + +.. note:: + It is not necessary to send the Wallet Hardware public key because it is already included in the ``key_attestation``. + +.. warning:: + During the registration phase of the Wallet Instance with the Wallet Provider it is also necessary to associate it with a specific user + uniquely identifiable by the Wallet Provider. This association is at the discretion of the Wallet PRovider and will not be addressed + within these guidelines as each Wallet Provider may or may not have a user identification system already implemented. + + +**Steps 10-12**: The Wallet Provider validates the ``challenge`` and ``key_attestation`` signature, therefore: + + 1. It MUST verify that the ``challenge`` was generated by Wallet Provider and has not already been used. + 2. It MUST validate the ``key_attestation`` as defined by the device manufacturers' guidelines. + 3. It MUST verify that the device in use has no security flaws and reflects the minimum security requirements defined by the Wallet Provider. + 4. If these checks are passed, it MUST register the Wallet Instance, keeping the Cryptographic Hardware Key Tag and all useful information related to the device. + 5. It SHOULD associate the Wallet Instance with a specific User uniquely identified within the Wallet Provider's systems. This will be useful for the lifecycle of the Wallet Instance and for a future revocation. + +.. code-block:: http + + HTTP/1.1 201 Created + Content-Type: application/json + +If any errors occur during the Wallet Instance registration, the Wallet Provider MUST return an error response. The response MUST use the content type set to *application/json* and MUST include the following parameters: + + - *error*. The error code. + - *error_description*. Text in human-readable form providing further details to clarify the nature of the error encountered. + +**Steps 13-14**: The Wallet Instance has been initialized and becomes operational. + +.. note:: **Threat Model**: while the registration endpoint does not necessitate any client authentication, it is safeguarded through the use of `key_attestation`. Proper validation of this attestation permits the registration of authentic and unaltered app instances. Any other claims submitted will not undergo validation, leading the endpoint to respond with an error. Additionally, the inclusion of a challenge helps prevent replay attacks. The authenticity of both the challenge and the ``hardware_key_tag`` is ensured by the signature found within the ``key_attestation``. + + +Wallet Attestation Issuance +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This section describes the Wallet Attestation format and how the Wallet Provider issues it. + +.. figure:: ../../images/wallet_instance_acquisition.svg + :name: Sequence Diagram for Wallet Attestation acquisition + :alt: The figure illustrates the sequence diagram for issuing a Wallet Attestation, with the steps explained below. + :target: https://www.plantuml.com/plantuml/uml/VLJ1Jjj04BtlLupWK8ZIIwNsWDGAH2bGgWe1BHSaQsmFzZJEhhixTff-VMTD4YV6pS4IoxvvyzxRcPm6GI_Dl3BOYBFDF2LlIiu9dfsJrFqnRse5SCOrMZ46Ct4U3du4yWU00PgW-2q473nYLP70jLLccr67mhg6NTHdQZaZHGaLdcK9z-HRNiDH0Xo6shCj2azaHplSUjUgK0yfPZEoULUQPZDZJ5JrzfDsFO4x-jrG442mj01NaqTXPq5Ab2VhzPOzQKkOJ5QyPo9QqA4casYOMnIA7en-Azhpah8PyBEMdVjbBQxmM9USmHNwV86Uu8QMOJ81LkuMkSAq8hD5S4asIecjBL1TqboF5Sne2JMoLzwlZpVQttZhXC2rvAE4gHg4ms_NbrSFbtSN5z_DYv1X9DerHWRkMOqIVA5yxHjj3YuLP0ii0UOacAEWqG2xJcObKlj4aQ92iZAosuAsuuX1wzS1UpVWB87mdE9W34eZUcL-zoAd7LOp5bCigPYi955jKc8eDLmCS7zrzkxzXwCDtnJg9gquItujPiVZJ7jUJ3bltUsJFdov-cyIkB0eZIUz-mZnT3HKCeL5bt-oAT9dJ0IBZG2KS0B5Ii5cwCz282_iNZCUcrZInyNhaWJNDIfdrDxhATxim8Ab_1_P5COzJtSVQ_faz-K73rYyrFIle48Z7-LT_txMDoFUpzizsNoFWTtfwnSZ7iSN8sxeu0SfxWPR5iQA_rBUBKIhV-Uc2MmBs6DEiEZWuqdrAzJlnSz8Z39OXH70-BECGyVRZoDZmjrCzzVga5ukNoSzMDDnn61VjyzQPaurXsPU_GC0 + +**Step 1:**: The User initiates a new operation that necessitates the acquisition of a Wallet Attestation. + +**Steps 2-3:**: The Wallet Instance checks if a Cryptographic Hardware Key exists and generates an ephemeral asymmetric key pair. The Wallet Instance also: + + 1. MUST ensure that Cryptographic Hardware Keys exist. If they do not exist, it is necessary to reinitialize the Wallet. + 2. MUST generates an ephemeral asymmetric key pair whose public key will be linked with the Wallet Attestation. + 3. MUST check if Wallet Provider is part of the federation and obtain its metadata. + + +**Steps 4-6:**: The Wallet Instance solicits a one-time "challenge" from the Wallet Provider Backend. This "challenge" takes the form of a "nonce," which is required to be unpredictable and serves as the main defense against replay attacks. The backend MUST produce the "nonce" in a manner that ensures its single-use within a predetermined time frame. + +.. code-block:: http + + GET /nonce HTTP/1.1 + Host: walletprovider.example.com + +.. code-block:: http + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "nonce": "d2JhY2NhbG91cmVqdWFuZGFt" + } + +**Step 7**: The Wallet Instance performs the following actions: + + * Creates a ``client_data``, a JSON structure that includes the challenge and the ephemeral public ``jwk``. + * Computes a ``client_data_hash`` by applying the SHA256 algorithm to the ``client_data``. + +Below a non-normative example of the ``client_data``. + +.. code-block:: json + + { + "challenge": "0fe3cbe0-646d-44b5-8808-917dd5391bd9", + "jwk": { + "crv": "P-256", + "kty": "EC", + "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44", + "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg", + "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c" + } + } + +**Steps 8-10**: The Wallet Instance takes the following steps: + + * It produces an hardware_signature by signing the ``client_data_hash`` with the Wallet Hardware's private key, serving as a proof of possession for the Cryptographic Hardware Keys. + * It requests the Device Integrity Service to create an ``integrity_assertion`` linked to the ``client_data_hash``. + * It receives a signed ``integrity_assertion`` from the Device Integrity Service, authenticated by the OEM. + +.. note:: ``integrity_assertion`` is a custom payload generated by Device Integrity Service, signed by device OEM and encoded in base64 to have uniformity between different devices. + +**Steps 11-12**: The Wallet Instance: + * Constructs the Wallet Attestation Request in the form of a JWT. This JWT includes the ``integrity_assertion``, ``hardware_signature``, ``challenge``, ``wallet_hardware_key_tag``, and ``public_jwk``, and is signed using the private key from the initially generated ephemeral key pair. + * Submits the Wallet Attestation Request to the Wallet Provider's backend through the token endpoint. + +Below an non-normative example of the Wallet Attestation Request JWT without encoding and signature applied: + +.. code-block:: + + { + "alg": "ES256", + "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "typ": "war+jwt" + } + . + { + "iss": "https://wallet-provider.example.org/instance/vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "sub": "https://wallet-provider.example.org/", + "challenge": "6ec69324-60a8-4e5b-a697-a766d85790ea", + "hardware_signature": "KoZIhvcNAQcCoIAwgAIB...redacted", + "integrity_assertion": "o2NmbXRvYXBwbGUtYXBwYX...redacted", + "hardware_key_tag": "WQhyDymFKsP95iFqpzdEDWW4l7aVna2Fn4JCeWHYtbU=", + "cnf": { + "jwk": { + "crv": "P-256", + "kty": "EC", + "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44", + "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg", + "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c" + } + }, + "vp_formats_supported": { + "jwt_vc_json": { + "alg_values_supported": ["ES256K", "ES384"], + }, + "jwt_vp_json": { + "alg_values_supported": ["ES256K", "EdDSA"], + }, + }, + }, + "iat": 1686645115, + "exp": 1686652315 + } + +The Wallet Instance MUST do an HTTP request to the Wallet Provider's `token endpoint`_, +using the method `POST `__. + +The **token** endpoint (as defined in `RFC 7523 section 4`_) requires the following parameters +encoded in ``application/x-www-form-urlencoded`` format: + +* ``grant_type`` set to ``urn:ietf:params:oauth:grant-type:jwt-bearer``; +* ``assertion`` containing the signed JWT of the Wallet Attestation Request. + +.. code-block:: http + + POST /token HTTP/1.1 + Host: wallet-provider.example.org + Content-Type: application/x-www-form-urlencoded + + grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer + &assertion=eyJhbGciOiJFUzI1NiIsImtpZCI6ImtoakZWTE9nRjNHeG... + +**Steps 13-17**: The Wallet Provider's backend assesses the Wallet Attestation Request and issues a Wallet Attestation, if the requirements described below are satisfied: + + 1. It MUST check the Wallet Attestation Request contains all the defined parameters according to :ref:`Table of the Wallet Attestation Request parameters `. + 2. It MUST verify that the signature of the received Wallet Attestation Request is valid and associated with public ``jwk``. + 3. It MUST verify that the ``challenge`` was generated by Wallet Provider and has not already been used. + 4. It MUST check that there is a Wallet Instance registered with that ``hardware_key_tag`` and that it is still valid. + 5. It MUST reconstruct the ``client_data`` via the ``challenge`` and the ``jwk`` public key, to validate ``hardware_signature`` via the Cryptographic Hardware Key public key registered and associated with the Wallet Instance. + 6. It MUST validate the ``integrity_assertion`` as defined by the device manufacturers' guidelines. + 7. It MUST verify that the device in use has no security flaws and reflects the minimum security requirements defined by the Wallet Provider. + 8. It MUST check that the URL in ``iss`` parameter is equal to the URL identifier of Wallet Provider. + +If all checks are passed, Wallet Provider issues a Wallet Attestation with an expiration limited to 24 hours. + +Below an non-normative example of the Wallet Attestation without encoding and signature applied: + +.. code-block:: + + { + "alg": "ES256", + "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY", + "trust_chain": [ + "eyJhbGciOiJFUz...6S0A", + "eyJhbGciOiJFUz...jJLA", + "eyJhbGciOiJFUz...H9gw", + ], + "typ": "wallet-attestation+jwt", + } + . + { + "iss": "https://wallet-provider.example.org", + "sub": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c", + "aal": "https://trust-list.eu/aal/high", + "cnf": + { + "jwk": + { + "crv": "P-256", + "kty": "EC", + "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44", + "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg", + "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c" + } + }, + "authorization_endpoint": "eudiw:", + "response_types_supported": [ + "vp_token" + ], + "response_modes_supported": [ + "form_post.jwt" + ], + "vp_formats_supported": { + "vc+sd-jwt": { + "sd-jwt_alg_values": [ + "ES256", + "ES384" + ] + } + }, + "request_object_signing_alg_values_supported": [ + "ES256" + ], + "presentation_definition_uri_supported": false, + "iat": 1687281195, + "exp": 1687288395 + } + +**Step 18**: The Wallet Instance receives the Wallet Attestation signed by the Wallet Provider and performs security and integrity verifications. + +.. code-block:: http + + HTTP/1.1 201 OK + Content-Type: application/jwt + + eyJhbGciOiJFUzI1NiIsInR5cCI6IndhbGx... redacted + + +.. _table_wallet_attestation_request_claim: + +Wallet Attestation Request +~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The JOSE header of the Wallet Attestation Request JWT MUST contain: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE header** + - **Description** + - **Reference** + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section `Cryptographic Algorithms `_ and MUST NOT be set to ``none`` or any symmetric algorithm (MAC) identifier. + - :rfc:`7516#section-4.1.1`. + * - **kid** + - Unique identifier of the ``jwk`` inside the ``cnf`` claim of Wallet Instance as base64url-encoded JWK Thumbprint value. + - :rfc:`7638#section_3`. + * - **typ** + - It MUST be set to ``var+jwt`` + - + +The body of the Wallet Attestation Request JWT MUST contain: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - Identifier of the Wallet Provider concatenated with thumbprint of the JWK in the ``cnf`` parameter. + - :rfc:`9126` and :rfc:`7519`. + * - **aud** + - It MUST be set to the identifier of the Wallet Provider. + - :rfc:`9126` and :rfc:`7519`. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT. + - :rfc:`9126` and :rfc:`7519`. + * - **iat** + - UNIX Timestamp with the time of JWT issuance. + - :rfc:`9126` and :rfc:`7519`. + * - **challenge** + - Challenge data obtained from ``nonce`` endpoint + - + * - **hardware_signature** + - The signature of ``client_data`` obtained using Cryptographic Hardware Key base64 encoded. + - + * - **integrity_assertion** + - The integrity assertion obtained from the **Device Integrity Service** with the holder binding of ``client_data``. + - + * - **hardware_key_tag** + - Unique identifier of the **Cryptographic Hardware Keys** + - + * - **cnf** + - JSON object, containing the public part of an asymmetric key pair owned by the Wallet Instance. + - :rfc:`7800` + +.. _table_wallet_attestation_claim: + +Wallet Attestation +~~~~~~~~~~~~~~~~~~ + +The JOSE header of the Wallet Attestation JWT MUST contain: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **JOSE header** + - **Description** + - **Reference** + * - **alg** + - A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section `Cryptographic Algorithms `_ and MUST NOT be set to ``none`` or any symmetric algorithm (MAC) identifier. + - :rfc:`7516#section-4.1.1`. + * - **kid** + - Unique identifier of the ``jwk`` inside the ``cnf`` claim of Wallet Instance as base64url-encoded JWK Thumbprint value. + - :rfc:`7638#section_3`. + * - **typ** + - It MUST be set to ``wallet-attestation+jwt`` + - `OPENID4VC-HAIP`_ + * - **trust_chain** + - Sequence of Entity Statements that composes the Trust Chain related to the Relying Party. + - `OIDC-FED`_ Section *3.2.1. Trust Chain Header Parameter*. + +The body of the Wallet Attestation JWT MUST contain: + +.. list-table:: + :widths: 20 60 20 + :header-rows: 1 + + * - **Claim** + - **Description** + - **Reference** + * - **iss** + - Identifier of the Wallet Provider + - :rfc:`9126` and :rfc:`7519`. + * - **aud** + - Identifier of the Wallet Provider concatenated with thumbprint of the Wallet Instance. + - :rfc:`9126` and :rfc:`7519`. + * - **exp** + - UNIX Timestamp with the expiry time of the JWT. + - :rfc:`9126` and :rfc:`7519`. + * - **iat** + - UNIX Timestamp with the time of JWT issuance. + - :rfc:`9126` and :rfc:`7519`. + * - **cnf** + - JSON object, containing the public part of an asymmetric key pair owned by the Wallet Instance. + - :rfc:`7800` + * - **aal** + - JSON String asserting the authentication level of the Wallet and the key as asserted in the cnf claim. + - + * - **authorization_endpoint** + - URL of the Wallet Authorization Endpoint (Universal Link). + - + * - **response_types_supported** + - JSON array containing a list of the OAuth 2.0 ``response_type`` values. + - + * - **response_modes_supported** + - JSON array containing a list of the OAuth 2.0 "response_mode" values that this authorization server supports. + - :rfc:`8414` + * - **vp_formats_supported** + - JSON object with name/value pairs, identifying a Credential format supported by the Wallet. + - + * - **request_object_signing_alg_values_supported** + - JSON array containing a list of the JWS signing algorithms (alg values) supported. + - + * - **presentation_definition_uri_supported** + - Boolean value specifying whether the Wallet Instance supports the transfer of presentation_definition by reference. MUST be set to false. + - + + +Wallet Instance Lifecycle +----------------------------- + +The ability of the Wallet Instance to obtain a Wallet Attestation is bound to its current state. +The Wallet Instance assesses its current state based on the Credentials stored locally and the Wallet Attestation issued by the Wallet Provider. + +The lifecycle of a Wallet Instance encompasses all the potential states it can configure, along with the transitions from one state to another. This lifecycle is depicted in the diagram below: + +.. figure:: ../../images/wallet_instance_lifecycle.svg + :name: Wallet Instance Lifecycle + :alt: Illustration representing the Wallet Instance lifecycle, with the states explained below. + :target: https://www.plantuml.com/plantuml/uml/SoWkIImgAStDuOhMYbNGrRLJyCm32kNafAPOAMH2c5mAG00N1YloBqWjIYp9pCzBpB5IA4ijoaoh1Ab25WUh2qlCoKm1gW1HYIMf83KGCKnJClDmg799JKmkoIm3IW1DAaejoyzEHRSBfpfCbmEzQQLGceVaDOH6x4emxS9KWd0mfgH3QbuAC801 + + +A Wallet Instance SHOULD obtain a Wallet Attestation if it's in either `Installed`, `Operational` or `Valid` state; that implies that a `Deactivated` Wallet Instance cannot obtain a Wallet Attestation hence it cannot interact with other entities of the ecosystem, such as PID/(Q)EAA Providers and Relying Parties. + +States +~~~~~~~~~~~~~~~~~~ +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **State** + - **Description** + * - `Installed` + - The User has installed the Wallet Solution on the device. + * - `Operational` + - The Wallet Instance has been verified and the Wallet Hardware Key has been registered; no valid PID is present in the storage. + * - `Valid` + - A valid PID is present in the storage. + * - `Deactivated` + - The Wallet Instance has been revoked and its Wallet Hardware Key has been marked as not usable. + +Transitions +~~~~~~~~~~~~~~~~~~ +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Transition** + - **Description** + * - `install` + - The User performs a fresh installation or restores the initial state of the Wallet Instance on the device. + * - `verify` + - The Wallet Instance has been verified by the Wallet Provider and its Wallet Hardware Key has been registered. + * - `validate` + - The Wallet Instance obtains a valid PID. + * - `invalidate` + - The PID expires or gets revoked. + * - `revoke` + - The Wallet Provider marks the Wallet Instance as not usable. + * - `uninstall` + - The User removes the Wallet Instance from the device. + +Revocations +~~~~~~~~~~~~~~~~~~ +As mentioned in the *Wallet Instance initialization and registration* section above, a Wallet Instance is bound to a Wallet Hardware Key and it's uniquely identified by it. +The Wallet Instance SHOULD send its public Wallet Hardware Key with the Wallet Provider, thus the Wallet Provider MUST identify a Wallet Instance by its Wallet Hardware Key. + +When a Wallet Instance is not usable anymore, the Wallet Provider MUST revoke it. The revocation process is a unilateral action taken by the Wallet Provider, and it MUST be performed when the Wallet Instance is in the `Operational` or `Valid` state. +A Wallet Instance becomes unusable for several reasons, such as: the User requests the revocation, the Wallet Provider detects a security issue, or the Wallet Instance is no longer compliant with the Wallet Provider's security requirements. + +The details of the revocation mechanism used by the Wallet Provider as well as the data model for maintaining the Wallet Instance references is delegated to the Wallet Provider's implementation. + +During the *Wallet Instance initialization and registration* phase the Wallet Provider MAY associate the Wallet Instance with a specific User, subject to obtaining the User's consent. The Wallet Provider MUST evaluate the operating system and general technical capabilities of the device to check compliance with the technical and security requirements and to produce the Wallet Instance metadata. +When the User consents to being linked with the Wallet Instance, they gain the ability to directly request Wallet revocation from the Wallet Provider, and it also allows the Wallet Provider to revoke the Wallet Instance associated with that User. + + + +.. _token endpoint: wallet-solution.html#wallet-attestation +.. _Wallet Attestation Request: wallet-attestation.html#format-of-the-wallet-attestation-request +.. _Wallet Attestation: wallet-attestation.html#format-of-the-wallet-attestation +.. _RFC 7523 section 4: https://www.rfc-editor.org/rfc/rfc7523.html#section-4 +.. _RFC 8414 section 2: https://www.rfc-editor.org/rfc/rfc8414.html#section-2 +.. _Wallet Provider metadata: wallet-solution.html#wallet-provider-metadata +.. _Key Attestation: https://developer.android.com/privacy-and-security/security-key-attestation +.. _Play Integrity API: https://developer.android.com/google/play/integrity?hl=it +.. _DeviceCheck: https://developer.apple.com/documentation/devicecheck +.. _OAuth 2.0 Nonce Endpoint: https://datatracker.ietf.org/doc/draft-demarco-oauth-nonce-endpoint/ +.. _ARF: https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework diff --git a/rp-vp-kid/en/_sources/wallet-solution.rst.txt b/rp-vp-kid/en/_sources/wallet-solution.rst.txt new file mode 100644 index 000000000..31fd4893c --- /dev/null +++ b/rp-vp-kid/en/_sources/wallet-solution.rst.txt @@ -0,0 +1,278 @@ +.. include:: ../common/common_definitions.rst + +.. _wallet-solution.rst: + +Wallet Solution +------------------- + +The Wallet Solution is a comprehensive product offered by the Wallet Provider to cater to the needs of Users in managing their digital assets securely. It is issued by the Wallet Provider in the form of a mobile app, it also consists of services and web interfaces for the exchange of data between the Wallet Provider and its Wallet Instances for the requirements of the trust model and in total respect of the User's privacy, in accordance with national and EU legislation. + +The mobile app serves as the primary interface for Users, allowing them to access and interact with their digital Credentials conveniently. These are a set of data that can uniquely identify a natural or a legal person, along with other Qualified and non-qualified Electronic Attestations of Attributes, also known as QEAAs and EAAs respectively, or (Q)EAAs for short[1]. Once a User installs the mobile app on their device, it is referred to such an installation as a Wallet Instance for the User. + +By supporting the mobile app, the Wallet Provider plays a vital role in ensuring the security and reliability of the entire Wallet Solution, since it is responsible for issuing the Wallet Attestation, that is a cryptographic proof that allow the evaluation of the authenticity and the integrity of the Wallet Instance. + +The Wallet Provider MUST offer a RESTful set of services for issuing the Wallet Attestations. + +Requirements +^^^^^^^^^^^^ + +This section lists below the essential requirements that must be met by the Wallet Solution to ensure its functionality, security, and compliance with relevant standards and regulations. + + - **Trustworthiness within the Wallet ecosystem**: the Wallet Instance MUST establish trust and reliability within the Wallet ecosystem. + - **Compliance with Provider specifications for obtaining PID and (Q)EAA**: the Wallet Instance MUST adhere to the specifications set by Providers for obtaining Personal Identification (PID) and (Q)EAAs. + - **Support for Android and iOS operating systems**: the Wallet Instance MUST be compatible and functional at least on both Android and iOS operating systems, as well as available on the Play Store and App Store respectively. + - **Verification of device ownership by the User**: the Wallet Instance MUST provide a mechanism to verify the User's actual possession and full control of their personal device. + + +Wallet Instance +^^^^^^^^^^^^^^^ +The Wallet Instance serves as a unique and secure device for authenticating the User within the Wallet ecosystem. It establishes a strong and reliable mechanismm for the User to engage various digital transactions in a secure and privacy-preserving manner. + +The Wallet Instance establishes the trust within the Wallet ecosystem by consistently presenting a Wallet Attestation during interactions with other ecosystem actors such as PID Providers, (Q)EAA Providers, and Relying Parties. These verifiable attestations, provided by the Wallet Provider, purpose to authenticate the Wallet Instance itself, ensuring its realiability when engaging with other ecosystem actors. + +To guarantee the utmost security, these cryptographic keys MUST be securely stored within the WSCD which MAY be internal (device's Trusted Execution Environment (TEE)[3]), external, or hybrid. This ensures that only the User is allowed to access them, thus preventing unauthorized usage or tampering. For more detailed information please refer to the `Wallet Attestation section`_ and the `Trust Model section`_ of this document. + +Wallet Instance Lifecycle +^^^^^^^^^^^^^^^^^^^^^^^^^ +The Wallet Instance has three distinct states: Operational, Valid, and Deactivated. Each state represents a specific functional status and determines the actions that can be performed[2]. + +Initialization Process +~~~~~~~~~~~~~~~~~~~~~~ +To activate the Wallet Instance, the Users MUST install the mobile Wallet application on their device and open it. Furthermore, Users will be asked to set their preferred method of unlocking their device; this can be accomplished by entering a personal identification number (PIN) or by utilizing biometric authentication, such as fingerprint or facial recognition, according to their personal preferences and device's capabilities. + +After completing these steps, the Wallet Instance sets the Operational state. + +Transition to Valid state +~~~~~~~~~~~~~~~~~~~~~~~~~ +To transition from the Operational state to the Valid state, the Wallet Instance MUST obtain a valid Personal Identification (PID). Once a valid PID is acquired, the Wallet Instance becomes Valid. + +To securely and unambiguously authenticate Users, the Wallet Instance necessitates a High Level of Assurance (LoA 3) for User authentication. The method to achieve this LoA is selected by the PID Provider based on the identity proofing method employed during the provisioning of the Digital Credential to the User. Furthermore, to store the acquired Digital Credential, the Wallet Instance MUST demonstrate to the Credential Issuer an adequate security compliance to maintain the Credential at the same LoA at which it was issued. + +Once the Wallet Instance is in the Operational state, Users can: + + - Obtain, view, and manage (Q)EAAs from trusted (Q)EAA Providers[1]; + - Authenticate to Relying Parties[1]; + - Authorize the presentation of their digital Credentials with Relying Parties. + +Please refer to the relative sections for further information about PID and (Q)EAAs issuance and presentation. + + +Return to Operational state +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +A Valid Wallet Instance may revert to the Operational state under specific circumstances. These circumstances include the expiration or the revocation of the associated PID by its PID Provider. + + +Deactivation +~~~~~~~~~~~~ +Users have the ability to deactivate the Wallet Instance voluntarily. This action removes the operational capabilities of the Wallet Instance and sets it to the Deactivated state. Deactivation provides Users with control over access and usage according to their preferences. + + +Wallet Provider Endpoints +^^^^^^^^^^^^^^^^^^^^^^^^^ + +The Wallet Provider that issues the Wallet Attestations MUST +made available its APIs in the form of RESTful services, as listed below. + +Wallet Provider Metadata +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +An HTTP GET request to the **/.well-known/openid-federation** endpoint allows the retrieval of the Wallet +Provider Entity Configuration. + +The Wallet Provider Entity Configuration is a JWS containing the public keys and supported algorithms of the Wallet Provider metadata definition. It is structured in accordance with the `OpenID Connect Federation `_ and the Trust Model section outlined in this specification. + +The returning Entity Configuration of the Wallet Provider MUST contain the +attributes listed below: + +Header +^^^^^^ ++---------+-----------------------------------------------------------------+ +| **Key** | **Value** | ++---------+-----------------------------------------------------------------+ +| alg | Algorithm used to verify the token signature (e.g., ES256). | ++---------+-----------------------------------------------------------------+ +| kid | Thumbprint of the public key used for signing. | ++---------+-----------------------------------------------------------------+ +| typ | Media type, set to ``entity-statement+jwt``. | ++---------+-----------------------------------------------------------------+ + +Payload +^^^^^^^ ++-----------------------------------+-----------------------------------+ +| **Key** | **Value** | ++-----------------------------------+-----------------------------------+ +| iss | Public URL of the Wallet | +| | Provider. | ++-----------------------------------+-----------------------------------+ +| sub | Public URL of the Wallet | +| | Provider. | ++-----------------------------------+-----------------------------------+ +| iat | Issuance datetime in | +| | Unix Timestamp format. | ++-----------------------------------+-----------------------------------+ +| exp | Expiration datetime | +| | in Unix Timestamp format. | ++-----------------------------------+-----------------------------------+ +| authority_hints | Array of URLs (String) containing | +| | the list of URLs of the | +| | immediate superior Entities, such | +| | as the Trust Anchor or an | +| | Intermediate, that MAY issue an | +| | Entity Statement related to this | +| | subject. | ++-----------------------------------+-----------------------------------+ +| jwks | A JSON Web Key Set (JWKS) `RFC | +| | 7517 `_ | +| | that represents the public part | +| | of the signing keys of the Entity | +| | at issue. Each JWK in the JWK set | +| | MUST have a key ID (claim kid). | ++-----------------------------------+-----------------------------------+ +| metadata | Contains the | +| | metadata | +| | ``wallet_provider`` | +| | and the | +| | ``federation_entity`` metadata. | ++-----------------------------------+-----------------------------------+ + +`wallet_provider` metadata +~~~~~~~~~~~~~~~~~~~~~~~~~~ + ++---------------------------------------------+---------------------------------------------------------------------+ +| **Key** | **Value** | ++---------------------------------------------+---------------------------------------------------------------------+ +| jwks | A JSON Web Key Set (JWKS) | +| | that represents the Wallet | +| | Provider's public keys. | ++---------------------------------------------+---------------------------------------------------------------------+ +| token_endpoint | Endpoint for obtaining the Wallet | +| | Instance Attestation. | ++---------------------------------------------+---------------------------------------------------------------------+ +| aal_values_supported | List of supported values for the | +| | certifiable security context. These | +| | values specify the security level | +| | of the app, according to the levels: low, medium, or high. | +| | Authenticator Assurance Level values supported. | ++---------------------------------------------+---------------------------------------------------------------------+ +| grant_types_supported | The types of grants supported by | +| | the token endpoint. It MUST be set to | +| | ``urn:ietf:params:oauth:client-assertion-type: | +| | jwt-client-attestation``. | ++---------------------------------------------+---------------------------------------------------------------------+ +| token_endpoint_auth_methods_suppor | Supported authentication methods for | +| ted | the token endpoint. | ++---------------------------------------------+---------------------------------------------------------------------+ +| token_endpoint_auth_signing_alg_va | Supported signature | +| lues_supported | algorithms for the token endpoint. | ++---------------------------------------------+---------------------------------------------------------------------+ + +.. note:: + The `aal_values_supported` parameter is experimental and under review. + +Payload `federation_entity` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + ++-------------------+----------------------------------------------+ +| **Key** | **Value** | ++-------------------+----------------------------------------------+ +| organization_name | Organization name. | ++-------------------+----------------------------------------------+ +| homepage_uri | Organization's website URL. | ++-------------------+----------------------------------------------+ +| tos_uri | URL to the terms of service. | ++-------------------+----------------------------------------------+ +| policy_uri | URL to the privacy policy. | ++-------------------+----------------------------------------------+ +| logo_uri | URL of the organization's logo in SVG format.| ++-------------------+----------------------------------------------+ + +Below a non-normative example of the Entity Configuration. + +.. code-block:: javascript + + { + "alg": "ES256", + "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY", + "typ": "entity-statement+jwt" + } + . + { + "iss": "https://wallet-provider.example.org", + "sub": "https://wallet-provider.example.org", + "jwks": { + "keys": [ + { + "crv": "P-256", + "kty": "EC", + "x": "qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk", + "y": "1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM", + "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY" + } + ] + }, + "metadata": { + "wallet_provider": { + "jwks": { + "keys": [ + { + "crv": "P-256", + "kty": "EC", + "x": "qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk", + "y": "1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM", + "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY" + } + ] + }, + "token_endpoint": "https://wallet-provider.example.org/token", + "aal_values_supported": [ + "https://wallet-provider.example.org/LoA/basic", + "https://wallet-provider.example.org/LoA/medium", + "https://wallet-provider.example.org/LoA/high" + ], + "grant_types_supported": [ + "urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation" + ], + "token_endpoint_auth_methods_supported": [ + "private_key_jwt" + ], + "token_endpoint_auth_signing_alg_values_supported": [ + "ES256", + "ES384", + "ES512" + ] + }, + "federation_entity": { + "organization_name": "IT Wallet Provider", + "homepage_uri": "https://wallet-provider.example.org", + "policy_uri": "https://wallet-provider.example.org/privacy_policy", + "tos_uri": "https://wallet-provider.example.org/info_policy", + "logo_uri": "https://wallet-provider.example.org/logo.svg" + } + }, + "authority_hints": [ + "https://registry.eudi-wallet.example.it" + ] + "iat": 1687171759, + "exp": 1709290159 + } + + +Wallet Attestation +~~~~~~~~~~~~~~~~~~ + +Please refer to the `Wallet Attestation section`_. + + +External references +^^^^^^^^^^^^^^^^^^^^ +.. [1] Definitions are inherited from the EUDI Wallet Architecture and Reference Framework, version 1.1.0 at the time of writing. Please refer to `this page `_ for extended definitions and details. + +.. [2] Wallet Instance states adhere to the EUDI Wallet Architecture and Reference Framework, as defined `here `_. + +.. [3] Depending on the device operating system, TEE is defined by `Trusty`_ or `Secure Enclave`_ for Android and iOS devices, respectively. + +.. _Trust Model section: trust.html +.. _Wallet Attestation section: wallet-attestation.html +.. _Trusty: https://source.android.com/docs/security/features/trusty +.. _Secure Enclave: https://support.apple.com/en-gb/guide/security/sec59b0b31ff/web + diff --git a/rp-vp-kid/en/_static/_sphinx_javascript_frameworks_compat.js b/rp-vp-kid/en/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 000000000..8549469dc --- /dev/null +++ b/rp-vp-kid/en/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,134 @@ +/* + * _sphinx_javascript_frameworks_compat.js + * ~~~~~~~~~~ + * + * Compatability shim for jQuery and underscores.js. + * + * WILL BE REMOVED IN Sphinx 6.0 + * xref RemovedInSphinx60Warning + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/rp-vp-kid/en/_static/basic.css b/rp-vp-kid/en/_static/basic.css new file mode 100644 index 000000000..9039e027c --- /dev/null +++ b/rp-vp-kid/en/_static/basic.css @@ -0,0 +1,932 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, aside.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic, aside.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +aside.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +aside.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +/* Docutils 0.17 and older (footnotes & citations) */ +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +/* Docutils 0.18+ (footnotes & citations) */ +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +/* Footnotes & citations ends */ + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/rp-vp-kid/en/_static/css/theme.css b/rp-vp-kid/en/_static/css/theme.css new file mode 100644 index 000000000..6c29bebea --- /dev/null +++ b/rp-vp-kid/en/_static/css/theme.css @@ -0,0 +1 @@ +@charset "UTF-8";@import url("https://fonts.googleapis.com/css?family=Lora:400,700");@import url("https://fonts.googleapis.com/css?family=Roboto+Mono:400,700");@import url("https://fonts.googleapis.com/css?family=Titillium+Web:300,400,600,700");.primary-bg{background-color:#06c}.primary-color{color:#06c}.primary-border-color,.primary-border-color.border{border-color:#06c!important}.white-bg{background-color:#fff}.white-color{color:#fff}.white-border-color-,.white-border-color-.border{border-color:#fff!important}.primary-bg-a1{background-color:#bfdfff}.primary-color-a1{color:#bfdfff}.primary-border-color-a1,.primary-border-color-a1.border{border-color:#bfdfff!important}.primary-bg-a2{background-color:#93c4f5}.primary-color-a2{color:#93c4f5}.primary-border-color-a2,.primary-border-color-a2.border{border-color:#93c4f5!important}.primary-bg-a3{background-color:#6aaaeb}.primary-color-a3{color:#6aaaeb}.primary-border-color-a3,.primary-border-color-a3.border{border-color:#6aaaeb!important}.primary-bg-a4{background-color:#4392e0}.primary-color-a4{color:#4392e0}.primary-border-color-a4,.primary-border-color-a4.border{border-color:#4392e0!important}.primary-bg-a5{background-color:#207bd6}.primary-color-a5{color:#207bd6}.primary-border-color-a5,.primary-border-color-a5.border{border-color:#207bd6!important}.primary-bg-a6{background-color:#06c}.primary-color-a6{color:#06c}.primary-border-color-a6,.primary-border-color-a6.border{border-color:#06c!important}.primary-bg-a7{background-color:#0059b3}.primary-color-a7{color:#0059b3}.primary-border-color-a7,.primary-border-color-a7.border{border-color:#0059b3!important}.primary-bg-a8{background-color:#004d99}.primary-color-a8{color:#004d99}.primary-border-color-a8,.primary-border-color-a8.border{border-color:#004d99!important}.primary-bg-a9{background-color:#004080}.primary-color-a9{color:#004080}.primary-border-color-a9,.primary-border-color-a9.border{border-color:#004080!important}.primary-bg-a10{background-color:#036}.primary-color-a10{color:#036}.primary-border-color-a10,.primary-border-color-a10.border{border-color:#036!important}.primary-bg-a11{background-color:#00264d}.primary-color-a11{color:#00264d}.primary-border-color-a11,.primary-border-color-a11.border{border-color:#00264d!important}.primary-bg-a12{background-color:#001a33}.primary-color-a12{color:#001a33}.primary-border-color-a12,.primary-border-color-a12.border{border-color:#001a33!important}.primary-bg-b1{background-color:#06c}.primary-color-b1{color:#06c}.primary-border-color-b1,.primary-border-color-b1.border{border-color:#06c!important}.primary-bg-b2{background-color:#1262b3}.primary-color-b2{color:#1262b3}.primary-border-color-b2,.primary-border-color-b2.border{border-color:#1262b3!important}.primary-bg-b3{background-color:#1f5c99}.primary-color-b3{color:#1f5c99}.primary-border-color-b3,.primary-border-color-b3.border{border-color:#1f5c99!important}.primary-bg-b4{background-color:#265380}.primary-color-b4{color:#265380}.primary-border-color-b4,.primary-border-color-b4.border{border-color:#265380!important}.primary-bg-b5{background-color:#294766}.primary-color-b5{color:#294766}.primary-border-color-b5,.primary-border-color-b5.border{border-color:#294766!important}.primary-bg-b6{background-color:#26394d}.primary-color-b6{color:#26394d}.primary-border-color-b6,.primary-border-color-b6.border{border-color:#26394d!important}.primary-bg-b7{background-color:#1f2933}.primary-color-b7{color:#1f2933}.primary-border-color-b7,.primary-border-color-b7.border{border-color:#1f2933!important}.primary-bg-b8{background-color:#12161a}.primary-color-b8{color:#12161a}.primary-border-color-b8,.primary-border-color-b8.border{border-color:#12161a!important}.primary-bg-c1{background-color:#dce9f5}.primary-color-c1{color:#dce9f5}.primary-border-color-c1,.primary-border-color-c1.border{border-color:#dce9f5!important}.primary-bg-c2{background-color:#c4dcf5}.primary-color-c2{color:#c4dcf5}.primary-border-color-c2,.primary-border-color-c2.border{border-color:#c4dcf5!important}.primary-bg-c3{background-color:#abd0f5}.primary-color-c3{color:#abd0f5}.primary-border-color-c3,.primary-border-color-c3.border{border-color:#abd0f5!important}.primary-bg-c4{background-color:#93c4f5}.primary-color-c4{color:#93c4f5}.primary-border-color-c4,.primary-border-color-c4.border{border-color:#93c4f5!important}.primary-bg-c5{background-color:#7ab8f5}.primary-color-c5{color:#7ab8f5}.primary-border-color-c5,.primary-border-color-c5.border{border-color:#7ab8f5!important}.primary-bg-c6{background-color:#62abf5}.primary-color-c6{color:#62abf5}.primary-border-color-c6,.primary-border-color-c6.border{border-color:#62abf5!important}.primary-bg-c7{background-color:#499ff5}.primary-color-c7{color:#499ff5}.primary-border-color-c7,.primary-border-color-c7.border{border-color:#499ff5!important}.primary-bg-c8{background-color:#3193f5}.primary-color-c8{color:#3193f5}.primary-border-color-c8,.primary-border-color-c8.border{border-color:#3193f5!important}.primary-bg-c9{background-color:#1887f5}.primary-color-c9{color:#1887f5}.primary-border-color-c9,.primary-border-color-c9.border{border-color:#1887f5!important}.primary-bg-c10{background-color:#007af5}.primary-color-c10{color:#007af5}.primary-border-color-c10,.primary-border-color-c10.border{border-color:#007af5!important}.primary-bg-c11{background-color:#0070e0}.primary-color-c11{color:#0070e0}.primary-border-color-c11,.primary-border-color-c11.border{border-color:#0070e0!important}.primary-bg-c12{background-color:#06c}.primary-color-c12{color:#06c}.primary-border-color-c12,.primary-border-color-c12.border{border-color:#06c!important}.analogue-1-bg-a1{background-color:#e7e6ff}.analogue-1-color-a1{color:#e7e6ff}.analogue-1-border-color-a1,.analogue-1-border-color-a1.border{border-color:#e7e6ff!important}.analogue-1-bg-a2{background-color:#bbb8f5}.analogue-1-color-a2{color:#bbb8f5}.analogue-1-border-color-a2,.analogue-1-border-color-a2.border{border-color:#bbb8f5!important}.analogue-1-bg-a3{background-color:#918deb}.analogue-1-color-a3{color:#918deb}.analogue-1-border-color-a3,.analogue-1-border-color-a3.border{border-color:#918deb!important}.analogue-1-bg-a4{background-color:#6b65e0}.analogue-1-color-a4{color:#6b65e0}.analogue-1-border-color-a4,.analogue-1-border-color-a4.border{border-color:#6b65e0!important}.analogue-1-bg-a5{background-color:#4840d6}.analogue-1-color-a5{color:#4840d6}.analogue-1-border-color-a5,.analogue-1-border-color-a5.border{border-color:#4840d6!important}.analogue-1-bg-a6{background-color:#271fcc}.analogue-1-color-a6{color:#271fcc}.analogue-1-border-color-a6,.analogue-1-border-color-a6.border{border-color:#271fcc!important}.analogue-1-bg-a7{background-color:#221bb3}.analogue-1-color-a7{color:#221bb3}.analogue-1-border-color-a7,.analogue-1-border-color-a7.border{border-color:#221bb3!important}.analogue-1-bg-a8{background-color:#1d1799}.analogue-1-color-a8{color:#1d1799}.analogue-1-border-color-a8,.analogue-1-border-color-a8.border{border-color:#1d1799!important}.analogue-1-bg-a9{background-color:#191380}.analogue-1-color-a9{color:#191380}.analogue-1-border-color-a9,.analogue-1-border-color-a9.border{border-color:#191380!important}.analogue-1-bg-a10{background-color:#140f66}.analogue-1-color-a10{color:#140f66}.analogue-1-border-color-a10,.analogue-1-border-color-a10.border{border-color:#140f66!important}.analogue-1-bg-a11{background-color:#0f0b4d}.analogue-1-color-a11{color:#0f0b4d}.analogue-1-border-color-a11,.analogue-1-border-color-a11.border{border-color:#0f0b4d!important}.analogue-1-bg-a12{background-color:#0a0833}.analogue-1-color-a12{color:#0a0833}.analogue-1-border-color-a12,.analogue-1-border-color-a12.border{border-color:#0a0833!important}.analogue-2-bg-a1{background-color:#ccfffd}.analogue-2-color-a1{color:#ccfffd}.analogue-2-border-color-a1,.analogue-2-border-color-a1.border{border-color:#ccfffd!important}.analogue-2-bg-a2{background-color:#9ff5f2}.analogue-2-color-a2{color:#9ff5f2}.analogue-2-border-color-a2,.analogue-2-border-color-a2.border{border-color:#9ff5f2!important}.analogue-2-bg-a3{background-color:#75ebe7}.analogue-2-color-a3{color:#75ebe7}.analogue-2-border-color-a3,.analogue-2-border-color-a3.border{border-color:#75ebe7!important}.analogue-2-bg-a4{background-color:#4fe0dc}.analogue-2-color-a4{color:#4fe0dc}.analogue-2-border-color-a4,.analogue-2-border-color-a4.border{border-color:#4fe0dc!important}.analogue-2-bg-a5{background-color:#2bd6d0}.analogue-2-color-a5{color:#2bd6d0}.analogue-2-border-color-a5,.analogue-2-border-color-a5.border{border-color:#2bd6d0!important}.analogue-2-bg-a6{background-color:#0accc6}.analogue-2-color-a6{color:#0accc6}.analogue-2-border-color-a6,.analogue-2-border-color-a6.border{border-color:#0accc6!important}.analogue-2-bg-a7{background-color:#09b3ad}.analogue-2-color-a7{color:#09b3ad}.analogue-2-border-color-a7,.analogue-2-border-color-a7.border{border-color:#09b3ad!important}.analogue-2-bg-a8{background-color:#089994}.analogue-2-color-a8{color:#089994}.analogue-2-border-color-a8,.analogue-2-border-color-a8.border{border-color:#089994!important}.analogue-2-bg-a9{background-color:#06807b}.analogue-2-color-a9{color:#06807b}.analogue-2-border-color-a9,.analogue-2-border-color-a9.border{border-color:#06807b!important}.analogue-2-bg-a10{background-color:#056663}.analogue-2-color-a10{color:#056663}.analogue-2-border-color-a10,.analogue-2-border-color-a10.border{border-color:#056663!important}.analogue-2-bg-a11{background-color:#044d4a}.analogue-2-color-a11{color:#044d4a}.analogue-2-border-color-a11,.analogue-2-border-color-a11.border{border-color:#044d4a!important}.analogue-2-bg-a12{background-color:#033331}.analogue-2-color-a12{color:#033331}.analogue-2-border-color-a12,.analogue-2-border-color-a12.border{border-color:#033331!important}.complementary-1-bg{background-color:#f73e5a}.complementary-1-color{color:#f90}.complementary-1-border-color-,.complementary-1-border-color-.border{border-color:#f73e5a!important}.complementary-1-bg-a1{background-color:#fffcfd}.complementary-1-color-a1{color:#fffcfd}.complementary-1-border-color-a1,.complementary-1-border-color-a1.border{border-color:#fffcfd!important}.complementary-1-bg-a2{background-color:#f5d0d6}.complementary-1-color-a2{color:#f5d0d6}.complementary-1-border-color-a2,.complementary-1-border-color-a2.border{border-color:#f5d0d6!important}.complementary-1-bg-a3{background-color:#eba4af}.complementary-1-color-a3{color:#eba4af}.complementary-1-border-color-a3,.complementary-1-border-color-a3.border{border-color:#eba4af!important}.complementary-1-bg-a4{background-color:#e07b8b}.complementary-1-color-a4{color:#e07b8b}.complementary-1-border-color-a4,.complementary-1-border-color-a4.border{border-color:#e07b8b!important}.complementary-1-bg-a5{background-color:#d65669}.complementary-1-color-a5{color:#d65669}.complementary-1-border-color-a5,.complementary-1-border-color-a5.border{border-color:#d65669!important}.complementary-1-bg-a6{background-color:#cc334a}.complementary-1-color-a6{color:#cc334a}.complementary-1-border-color-a6,.complementary-1-border-color-a6.border{border-color:#cc334a!important}.complementary-1-bg-a7{background-color:#b32d41}.complementary-1-color-a7{color:#b32d41}.complementary-1-border-color-a7,.complementary-1-border-color-a7.border{border-color:#b32d41!important}.complementary-1-bg-a8{background-color:#992637}.complementary-1-color-a8{color:#992637}.complementary-1-border-color-a8,.complementary-1-border-color-a8.border{border-color:#992637!important}.complementary-1-bg-a9{background-color:#80202e}.complementary-1-color-a9{color:#80202e}.complementary-1-border-color-a9,.complementary-1-border-color-a9.border{border-color:#80202e!important}.complementary-1-bg-a10{background-color:#661a25}.complementary-1-color-a10{color:#661a25}.complementary-1-border-color-a10,.complementary-1-border-color-a10.border{border-color:#661a25!important}.complementary-1-bg-a11{background-color:#4d131c}.complementary-1-color-a11{color:#4d131c}.complementary-1-border-color-a11,.complementary-1-border-color-a11.border{border-color:#4d131c!important}.complementary-1-bg-a12{background-color:#330d12}.complementary-1-color-a12{color:#330d12}.complementary-1-border-color-a12,.complementary-1-border-color-a12.border{border-color:#330d12!important}.complementary-2-bg{background-color:#f90}.complementary-2-color{color:#f90}.complementary-2-border-color-,.complementary-2-border-color-.border{border-color:#f90!important}.complementary-2-bg-a1{background-color:#ffe6bf}.complementary-2-color-a1{color:#ffe6bf}.complementary-2-border-color-a1,.complementary-2-border-color-a1.border{border-color:#ffe6bf!important}.complementary-2-bg-a2{background-color:#f5ce93}.complementary-2-color-a2{color:#f5ce93}.complementary-2-border-color-a2,.complementary-2-border-color-a2.border{border-color:#f5ce93!important}.complementary-2-bg-a3{background-color:#ebb76a}.complementary-2-color-a3{color:#ebb76a}.complementary-2-border-color-a3,.complementary-2-border-color-a3.border{border-color:#ebb76a!important}.complementary-2-bg-a4{background-color:#e0a243}.complementary-2-color-a4{color:#e0a243}.complementary-2-border-color-a4,.complementary-2-border-color-a4.border{border-color:#e0a243!important}.complementary-2-bg-a5{background-color:#d68d20}.complementary-2-color-a5{color:#d68d20}.complementary-2-border-color-a5,.complementary-2-border-color-a5.border{border-color:#d68d20!important}.complementary-2-bg-a6{background-color:#cc7a00}.complementary-2-color-a6{color:#cc7a00}.complementary-2-border-color-a6,.complementary-2-border-color-a6.border{border-color:#cc7a00!important}.complementary-2-bg-a7{background-color:#b36b00}.complementary-2-color-a7{color:#b36b00}.complementary-2-border-color-a7,.complementary-2-border-color-a7.border{border-color:#b36b00!important}.complementary-2-bg-a8{background-color:#995c00}.complementary-2-color-a8{color:#995c00}.complementary-2-border-color-a8,.complementary-2-border-color-a8.border{border-color:#995c00!important}.complementary-2-bg-a9{background-color:#804d00}.complementary-2-color-a9{color:#804d00}.complementary-2-border-color-a9,.complementary-2-border-color-a9.border{border-color:#804d00!important}.complementary-2-bg-a10{background-color:#663d00}.complementary-2-color-a10{color:#663d00}.complementary-2-border-color-a10,.complementary-2-border-color-a10.border{border-color:#663d00!important}.complementary-2-bg-a11{background-color:#4d2e00}.complementary-2-color-a11{color:#4d2e00}.complementary-2-border-color-a11,.complementary-2-border-color-a11.border{border-color:#4d2e00!important}.complementary-2-bg-a12{background-color:#331f00}.complementary-2-color-a12{color:#331f00}.complementary-2-border-color-a12,.complementary-2-border-color-a12.border{border-color:#331f00!important}.complementary-3-bg{background-color:#00cf86}.complementary-3-color{color:#00cf86}.complementary-3-border-color-,.complementary-3-border-color-.border{border-color:#00cf86!important}.complementary-3-bg-a1{background-color:#bfffe9}.complementary-3-color-a1{color:#bfffe9}.complementary-3-border-color-a1,.complementary-3-border-color-a1.border{border-color:#bfffe9!important}.complementary-3-bg-a2{background-color:#93f5d3}.complementary-3-color-a2{color:#93f5d3}.complementary-3-border-color-a2,.complementary-3-border-color-a2.border{border-color:#93f5d3!important}.complementary-3-bg-a3{background-color:#6aebbd}.complementary-3-color-a3{color:#6aebbd}.complementary-3-border-color-a3,.complementary-3-border-color-a3.border{border-color:#6aebbd!important}.complementary-3-bg-a4{background-color:#43e0a9}.complementary-3-color-a4{color:#43e0a9}.complementary-3-border-color-a4,.complementary-3-border-color-a4.border{border-color:#43e0a9!important}.complementary-3-bg-a5{background-color:#20d696}.complementary-3-color-a5{color:#20d696}.complementary-3-border-color-a5,.complementary-3-border-color-a5.border{border-color:#20d696!important}.complementary-3-bg-a6{background-color:#00cc85}.complementary-3-color-a6{color:#00cc85}.complementary-3-border-color-a6,.complementary-3-border-color-a6.border{border-color:#00cc85!important}.complementary-3-bg-a7{background-color:#00b374}.complementary-3-color-a7{color:#00b374}.complementary-3-border-color-a7,.complementary-3-border-color-a7.border{border-color:#00b374!important}.complementary-3-bg-a8{background-color:#009963}.complementary-3-color-a8{color:#009963}.complementary-3-border-color-a8,.complementary-3-border-color-a8.border{border-color:#009963!important}.complementary-3-bg-a9{background-color:#008053}.complementary-3-color-a9{color:#008053}.complementary-3-border-color-a9,.complementary-3-border-color-a9.border{border-color:#008053!important}.complementary-3-bg-a10{background-color:#006642}.complementary-3-color-a10{color:#006642}.complementary-3-border-color-a10,.complementary-3-border-color-a10.border{border-color:#006642!important}.complementary-3-bg-a11{background-color:#004d32}.complementary-3-color-a11{color:#004d32}.complementary-3-border-color-a11,.complementary-3-border-color-a11.border{border-color:#004d32!important}.complementary-3-bg-a12{background-color:#003321}.complementary-3-color-a12{color:#003321}.complementary-3-border-color-a12,.complementary-3-border-color-a12.border{border-color:#003321!important}.analogue-1-bg{background-color:#3126ff}.analogue-1-color{color:#3126ff}.analogue-1-border-color-,.analogue-1-border-color-.border{border-color:#3126ff!important}.analogue-1-bg-b1{background-color:#3126ff}.analogue-1-color-b1{color:#3126ff}.analogue-1-border-color-b1,.analogue-1-border-color-b1.border{border-color:#3126ff!important}.analogue-1-bg-b2{background-color:#4239e6}.analogue-1-color-b2{color:#4239e6}.analogue-1-border-color-b2,.analogue-1-border-color-b2.border{border-color:#4239e6!important}.analogue-1-bg-b3{background-color:#4e47cc}.analogue-1-color-b3{color:#4e47cc}.analogue-1-border-color-b3,.analogue-1-border-color-b3.border{border-color:#4e47cc!important}.analogue-1-bg-b4{background-color:#5550b3}.analogue-1-color-b4{color:#5550b3}.analogue-1-border-color-b4,.analogue-1-border-color-b4.border{border-color:#5550b3!important}.analogue-1-bg-b5{background-color:#585499}.analogue-1-color-b5{color:#585499}.analogue-1-border-color-b5,.analogue-1-border-color-b5.border{border-color:#585499!important}.analogue-1-bg-b6{background-color:#555380}.analogue-1-color-b6{color:#555380}.analogue-1-border-color-b6,.analogue-1-border-color-b6.border{border-color:#555380!important}.analogue-1-bg-b7{background-color:#4e4d66}.analogue-1-color-b7{color:#4e4d66}.analogue-1-border-color-b7,.analogue-1-border-color-b7.border{border-color:#4e4d66!important}.analogue-1-bg-b8{background-color:#42414d}.analogue-1-color-b8{color:#42414d}.analogue-1-border-color-b8,.analogue-1-border-color-b8.border{border-color:#42414d!important}.analogue-2-bg{background-color:#0bd9d2}.analogue-2-color{color:#0bd9d2}.analogue-2-border-color-,.analogue-2-border-color-.border{border-color:#0bd9d2!important}.analogue-2-bg-b1{background-color:#0bd9d2}.analogue-2-color-b1{color:#0bd9d2}.analogue-2-border-color-b1,.analogue-2-border-color-b1.border{border-color:#0bd9d2!important}.analogue-2-bg-b2{background-color:#1dbfba}.analogue-2-color-b2{color:#1dbfba}.analogue-2-border-color-b2,.analogue-2-border-color-b2.border{border-color:#1dbfba!important}.analogue-2-bg-b3{background-color:#29a6a2}.analogue-2-color-b3{color:#29a6a2}.analogue-2-border-color-b3,.analogue-2-border-color-b3.border{border-color:#29a6a2!important}.analogue-2-bg-b4{background-color:#318c89}.analogue-2-color-b4{color:#318c89}.analogue-2-border-color-b4,.analogue-2-border-color-b4.border{border-color:#318c89!important}.analogue-2-bg-b5{background-color:#347371}.analogue-2-color-b5{color:#347371}.analogue-2-border-color-b5,.analogue-2-border-color-b5.border{border-color:#347371!important}.analogue-2-bg-b6{background-color:#315958}.analogue-2-color-b6{color:#315958}.analogue-2-border-color-b6,.analogue-2-border-color-b6.border{border-color:#315958!important}.analogue-2-bg-b7{background-color:#29403f}.analogue-2-color-b7{color:#29403f}.analogue-2-border-color-b7,.analogue-2-border-color-b7.border{border-color:#29403f!important}.analogue-2-bg-b8{background-color:#1d2626}.analogue-2-color-b8{color:#1d2626}.analogue-2-border-color-b8,.analogue-2-border-color-b8.border{border-color:#1d2626!important}.complementary-1-bg-b1{background-color:#f73e5a}.complementary-1-color-b1{color:#f73e5a}.complementary-1-border-color-b1,.complementary-1-border-color-b1.border{border-color:#f73e5a!important}.complementary-1-bg-b2{background-color:#de4e63}.complementary-1-color-b2{color:#de4e63}.complementary-1-border-color-b2,.complementary-1-border-color-b2.border{border-color:#de4e63!important}.complementary-1-bg-b3{background-color:#c45869}.complementary-1-color-b3{color:#c45869}.complementary-1-border-color-b3,.complementary-1-border-color-b3.border{border-color:#c45869!important}.complementary-1-bg-b4{background-color:#ab5e69}.complementary-1-color-b4{color:#ab5e69}.complementary-1-border-color-b4,.complementary-1-border-color-b4.border{border-color:#ab5e69!important}.complementary-1-bg-b5{background-color:#915e66}.complementary-1-color-b5{color:#915e66}.complementary-1-border-color-b5,.complementary-1-border-color-b5.border{border-color:#915e66!important}.complementary-1-bg-b6{background-color:#785a5e}.complementary-1-color-b6{color:#785a5e}.complementary-1-border-color-b6,.complementary-1-border-color-b6.border{border-color:#785a5e!important}.complementary-1-bg-b7{background-color:#5e5052}.complementary-1-color-b7{color:#5e5052}.complementary-1-border-color-b7,.complementary-1-border-color-b7.border{border-color:#5e5052!important}.complementary-1-bg-b8{background-color:#454142}.complementary-1-color-b8{color:#454142}.complementary-1-border-color-b8,.complementary-1-border-color-b8.border{border-color:#454142!important}.complementary-2-bg-b1{background-color:#f90}.complementary-2-color-b1{color:#f90}.complementary-2-border-color-b1,.complementary-2-border-color-b1.border{border-color:#f90!important}.complementary-2-bg-b2{background-color:#e69317}.complementary-2-color-b2{color:#e69317}.complementary-2-border-color-b2,.complementary-2-border-color-b2.border{border-color:#e69317!important}.complementary-2-bg-b3{background-color:#cc8b29}.complementary-2-color-b3{color:#cc8b29}.complementary-2-border-color-b3,.complementary-2-border-color-b3.border{border-color:#cc8b29!important}.complementary-2-bg-b4{background-color:#b38136}.complementary-2-color-b4{color:#b38136}.complementary-2-border-color-b4,.complementary-2-border-color-b4.border{border-color:#b38136!important}.complementary-2-bg-b5{background-color:#99743d}.complementary-2-color-b5{color:#99743d}.complementary-2-border-color-b5,.complementary-2-border-color-b5.border{border-color:#99743d!important}.complementary-2-bg-b6{background-color:#806640}.complementary-2-color-b6{color:#806640}.complementary-2-border-color-b6,.complementary-2-border-color-b6.border{border-color:#806640!important}.complementary-2-bg-b7{background-color:#66563d}.complementary-2-color-b7{color:#66563d}.complementary-2-border-color-b7,.complementary-2-border-color-b7.border{border-color:#66563d!important}.complementary-2-bg-b8{background-color:#4d4336}.complementary-2-color-b8{color:#4d4336}.complementary-2-border-color-b8,.complementary-2-border-color-b8.border{border-color:#4d4336!important}.complementary-3-bg-b1{background-color:#00cf86}.complementary-3-color-b1{color:#00cf86}.complementary-3-border-color-b1,.complementary-3-border-color-b1.border{border-color:#00cf86!important}.complementary-3-bg-b2{background-color:#12b57c}.complementary-3-color-b2{color:#12b57c}.complementary-3-border-color-b2,.complementary-3-border-color-b2.border{border-color:#12b57c!important}.complementary-3-bg-b3{background-color:#1f9c70}.complementary-3-color-b3{color:#1f9c70}.complementary-3-border-color-b3,.complementary-3-border-color-b3.border{border-color:#1f9c70!important}.complementary-3-bg-b4{background-color:#278262}.complementary-3-color-b4{color:#278262}.complementary-3-border-color-b4,.complementary-3-border-color-b4.border{border-color:#278262!important}.complementary-3-bg-b5{background-color:#2a6953}.complementary-3-color-b5{color:#2a6953}.complementary-3-border-color-b5,.complementary-3-border-color-b5.border{border-color:#2a6953!important}.complementary-3-bg-b6{background-color:#284f41}.complementary-3-color-b6{color:#284f41}.complementary-3-border-color-b6,.complementary-3-border-color-b6.border{border-color:#284f41!important}.complementary-3-bg-b7{background-color:#20362e}.complementary-3-color-b7{color:#20362e}.complementary-3-border-color-b7,.complementary-3-border-color-b7.border{border-color:#20362e!important}.complementary-3-bg-b8{background-color:#141c19}.complementary-3-color-b8{color:#141c19}.complementary-3-border-color-b8,.complementary-3-border-color-b8.border{border-color:#141c19!important}.neutral-1-bg{background-color:#17324d}.neutral-1-color{color:#17324d}.neutral-1-border-color-,.neutral-1-border-color-.border{border-color:#17324d!important}.neutral-1-bg-a1{background-color:#ebeced}.neutral-1-color-a1{color:#ebeced}.neutral-1-border-color-a1,.neutral-1-border-color-a1.border{border-color:#ebeced!important}.neutral-1-bg-a2{background-color:#d9dadb}.neutral-1-color-a2{color:#d9dadb}.neutral-1-border-color-a2,.neutral-1-border-color-a2.border{border-color:#d9dadb!important}.neutral-1-bg-a3{background-color:#c5c7c9}.neutral-1-color-a3{color:#c5c7c9}.neutral-1-border-color-a3,.neutral-1-border-color-a3.border{border-color:#c5c7c9!important}.neutral-1-bg-a4{background-color:#adb2b8}.neutral-1-color-a4{color:#adb2b8}.neutral-1-border-color-a4,.neutral-1-border-color-a4.border{border-color:#adb2b8!important}.neutral-1-bg-a5{background-color:#959da6}.neutral-1-color-a5{color:#959da6}.neutral-1-border-color-a5,.neutral-1-border-color-a5.border{border-color:#959da6!important}.neutral-1-bg-a6{background-color:#768594}.neutral-1-color-a6{color:#768594}.neutral-1-border-color-a6,.neutral-1-border-color-a6.border{border-color:#768594!important}.neutral-1-bg-a7{background-color:#5b6f82}.neutral-1-color-a7{color:#5b6f82}.neutral-1-border-color-a7,.neutral-1-border-color-a7.border{border-color:#5b6f82!important}.neutral-1-bg-a8{background-color:#435a70}.neutral-1-color-a8{color:#435a70}.neutral-1-border-color-a8,.neutral-1-border-color-a8.border{border-color:#435a70!important}.neutral-1-bg-a9{background-color:#2f475e}.neutral-1-color-a9{color:#2f475e}.neutral-1-border-color-a9,.neutral-1-border-color-a9.border{border-color:#2f475e!important}.neutral-1-bg-a10{background-color:#17324d}.neutral-1-color-a10{color:#17324d}.neutral-1-border-color-a10,.neutral-1-border-color-a10.border{border-color:#17324d!important}.neutral-2-bg{background-color:#e6ecf2}.neutral-2-color{color:#e6ecf2}.neutral-2-border-color-{border-color:#e6ecf2}.neutral-2-bg-b1{background-color:#e6ecf2}.neutral-2-color-b1{color:#e6ecf2}.neutral-2-border-color-b1,.neutral-2-border-color-b1.border{border-color:#e6ecf2!important}.neutral-2-bg-b2{background-color:#c2c7cc}.neutral-2-color-b2{color:#c2c7cc}.neutral-2-border-color-b2,.neutral-2-border-color-b2.border{border-color:#c2c7cc!important}.neutral-2-bg-b3{background-color:#9da2a6}.neutral-2-color-b3{color:#9da2a6}.neutral-2-border-color-b3,.neutral-2-border-color-b3.border{border-color:#9da2a6!important}.neutral-2-bg-b4{background-color:#797c80}.neutral-2-color-b4{color:#797c80}.neutral-2-border-color-b4,.neutral-2-border-color-b4.border{border-color:#797c80!important}.neutral-2-bg-b5{background-color:#565759}.neutral-2-color-b5{color:#565759}.neutral-2-border-color-b5,.neutral-2-border-color-b5.border{border-color:#565759!important}.neutral-2-bg-b6{background-color:#2f3133}.neutral-2-color-b6{color:#2f3133}.neutral-2-border-color-b6,.neutral-2-border-color-b6.border{border-color:#2f3133!important}.neutral-2-bg-b7{background-color:#0c0c0d}.neutral-2-color-b7{color:#0c0c0d}.neutral-2-border-color-b7,.neutral-2-border-color-b7.border{border-color:#0c0c0d!important}.neutral-2-bg-a1{background-color:#e6ecf2}.neutral-2-color-a1{color:#e6ecf2}.neutral-2-border-color-a1,.neutral-2-border-color-a1.border{border-color:#e6ecf2!important}.neutral-2-bg-a2{background-color:#bcc4cc}.neutral-2-color-a2{color:#bcc4cc}.neutral-2-border-color-a2,.neutral-2-border-color-a2.border{border-color:#bcc4cc!important}.neutral-2-bg-a3{background-color:#9aa0a6}.neutral-2-color-a3{color:#9aa0a6}.neutral-2-border-color-a3,.neutral-2-border-color-a3.border{border-color:#9aa0a6!important}.neutral-2-bg-a4{background-color:#777b80}.neutral-2-color-a4{color:#777b80}.neutral-2-border-color-a4,.neutral-2-border-color-a4.border{border-color:#777b80!important}.neutral-2-bg-a5{background-color:#535659}.neutral-2-color-a5{color:#535659}.neutral-2-border-color-a5,.neutral-2-border-color-a5.border{border-color:#535659!important}.neutral-2-bg-a6{background-color:#2f3133}.neutral-2-color-a6{color:#2f3133}.neutral-2-border-color-a6,.neutral-2-border-color-a6.border{border-color:#2f3133!important}.neutral-2-bg-a7{background-color:#17181a}.neutral-2-color-a7{color:#17181a}.neutral-2-border-color-a7,.neutral-2-border-color-a7.border{border-color:#17181a!important}.lightgrey-bg-a1{background-color:#e8f2fc}.lightgrey-color-a1{color:#e8f2fc}.lightgrey-border-color-a1,.lightgrey-border-color-a1.border{border-color:#e8f2fc!important}.lightgrey-bg-a2{background-color:#edf5fc}.lightgrey-color-a2{color:#edf5fc}.lightgrey-border-color-a2,.lightgrey-border-color-a2.border{border-color:#edf5fc!important}.lightgrey-bg-a3{background-color:#f2f7fc}.lightgrey-color-a3{color:#f2f7fc}.lightgrey-border-color-a3,.lightgrey-border-color-a3.border{border-color:#f2f7fc!important}.lightgrey-bg-a4{background-color:#f5f9fc}.lightgrey-color-a4{color:#f5f9fc}.lightgrey-border-color-a4,.lightgrey-border-color-a4.border{border-color:#f5f9fc!important}.lightgrey-bg-b1{background-color:#e6f0fa}.lightgrey-color-b1{color:#e6f0fa}.lightgrey-border-color-b1,.lightgrey-border-color-b1.border{border-color:#e6f0fa!important}.lightgrey-bg-b2{background-color:#ebf2fa}.lightgrey-color-b2{color:#ebf2fa}.lightgrey-border-color-b2,.lightgrey-border-color-b2.border{border-color:#ebf2fa!important}.lightgrey-bg-b3{background-color:#edf4fa}.lightgrey-color-b3{color:#edf4fa}.lightgrey-border-color-b3,.lightgrey-border-color-b3.border{border-color:#edf4fa!important}.lightgrey-bg-b4{background-color:#f2f6fa}.lightgrey-color-b4{color:#f2f6fa}.lightgrey-border-color-b4,.lightgrey-border-color-b4.border{border-color:#f2f6fa!important}.lightgrey-bg-c1{background-color:#f7f9fa}.lightgrey-color-c1{color:#f7f9fa}.lightgrey-border-color-c1,.lightgrey-border-color-c1.border{border-color:#f7f9fa!important}.lightgrey-bg-c2{background-color:#f5f6f7}.lightgrey-color-c2{color:#f5f6f7}.lightgrey-border-color-c2,.lightgrey-border-color-c2.border{border-color:#f5f6f7!important}:root{--blue:#0073e6;--indigo:#554dff;--purple:#9e99ff;--pink:#ffb3bf;--red:#f73e5a;--orange:#f90;--yellow:#ffda73;--green:#00cc85;--teal:#0bd9d2;--cyan:#00fff7;--white:#fff;--gray:#656566;--gray-dark:#323333;--italia:#06c;--gray-secondary:#5c6f82;--gray-tertiary:#5a768a;--gray-quaternary:#fcfdff;--primary:#0073e6;--secondary:#5c6f82;--success:#00cc85;--info:#979899;--warning:#f90;--danger:#f73e5a;--light:#e9e6f2;--dark:#17324d;--100:#e3e4e6;--200:#cacacc;--300:#b1b1b3;--400:#979899;--500:#7e7f80;--600:#656566;--700:#4c4c4d;--800:#323333;--900:#19191a;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Titillium Web",Geneva,Tahoma,sans-serif;--font-family-monospace:"Roboto Mono",monospace}@media print{*,:after,:before{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #7e7f80;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #b1b1b3!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#d6dce3}.table .thead-dark th{color:inherit;border-color:#d6dce3}}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Titillium Web,Geneva,Tahoma,sans-serif;font-size:16px;font-size:1rem;font-weight:300;line-height:1.5;color:#19191a;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:8px}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0073e6;text-decoration:none;background-color:transparent}a:hover{color:#004d99;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:Roboto Mono,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:1em;padding-bottom:1em;color:#5a768a;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:24px;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:8px;font-weight:700;line-height:1.2}.h1,h1{font-size:40px;font-size:2.5rem}.h2,h2{font-size:32px;font-size:2rem}.h3,h3{font-size:28px;font-size:1.75rem}.h4,h4{font-size:24px;font-size:1.5rem}.h5,h5{font-size:20px;font-size:1.25rem}.h6,h6{font-size:16px;font-size:1rem}.lead{font-size:20px;font-size:1.25rem;font-weight:300}.display-1{font-size:56px;font-size:3.5rem}.display-1,.display-2{font-weight:700;line-height:1.2}.display-2{font-size:40px;font-size:2.5rem}.display-3{font-size:24px;font-size:1.5rem}.display-3,.display-4{font-weight:700;line-height:1.2}.display-4{font-size:20px;font-size:1.25rem}hr{margin-top:16px;margin-bottom:16px;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:12.432px;font-size:.777rem}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:16px;font-size:20px;font-size:1.25rem}.blockquote-footer{display:block;font-size:12.432px;font-size:.777rem}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #b1b1b3;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.figure{display:inline-block}.figure-img{margin-bottom:8px;line-height:1}.figure-caption{font-size:90%;color:#656566}code{font-size:87.5%;color:#17324d;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#19191a;border-radius:2px;-webkit-box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25);box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;font-size:87.5%;color:#19191a}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:6px;padding-left:6px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:6px;padding-left:6px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-6px;margin-left:-6px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:6px;padding-left:6px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:16px;color:#19191a}.table td,.table th{padding:1em;vertical-align:top;border-top:1px solid #d6dce3}.table thead th{vertical-align:bottom;border-bottom:2px solid #d6dce3}.table tbody+tbody{border-top:2px solid #d6dce3}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #d6dce3}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:#f6f7f9}.table-hover tbody tr:hover{color:#19191a;background-color:#e5f1fa}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8d8f8}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7ab6f2}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a1cbf6}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d1d7dc}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#aab4be}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c3cad1}.table-success,.table-success>td,.table-success>th{background-color:#b8f1dd}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#7ae4c0}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a3edd3}.table-info,.table-info>td,.table-info>th{background-color:#e2e2e2}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#c9c9ca}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#d5d5d5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffe2b8}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffca7a}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffd89f}.table-danger,.table-danger>td,.table-danger>th{background-color:#fdc9d1}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#fb9ba9}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#fcb0bc}.table-light,.table-light>td,.table-light>th{background-color:#f9f8fb}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#f4f2f8}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ebe8f2}.table-dark,.table-dark>td,.table-dark>th{background-color:#bec6cd}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#8694a2}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b0b9c2}.table-100,.table-100>td,.table-100>th{background-color:#f7f7f8}.table-100 tbody+tbody,.table-100 td,.table-100 th,.table-100 thead th{border-color:#f0f1f2}.table-hover .table-100:hover,.table-hover .table-100:hover>td,.table-hover .table-100:hover>th{background-color:#e9e9ec}.table-200,.table-200>td,.table-200>th{background-color:#f0f0f1}.table-200 tbody+tbody,.table-200 td,.table-200 th,.table-200 thead th{border-color:#e3e3e4}.table-hover .table-200:hover,.table-hover .table-200:hover>td,.table-hover .table-200:hover>th{background-color:#e3e3e5}.table-300,.table-300>td,.table-300>th{background-color:#e9e9ea}.table-300 tbody+tbody,.table-300 td,.table-300 th,.table-300 thead th{border-color:#d6d6d7}.table-hover .table-300:hover,.table-hover .table-300:hover>td,.table-hover .table-300:hover>th{background-color:#dcdcde}.table-400,.table-400>td,.table-400>th{background-color:#e2e2e2}.table-400 tbody+tbody,.table-400 td,.table-400 th,.table-400 thead th{border-color:#c9c9ca}.table-hover .table-400:hover,.table-hover .table-400:hover>td,.table-hover .table-400:hover>th{background-color:#d5d5d5}.table-500,.table-500>td,.table-500>th{background-color:#dbdbdb}.table-500 tbody+tbody,.table-500 td,.table-500 th,.table-500 thead th{border-color:#bcbcbd}.table-hover .table-500:hover,.table-hover .table-500:hover>td,.table-hover .table-500:hover>th{background-color:#cecece}.table-600,.table-600>td,.table-600>th{background-color:#d4d4d4}.table-600 tbody+tbody,.table-600 td,.table-600 th,.table-600 thead th{border-color:#afafaf}.table-hover .table-600:hover,.table-hover .table-600:hover>td,.table-hover .table-600:hover>th{background-color:#c7c7c7}.table-700,.table-700>td,.table-700>th{background-color:#cdcdcd}.table-700 tbody+tbody,.table-700 td,.table-700 th,.table-700 thead th{border-color:#a2a2a2}.table-hover .table-700:hover,.table-hover .table-700:hover>td,.table-hover .table-700:hover>th{background-color:silver}.table-800,.table-800>td,.table-800>th{background-color:#c6c6c6}.table-800 tbody+tbody,.table-800 td,.table-800 th,.table-800 thead th{border-color:#949595}.table-hover .table-800:hover,.table-hover .table-800:hover>td,.table-hover .table-800:hover>th{background-color:#b9b9b9}.table-900,.table-900>td,.table-900>th{background-color:#bfbfbf}.table-900 tbody+tbody,.table-900 td,.table-900 th,.table-900 thead th{border-color:#878788}.table-hover .table-900:hover,.table-hover .table-900:hover>td,.table-hover .table-900:hover>th{background-color:#b2b2b2}.table-active,.table-active>td,.table-active>th{background-color:#e5f1fa}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#d0e5f6}.table .thead-dark th{color:#fff;background-color:#323333;border-color:#464646}.table .thead-light th{color:#4c4c4d;background-color:#cacacc;border-color:#d6dce3}.table-dark{color:#fff;background-color:#323333}.table-dark td,.table-dark th,.table-dark thead th{border-color:#464646}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:16px;font-size:1rem;font-weight:300;line-height:1.5;color:#4c4c4d;background-color:#fff;background-clip:padding-box;border:1px solid #979899;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#4c4c4d;background-color:#fff;border-color:#5c6f82;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.25);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.25)}.form-control::-webkit-input-placeholder{color:#656566;opacity:1}.form-control::-moz-placeholder{color:#656566;opacity:1}.form-control::-ms-input-placeholder{color:#656566;opacity:1}.form-control::placeholder{color:#656566;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#cacacc;opacity:1}select.form-control:focus::-ms-value{color:#4c4c4d;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:20px;font-size:1.25rem;line-height:1.556}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:14px;font-size:.875rem;line-height:1.428}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#19191a;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.428em + .5rem + 2px);padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.428;border-radius:2px}.form-control-lg{height:calc(1.556em + 1rem + 2px);padding:.5rem 1rem;font-size:20px;font-size:1.25rem;line-height:1.556;border-radius:8px}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#5a768a}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#00cc85}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:1rem;margin-top:.1rem;font-size:14px;font-size:.875rem;line-height:1.5;color:#19191a;background-color:#00cc85;border-radius:4px}.form-control.is-valid,.was-validated .form-control:valid{border-color:#00cc85;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2300cc85' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#00cc85;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23323333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2300cc85' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#00cc85}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#00cc85}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#00cc85}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#00ffa6;background-color:#00ffa6}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#00cc85}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#f73e5a}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:1rem;margin-top:.1rem;font-size:14px;font-size:.875rem;line-height:1.5;color:#19191a;background-color:#f73e5a;border-radius:4px}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#f73e5a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f73e5a' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#f73e5a;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23323333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f73e5a' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#f73e5a}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#f73e5a}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#f73e5a}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#f96f84;background-color:#f96f84}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#f73e5a}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center;margin-bottom:0}.form-inline .form-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:600;color:#19191a;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0 solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:4px;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:#19191a;text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25);box-shadow:0 0 0 .2rem rgba(0,115,230,.25)}.btn.disabled,.btn:disabled{opacity:.65;-webkit-box-shadow:none;box-shadow:none}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:not(:disabled):not(.disabled).active:focus,.btn:not(:disabled):not(.disabled):active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25),inset 0 3px 5px rgba(0,0,0,.125);box-shadow:0 0 0 .2rem rgba(0,115,230,.25),inset 0 3px 5px rgba(0,0,0,.125)}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#0073e6;border-color:#0073e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-primary:hover{color:#fff;background-color:#0060bf;border-color:#0059b3}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0073e6;border-color:#0073e6}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0059b3;border-color:#0053a6}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.btn-secondary{color:#fff;background-color:#5c6f82;border-color:#5c6f82;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-secondary:hover{color:#fff;background-color:#4c5c6c;border-color:#475664}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(92,111,130,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#5c6f82;border-color:#5c6f82}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#475664;border-color:#424f5d}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5)}.btn-success{color:#19191a;background-color:#00cc85;border-color:#00cc85;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-success:hover{color:#fff;background-color:#00a66c;border-color:#009963}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,204,133,.5)}.btn-success.disabled,.btn-success:disabled{color:#19191a;background-color:#00cc85;border-color:#00cc85}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#009963;border-color:#008c5b}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5)}.btn-info{color:#19191a;background-color:#979899;border-color:#979899;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-info:hover{color:#19191a;background-color:#848586;border-color:#7e7e80}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5)}.btn-info.disabled,.btn-info:disabled{color:#19191a;background-color:#979899;border-color:#979899}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#19191a;background-color:#7e7e80;border-color:#777879}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-warning{color:#19191a;background-color:#f90;border-color:#f90;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-warning:hover{color:#19191a;background-color:#d98200;border-color:#cc7a00}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,153,0,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#19191a;background-color:#f90;border-color:#f90}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#19191a;background-color:#cc7a00;border-color:#bf7300}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5)}.btn-danger{color:#19191a;background-color:#f73e5a;border-color:#f73e5a;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger:hover{color:#fff;background-color:#f6193a;border-color:#f50d30}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(247,62,90,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#19191a;background-color:#f73e5a;border-color:#f73e5a}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#f50d30;border-color:#ec092b}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5)}.btn-light{color:#19191a;background-color:#e9e6f2;border-color:#e9e6f2;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-light:hover{color:#19191a;background-color:#d3cde5;border-color:#ccc4e1}.btn-light.focus,.btn-light:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(233,230,242,.5)}.btn-light.disabled,.btn-light:disabled{color:#19191a;background-color:#e9e6f2;border-color:#e9e6f2}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#19191a;background-color:#ccc4e1;border-color:#c4bcdd}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5)}.btn-dark{color:#fff;background-color:#17324d;border-color:#17324d;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-dark:hover{color:#fff;background-color:#0e1f2f;border-color:#0b1825}.btn-dark.focus,.btn-dark:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(23,50,77,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#17324d;border-color:#17324d}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#0b1825;border-color:#08121b}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5)}.btn-100{color:#19191a;background-color:#e3e4e6;border-color:#e3e4e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-100:hover{color:#19191a;background-color:#cfd0d3;border-color:#c9cacd}.btn-100.focus,.btn-100:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(227,228,230,.5)}.btn-100.disabled,.btn-100:disabled{color:#19191a;background-color:#e3e4e6;border-color:#e3e4e6}.btn-100:not(:disabled):not(.disabled).active,.btn-100:not(:disabled):not(.disabled):active,.show>.btn-100.dropdown-toggle{color:#19191a;background-color:#c9cacd;border-color:#c2c3c7}.btn-100:not(:disabled):not(.disabled).active:focus,.btn-100:not(:disabled):not(.disabled):active:focus,.show>.btn-100.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5)}.btn-200{color:#19191a;background-color:#cacacc;border-color:#cacacc;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-200:hover{color:#19191a;background-color:#b6b7b9;border-color:#b0b1b3}.btn-200.focus,.btn-200:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(202,202,204,.5)}.btn-200.disabled,.btn-200:disabled{color:#19191a;background-color:#cacacc;border-color:#cacacc}.btn-200:not(:disabled):not(.disabled).active,.btn-200:not(:disabled):not(.disabled):active,.show>.btn-200.dropdown-toggle{color:#19191a;background-color:#b0b1b3;border-color:#a9aaad}.btn-200:not(:disabled):not(.disabled).active:focus,.btn-200:not(:disabled):not(.disabled):active:focus,.show>.btn-200.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5)}.btn-300{color:#19191a;background-color:#b1b1b3;border-color:#b1b1b3;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-300:hover{color:#19191a;background-color:#9d9ea0;border-color:#979899}.btn-300.focus,.btn-300:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(177,177,179,.5)}.btn-300.disabled,.btn-300:disabled{color:#19191a;background-color:#b1b1b3;border-color:#b1b1b3}.btn-300:not(:disabled):not(.disabled).active,.btn-300:not(:disabled):not(.disabled):active,.show>.btn-300.dropdown-toggle{color:#19191a;background-color:#979899;border-color:#909193}.btn-300:not(:disabled):not(.disabled).active:focus,.btn-300:not(:disabled):not(.disabled):active:focus,.show>.btn-300.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5)}.btn-400{color:#19191a;background-color:#979899;border-color:#979899;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-400:hover{color:#19191a;background-color:#848586;border-color:#7e7e80}.btn-400.focus,.btn-400:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5)}.btn-400.disabled,.btn-400:disabled{color:#19191a;background-color:#979899;border-color:#979899}.btn-400:not(:disabled):not(.disabled).active,.btn-400:not(:disabled):not(.disabled):active,.show>.btn-400.dropdown-toggle{color:#19191a;background-color:#7e7e80;border-color:#777879}.btn-400:not(:disabled):not(.disabled).active:focus,.btn-400:not(:disabled):not(.disabled):active:focus,.show>.btn-400.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-500{color:#19191a;background-color:#7e7f80;border-color:#7e7f80;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-500:hover{color:#fff;background-color:#6b6b6c;border-color:#656566}.btn-500.focus,.btn-500:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(126,127,128,.5)}.btn-500.disabled,.btn-500:disabled{color:#19191a;background-color:#7e7f80;border-color:#7e7f80}.btn-500:not(:disabled):not(.disabled).active,.btn-500:not(:disabled):not(.disabled):active,.show>.btn-500.dropdown-toggle{color:#fff;background-color:#656566;border-color:#5f5f5f}.btn-500:not(:disabled):not(.disabled).active:focus,.btn-500:not(:disabled):not(.disabled):active:focus,.show>.btn-500.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5)}.btn-600{color:#fff;background-color:#656566;border-color:#656566;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-600:hover{color:#fff;background-color:#525253;border-color:#4c4c4c}.btn-600.focus,.btn-600:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(101,101,102,.5)}.btn-600.disabled,.btn-600:disabled{color:#fff;background-color:#656566;border-color:#656566}.btn-600:not(:disabled):not(.disabled).active,.btn-600:not(:disabled):not(.disabled):active,.show>.btn-600.dropdown-toggle{color:#fff;background-color:#4c4c4c;border-color:#454546}.btn-600:not(:disabled):not(.disabled).active:focus,.btn-600:not(:disabled):not(.disabled):active:focus,.show>.btn-600.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5)}.btn-700{color:#fff;background-color:#4c4c4d;border-color:#4c4c4d;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-700:hover{color:#fff;background-color:#393939;border-color:#323233}.btn-700.focus,.btn-700:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(76,76,77,.5)}.btn-700.disabled,.btn-700:disabled{color:#fff;background-color:#4c4c4d;border-color:#4c4c4d}.btn-700:not(:disabled):not(.disabled).active,.btn-700:not(:disabled):not(.disabled):active,.show>.btn-700.dropdown-toggle{color:#fff;background-color:#323233;border-color:#2c2c2c}.btn-700:not(:disabled):not(.disabled).active:focus,.btn-700:not(:disabled):not(.disabled):active:focus,.show>.btn-700.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5)}.btn-800{color:#fff;background-color:#323333;border-color:#323333;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-800:hover{color:#fff;background-color:#1f2020;border-color:#191919}.btn-800.focus,.btn-800:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(50,51,51,.5)}.btn-800.disabled,.btn-800:disabled{color:#fff;background-color:#323333;border-color:#323333}.btn-800:not(:disabled):not(.disabled).active,.btn-800:not(:disabled):not(.disabled):active,.show>.btn-800.dropdown-toggle{color:#fff;background-color:#191919;border-color:#131313}.btn-800:not(:disabled):not(.disabled).active:focus,.btn-800:not(:disabled):not(.disabled):active:focus,.show>.btn-800.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5)}.btn-900{color:#fff;background-color:#19191a;border-color:#19191a;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-900:hover{color:#fff;background-color:#060606;border-color:#000}.btn-900.focus,.btn-900:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(25,25,26,.5)}.btn-900.disabled,.btn-900:disabled{color:#fff;background-color:#19191a;border-color:#19191a}.btn-900:not(:disabled):not(.disabled).active,.btn-900:not(:disabled):not(.disabled):active,.show>.btn-900.dropdown-toggle{color:#fff;background-color:#000;border-color:#000}.btn-900:not(:disabled):not(.disabled).active:focus,.btn-900:not(:disabled):not(.disabled):active:focus,.show>.btn-900.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5)}.btn-outline-primary{color:#0073e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #0073e6;box-shadow:inset 0 0 0 1px #0073e6}.btn-outline-primary:hover{color:#0959aa;-webkit-box-shadow:inset 0 0 0 1px #0959aa;box-shadow:inset 0 0 0 1px #0959aa}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 1px #0073e6,0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 0 0 1px #0073e6,0 0 0 .2rem rgba(0,115,230,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0073e6;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#0073e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #0073e6;box-shadow:inset 0 0 0 1px #0073e6}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.btn-outline-secondary{color:#5c6f82;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #5c6f82;box-shadow:inset 0 0 0 1px #5c6f82}.btn-outline-secondary:hover{color:#50565c;-webkit-box-shadow:inset 0 0 0 1px #50565c;box-shadow:inset 0 0 0 1px #50565c}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:inset 0 0 0 1px #5c6f82,0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 0 0 1px #5c6f82,0 0 0 .2rem rgba(92,111,130,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#5c6f82;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#5c6f82;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #5c6f82;box-shadow:inset 0 0 0 1px #5c6f82}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5)}.btn-outline-success{color:#00cc85;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #00cc85;box-shadow:inset 0 0 0 1px #00cc85}.btn-outline-success:hover{color:#089161;-webkit-box-shadow:inset 0 0 0 1px #089161;box-shadow:inset 0 0 0 1px #089161}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:inset 0 0 0 1px #00cc85,0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 0 0 1px #00cc85,0 0 0 .2rem rgba(0,204,133,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00cc85;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#00cc85;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #00cc85;box-shadow:inset 0 0 0 1px #00cc85}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5)}.btn-outline-info{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-info:hover{color:#7f7f7f;-webkit-box-shadow:inset 0 0 0 1px #7f7f7f;box-shadow:inset 0 0 0 1px #7f7f7f}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#979899;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-warning{color:#f90;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f90;box-shadow:inset 0 0 0 1px #f90}.btn-outline-warning:hover{color:#c2780a;-webkit-box-shadow:inset 0 0 0 1px #c2780a;box-shadow:inset 0 0 0 1px #c2780a}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:inset 0 0 0 1px #f90,0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 0 0 1px #f90,0 0 0 .2rem rgba(255,153,0,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f90;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#f90;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f90;box-shadow:inset 0 0 0 1px #f90}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5)}.btn-outline-danger{color:#f73e5a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f73e5a;box-shadow:inset 0 0 0 1px #f73e5a}.btn-outline-danger:hover{color:#e91938;-webkit-box-shadow:inset 0 0 0 1px #e91938;box-shadow:inset 0 0 0 1px #e91938}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:inset 0 0 0 1px #f73e5a,0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 0 0 1px #f73e5a,0 0 0 .2rem rgba(247,62,90,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#f73e5a;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#f73e5a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f73e5a;box-shadow:inset 0 0 0 1px #f73e5a}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5)}.btn-outline-light{color:#e9e6f2;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e9e6f2;box-shadow:inset 0 0 0 1px #e9e6f2}.btn-outline-light:hover{color:#cec9dd;-webkit-box-shadow:inset 0 0 0 1px #cec9dd;box-shadow:inset 0 0 0 1px #cec9dd}.btn-outline-light.focus,.btn-outline-light:focus{-webkit-box-shadow:inset 0 0 0 1px #e9e6f2,0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 0 0 1px #e9e6f2,0 0 0 .2rem rgba(233,230,242,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#e9e6f2;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#e9e6f2;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e9e6f2;box-shadow:inset 0 0 0 1px #e9e6f2}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5)}.btn-outline-dark{color:#17324d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #17324d;box-shadow:inset 0 0 0 1px #17324d}.btn-outline-dark:hover{color:#0e1823;-webkit-box-shadow:inset 0 0 0 1px #0e1823;box-shadow:inset 0 0 0 1px #0e1823}.btn-outline-dark.focus,.btn-outline-dark:focus{-webkit-box-shadow:inset 0 0 0 1px #17324d,0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 0 0 1px #17324d,0 0 0 .2rem rgba(23,50,77,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#17324d;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#17324d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #17324d;box-shadow:inset 0 0 0 1px #17324d}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5)}.btn-outline-100{color:#e3e4e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e3e4e6;box-shadow:inset 0 0 0 1px #e3e4e6}.btn-outline-100:hover{color:#cbcbcb;-webkit-box-shadow:inset 0 0 0 1px #cbcbcb;box-shadow:inset 0 0 0 1px #cbcbcb}.btn-outline-100.focus,.btn-outline-100:focus{-webkit-box-shadow:inset 0 0 0 1px #e3e4e6,0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 0 0 1px #e3e4e6,0 0 0 .2rem rgba(227,228,230,.5)}.btn-outline-100.disabled,.btn-outline-100:disabled{color:#e3e4e6;background-color:transparent}.btn-outline-100:not(:disabled):not(.disabled).active,.btn-outline-100:not(:disabled):not(.disabled):active,.show>.btn-outline-100.dropdown-toggle{color:#e3e4e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e3e4e6;box-shadow:inset 0 0 0 1px #e3e4e6}.btn-outline-100:not(:disabled):not(.disabled).active:focus,.btn-outline-100:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-100.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5)}.btn-outline-200{color:#cacacc;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #cacacc;box-shadow:inset 0 0 0 1px #cacacc}.btn-outline-200:hover{color:#b1b1b1;-webkit-box-shadow:inset 0 0 0 1px #b1b1b1;box-shadow:inset 0 0 0 1px #b1b1b1}.btn-outline-200.focus,.btn-outline-200:focus{-webkit-box-shadow:inset 0 0 0 1px #cacacc,0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 0 0 1px #cacacc,0 0 0 .2rem rgba(202,202,204,.5)}.btn-outline-200.disabled,.btn-outline-200:disabled{color:#cacacc;background-color:transparent}.btn-outline-200:not(:disabled):not(.disabled).active,.btn-outline-200:not(:disabled):not(.disabled):active,.show>.btn-outline-200.dropdown-toggle{color:#cacacc;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #cacacc;box-shadow:inset 0 0 0 1px #cacacc}.btn-outline-200:not(:disabled):not(.disabled).active:focus,.btn-outline-200:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-200.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5)}.btn-outline-300{color:#b1b1b3;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #b1b1b3;box-shadow:inset 0 0 0 1px #b1b1b3}.btn-outline-300:hover{color:#989898;-webkit-box-shadow:inset 0 0 0 1px #989898;box-shadow:inset 0 0 0 1px #989898}.btn-outline-300.focus,.btn-outline-300:focus{-webkit-box-shadow:inset 0 0 0 1px #b1b1b3,0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 0 0 1px #b1b1b3,0 0 0 .2rem rgba(177,177,179,.5)}.btn-outline-300.disabled,.btn-outline-300:disabled{color:#b1b1b3;background-color:transparent}.btn-outline-300:not(:disabled):not(.disabled).active,.btn-outline-300:not(:disabled):not(.disabled):active,.show>.btn-outline-300.dropdown-toggle{color:#b1b1b3;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #b1b1b3;box-shadow:inset 0 0 0 1px #b1b1b3}.btn-outline-300:not(:disabled):not(.disabled).active:focus,.btn-outline-300:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-300.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5)}.btn-outline-400{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-400:hover{color:#7f7f7f;-webkit-box-shadow:inset 0 0 0 1px #7f7f7f;box-shadow:inset 0 0 0 1px #7f7f7f}.btn-outline-400.focus,.btn-outline-400:focus{-webkit-box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-400.disabled,.btn-outline-400:disabled{color:#979899;background-color:transparent}.btn-outline-400:not(:disabled):not(.disabled).active,.btn-outline-400:not(:disabled):not(.disabled):active,.show>.btn-outline-400.dropdown-toggle{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-400:not(:disabled):not(.disabled).active:focus,.btn-outline-400:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-400.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-500{color:#7e7f80;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #7e7f80;box-shadow:inset 0 0 0 1px #7e7f80}.btn-outline-500:hover{color:#656565;-webkit-box-shadow:inset 0 0 0 1px #656565;box-shadow:inset 0 0 0 1px #656565}.btn-outline-500.focus,.btn-outline-500:focus{-webkit-box-shadow:inset 0 0 0 1px #7e7f80,0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 0 0 1px #7e7f80,0 0 0 .2rem rgba(126,127,128,.5)}.btn-outline-500.disabled,.btn-outline-500:disabled{color:#7e7f80;background-color:transparent}.btn-outline-500:not(:disabled):not(.disabled).active,.btn-outline-500:not(:disabled):not(.disabled):active,.show>.btn-outline-500.dropdown-toggle{color:#7e7f80;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #7e7f80;box-shadow:inset 0 0 0 1px #7e7f80}.btn-outline-500:not(:disabled):not(.disabled).active:focus,.btn-outline-500:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-500.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5)}.btn-outline-600{color:#656566;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #656566;box-shadow:inset 0 0 0 1px #656566}.btn-outline-600:hover{color:#4c4c4c;-webkit-box-shadow:inset 0 0 0 1px #4c4c4c;box-shadow:inset 0 0 0 1px #4c4c4c}.btn-outline-600.focus,.btn-outline-600:focus{-webkit-box-shadow:inset 0 0 0 1px #656566,0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 0 0 1px #656566,0 0 0 .2rem rgba(101,101,102,.5)}.btn-outline-600.disabled,.btn-outline-600:disabled{color:#656566;background-color:transparent}.btn-outline-600:not(:disabled):not(.disabled).active,.btn-outline-600:not(:disabled):not(.disabled):active,.show>.btn-outline-600.dropdown-toggle{color:#656566;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #656566;box-shadow:inset 0 0 0 1px #656566}.btn-outline-600:not(:disabled):not(.disabled).active:focus,.btn-outline-600:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-600.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5)}.btn-outline-700{color:#4c4c4d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #4c4c4d;box-shadow:inset 0 0 0 1px #4c4c4d}.btn-outline-700:hover{color:#333;-webkit-box-shadow:inset 0 0 0 1px #333;box-shadow:inset 0 0 0 1px #333}.btn-outline-700.focus,.btn-outline-700:focus{-webkit-box-shadow:inset 0 0 0 1px #4c4c4d,0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 0 0 1px #4c4c4d,0 0 0 .2rem rgba(76,76,77,.5)}.btn-outline-700.disabled,.btn-outline-700:disabled{color:#4c4c4d;background-color:transparent}.btn-outline-700:not(:disabled):not(.disabled).active,.btn-outline-700:not(:disabled):not(.disabled):active,.show>.btn-outline-700.dropdown-toggle{color:#4c4c4d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #4c4c4d;box-shadow:inset 0 0 0 1px #4c4c4d}.btn-outline-700:not(:disabled):not(.disabled).active:focus,.btn-outline-700:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-700.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5)}.btn-outline-800{color:#323333;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #323333;box-shadow:inset 0 0 0 1px #323333}.btn-outline-800:hover{color:#191919;-webkit-box-shadow:inset 0 0 0 1px #191919;box-shadow:inset 0 0 0 1px #191919}.btn-outline-800.focus,.btn-outline-800:focus{-webkit-box-shadow:inset 0 0 0 1px #323333,0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 0 0 1px #323333,0 0 0 .2rem rgba(50,51,51,.5)}.btn-outline-800.disabled,.btn-outline-800:disabled{color:#323333;background-color:transparent}.btn-outline-800:not(:disabled):not(.disabled).active,.btn-outline-800:not(:disabled):not(.disabled):active,.show>.btn-outline-800.dropdown-toggle{color:#323333;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #323333;box-shadow:inset 0 0 0 1px #323333}.btn-outline-800:not(:disabled):not(.disabled).active:focus,.btn-outline-800:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-800.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5)}.btn-outline-900{color:#19191a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #19191a;box-shadow:inset 0 0 0 1px #19191a}.btn-outline-900:hover{color:#000;-webkit-box-shadow:inset 0 0 0 1px #000;box-shadow:inset 0 0 0 1px #000}.btn-outline-900.focus,.btn-outline-900:focus{-webkit-box-shadow:inset 0 0 0 1px #19191a,0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 0 0 1px #19191a,0 0 0 .2rem rgba(25,25,26,.5)}.btn-outline-900.disabled,.btn-outline-900:disabled{color:#19191a;background-color:transparent}.btn-outline-900:not(:disabled):not(.disabled).active,.btn-outline-900:not(:disabled):not(.disabled):active,.show>.btn-outline-900.dropdown-toggle{color:#19191a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #19191a;box-shadow:inset 0 0 0 1px #19191a}.btn-outline-900:not(:disabled):not(.disabled).active:focus,.btn-outline-900:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-900.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5)}.btn-link{font-weight:400;color:#0073e6;text-decoration:none}.btn-link:hover{color:#004d99;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#656566;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.125rem;border-radius:8px}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:2px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:16px;font-size:1rem;color:#19191a;text-align:left;list-style:none;background-clip:padding-box;border:0 solid transparent;border-radius:4px;-webkit-box-shadow:0 0 30px 5px rgba(0,0,0,.05);box-shadow:0 0 30px 5px rgba(0,0,0,.05)}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:8px 0;overflow:hidden;border-top:1px solid #cacacc}.dropdown-item{display:block;width:100%;padding:12px 24px;clear:both;font-weight:400;color:#17324d;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#17324d;text-decoration:none;background-color:#e6ecf2}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0073e6}.dropdown-item.disabled,.dropdown-item:disabled{color:#656566;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 24px;margin-bottom:0;font-size:14px;font-size:.875rem;color:#17324d;white-space:nowrap}.dropdown-item-text{display:block;padding:12px 24px;color:#17324d}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:16px;font-size:1rem;font-weight:400;line-height:1.5;color:#4c4c4d;text-align:center;white-space:nowrap;background-color:#cacacc;border:1px solid #979899;border-radius:4px}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.556em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:20px;font-size:1.25rem;line-height:1.556;border-radius:8px}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.428em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.428;border-radius:2px}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#656566;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #b1b1b3}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:4px;border-top-right-radius:4px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#cacacc #cacacc #b1b1b3}.nav-tabs .nav-link.disabled{color:#656566;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#4c4c4d;background-color:#fff;border-color:#b1b1b3 #b1b1b3 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:4px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0073e6}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:8px 16px}.navbar,.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.5rem;padding-bottom:.5rem;margin-right:16px;font-size:16px;font-size:1rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:20px;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:0}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm,.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md,.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg,.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl,.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:transparent}.navbar-dark .navbar-toggler-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkuMiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDEyIDEwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0wIDRoMTJ2MkgwVjR6bTAtNGg4djJIMFYwem0wIDhoOHYySDBWOHoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:2rem}.card-title{margin-bottom:1rem}.card-subtitle{margin-top:-.5rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:2rem}.card-header{padding:1rem 2rem;margin-bottom:0;background-color:transparent;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:-1px -1px 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:1rem 2rem;background-color:transparent;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 -1px -1px}.card-header-tabs{margin-bottom:-1rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-1rem;margin-left:-1rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:-1px}.card-img-top{width:100%;border-top-left-radius:-1px;border-top-right-radius:-1px}.card-img-bottom{width:100%;border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:6px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-6px;margin-left:-6px}.card-deck,.card-deck .card{-webkit-box-direction:normal}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;margin-right:6px;margin-bottom:0;margin-left:6px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:6px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:1rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:transparent;border-radius:0}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#656566;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#656566}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:4px}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#0073e6;background-color:#fff;border:1px solid #b1b1b3}.page-link:hover{z-index:2;color:#004d99;text-decoration:none;background-color:#cacacc;border-color:#b1b1b3}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25);box-shadow:0 0 0 .2rem rgba(0,115,230,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.page-item:last-child .page-link{border-top-right-radius:4px;border-bottom-right-radius:4px}.page-item.active .page-link{z-index:1;color:#fff;background-color:#0073e6;border-color:#0073e6}.page-item.disabled .page-link{color:#656566;pointer-events:none;cursor:auto;background-color:#fff;border-color:#b1b1b3}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:20px;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:8px;border-bottom-left-radius:8px}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:8px;border-bottom-right-radius:8px}.pagination-sm .page-link{padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:2px;border-bottom-left-radius:2px}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:2px;border-bottom-right-radius:2px}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:4px;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{-webkit-transition:none;transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#0073e6}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0059b3}a.badge-primary.focus,a.badge-primary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.5);box-shadow:0 0 0 .2rem rgba(0,115,230,.5)}.badge-secondary{color:#fff;background-color:#5c6f82}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#475664}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(92,111,130,.5);box-shadow:0 0 0 .2rem rgba(92,111,130,.5)}.badge-success{color:#19191a;background-color:#00cc85}a.badge-success:focus,a.badge-success:hover{color:#19191a;background-color:#009963}a.badge-success.focus,a.badge-success:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.5);box-shadow:0 0 0 .2rem rgba(0,204,133,.5)}.badge-info{color:#19191a;background-color:#979899}a.badge-info:focus,a.badge-info:hover{color:#19191a;background-color:#7e7e80}a.badge-info.focus,a.badge-info:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(151,152,153,.5);box-shadow:0 0 0 .2rem rgba(151,152,153,.5)}.badge-warning{color:#19191a;background-color:#f90}a.badge-warning:focus,a.badge-warning:hover{color:#19191a;background-color:#cc7a00}a.badge-warning.focus,a.badge-warning:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(255,153,0,.5);box-shadow:0 0 0 .2rem rgba(255,153,0,.5)}.badge-danger{color:#19191a;background-color:#f73e5a}a.badge-danger:focus,a.badge-danger:hover{color:#19191a;background-color:#f50d30}a.badge-danger.focus,a.badge-danger:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.5);box-shadow:0 0 0 .2rem rgba(247,62,90,.5)}.badge-light{color:#19191a;background-color:#e9e6f2}a.badge-light:focus,a.badge-light:hover{color:#19191a;background-color:#ccc4e1}a.badge-light.focus,a.badge-light:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(233,230,242,.5);box-shadow:0 0 0 .2rem rgba(233,230,242,.5)}.badge-dark{color:#fff;background-color:#17324d}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#0b1825}a.badge-dark.focus,a.badge-dark:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(23,50,77,.5);box-shadow:0 0 0 .2rem rgba(23,50,77,.5)}.badge-100{color:#19191a;background-color:#e3e4e6}a.badge-100:focus,a.badge-100:hover{color:#19191a;background-color:#c9cacd}a.badge-100.focus,a.badge-100:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(227,228,230,.5);box-shadow:0 0 0 .2rem rgba(227,228,230,.5)}.badge-200{color:#19191a;background-color:#cacacc}a.badge-200:focus,a.badge-200:hover{color:#19191a;background-color:#b0b1b3}a.badge-200.focus,a.badge-200:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(202,202,204,.5);box-shadow:0 0 0 .2rem rgba(202,202,204,.5)}.badge-300{color:#19191a;background-color:#b1b1b3}a.badge-300:focus,a.badge-300:hover{color:#19191a;background-color:#979899}a.badge-300.focus,a.badge-300:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(177,177,179,.5);box-shadow:0 0 0 .2rem rgba(177,177,179,.5)}.badge-400{color:#19191a;background-color:#979899}a.badge-400:focus,a.badge-400:hover{color:#19191a;background-color:#7e7e80}a.badge-400.focus,a.badge-400:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(151,152,153,.5);box-shadow:0 0 0 .2rem rgba(151,152,153,.5)}.badge-500{color:#19191a;background-color:#7e7f80}a.badge-500:focus,a.badge-500:hover{color:#19191a;background-color:#656566}a.badge-500.focus,a.badge-500:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(126,127,128,.5);box-shadow:0 0 0 .2rem rgba(126,127,128,.5)}.badge-600{color:#fff;background-color:#656566}a.badge-600:focus,a.badge-600:hover{color:#fff;background-color:#4c4c4c}a.badge-600.focus,a.badge-600:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(101,101,102,.5);box-shadow:0 0 0 .2rem rgba(101,101,102,.5)}.badge-700{color:#fff;background-color:#4c4c4d}a.badge-700:focus,a.badge-700:hover{color:#fff;background-color:#323233}a.badge-700.focus,a.badge-700:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(76,76,77,.5);box-shadow:0 0 0 .2rem rgba(76,76,77,.5)}.badge-800{color:#fff;background-color:#323333}a.badge-800:focus,a.badge-800:hover{color:#fff;background-color:#191919}a.badge-800.focus,a.badge-800:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(50,51,51,.5);box-shadow:0 0 0 .2rem rgba(50,51,51,.5)}.badge-900{color:#fff;background-color:#19191a}a.badge-900:focus,a.badge-900:hover{color:#fff;background-color:#000}a.badge-900.focus,a.badge-900:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(25,25,26,.5);box-shadow:0 0 0 .2rem rgba(25,25,26,.5)}@-webkit-keyframes progress-bar-stripes{0%{background-position:16px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:16px 0}to{background-position:0 0}}.progress{height:16px;overflow:hidden;font-size:12px;font-size:.75rem;background-color:#cacacc;border-radius:0;-webkit-box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1);box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1)}.progress,.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex}.progress-bar{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#0073e6;-webkit-transition:width .6s ease;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:16px 16px}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#0073e6;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#00264d;text-decoration:none}.list-group-item-action:active{color:#19191a;background-color:#cacacc}.list-group-item{position:relative;display:block;padding:1rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item:disabled{color:#656566;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0073e6;border-color:#0073e6}.list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#003c78;background-color:#b8d8f8}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#003c78;background-color:#a1cbf6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#003c78;border-color:#003c78}.list-group-item-secondary{color:#303a44;background-color:#d1d7dc}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#303a44;background-color:#c3cad1}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#303a44;border-color:#303a44}.list-group-item-success{color:#006a45;background-color:#b8f1dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#006a45;background-color:#a3edd3}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#006a45;border-color:#006a45}.list-group-item-info{color:#4f4f50;background-color:#e2e2e2}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#4f4f50;background-color:#d5d5d5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#4f4f50;border-color:#4f4f50}.list-group-item-warning{color:#855000;background-color:#ffe2b8}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#855000;background-color:#ffd89f}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#855000;border-color:#855000}.list-group-item-danger{color:#80202f;background-color:#fdc9d1}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#80202f;background-color:#fcb0bc}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#80202f;border-color:#80202f}.list-group-item-light{color:#79787e;background-color:#f9f8fb}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#79787e;background-color:#ebe8f2}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#79787e;border-color:#79787e}.list-group-item-dark{color:#0c1a28;background-color:#bec6cd}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#0c1a28;background-color:#b0b9c2}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#0c1a28;border-color:#0c1a28}.list-group-item-100{color:#767778;background-color:#f7f7f8}.list-group-item-100.list-group-item-action:focus,.list-group-item-100.list-group-item-action:hover{color:#767778;background-color:#e9e9ec}.list-group-item-100.list-group-item-action.active{color:#fff;background-color:#767778;border-color:#767778}.list-group-item-200{color:#69696a;background-color:#f0f0f1}.list-group-item-200.list-group-item-action:focus,.list-group-item-200.list-group-item-action:hover{color:#69696a;background-color:#e3e3e5}.list-group-item-200.list-group-item-action.active{color:#fff;background-color:#69696a;border-color:#69696a}.list-group-item-300{color:#5c5c5d;background-color:#e9e9ea}.list-group-item-300.list-group-item-action:focus,.list-group-item-300.list-group-item-action:hover{color:#5c5c5d;background-color:#dcdcde}.list-group-item-300.list-group-item-action.active{color:#fff;background-color:#5c5c5d;border-color:#5c5c5d}.list-group-item-400{color:#4f4f50;background-color:#e2e2e2}.list-group-item-400.list-group-item-action:focus,.list-group-item-400.list-group-item-action:hover{color:#4f4f50;background-color:#d5d5d5}.list-group-item-400.list-group-item-action.active{color:#fff;background-color:#4f4f50;border-color:#4f4f50}.list-group-item-500{color:#424243;background-color:#dbdbdb}.list-group-item-500.list-group-item-action:focus,.list-group-item-500.list-group-item-action:hover{color:#424243;background-color:#cecece}.list-group-item-500.list-group-item-action.active{color:#fff;background-color:#424243;border-color:#424243}.list-group-item-600{color:#353535;background-color:#d4d4d4}.list-group-item-600.list-group-item-action:focus,.list-group-item-600.list-group-item-action:hover{color:#353535;background-color:#c7c7c7}.list-group-item-600.list-group-item-action.active{color:#fff;background-color:#353535;border-color:#353535}.list-group-item-700{color:#282828;background-color:#cdcdcd}.list-group-item-700.list-group-item-action:focus,.list-group-item-700.list-group-item-action:hover{color:#282828;background-color:silver}.list-group-item-700.list-group-item-action.active{color:#fff;background-color:#282828;border-color:#282828}.list-group-item-800{color:#1a1b1b;background-color:#c6c6c6}.list-group-item-800.list-group-item-action:focus,.list-group-item-800.list-group-item-action:hover{color:#1a1b1b;background-color:#b9b9b9}.list-group-item-800.list-group-item-action.active{color:#fff;background-color:#1a1b1b;border-color:#1a1b1b}.list-group-item-900{color:#0d0d0e;background-color:#bfbfbf}.list-group-item-900.list-group-item-action:focus,.list-group-item-900.list-group-item-action:hover{color:#0d0d0e;background-color:#b2b2b2}.list-group-item-900.list-group-item-action.active{color:#fff;background-color:#0d0d0e;border-color:#0d0d0e}.close{float:right;font-size:24px;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:8px;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.5);box-shadow:0 .25rem .5rem rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.8}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem;border-bottom:0 solid #b1b1b3;border-top-left-radius:8px;border-top-right-radius:8px}.modal-header .close{padding:1.5rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.5rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1.5rem;border-top:0 solid #b1b1b3;border-bottom-right-radius:8px;border-bottom-left-radius:8px}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.5rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3rem)}.modal-dialog-centered{min-height:calc(100% - 3rem)}.modal-dialog-centered:before{height:calc(100vh - 3rem)}.modal-content{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.5);box-shadow:0 .5rem 1rem rgba(0,0,0,.5)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Titillium Web,Geneva,Tahoma,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:14px;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:1}.tooltip .arrow{position:absolute;display:block;width:12.8px;width:.8rem;height:6.4px;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#004a4d}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:6.4px;width:.4rem;height:12.8px;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#004a4d}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#004a4d}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:6.4px;width:.4rem;height:12.8px;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#004a4d}.tooltip-inner{max-width:32em;padding:1rem;color:#fff;text-align:center;background-color:#004a4d;border-radius:4px}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Titillium Web,Geneva,Tahoma,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:14px;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:8px;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.2);box-shadow:0 .25rem .5rem rgba(0,0,0,.2)}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:16px;width:1rem;height:8px;height:.5rem;margin:0 8px}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:8px;width:.5rem;height:16px;height:1rem;margin:8px 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:16px;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:8px;width:.5rem;height:16px;height:1rem;margin:8px 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:16px;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:7px;border-top-right-radius:7px}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#19191a}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:opacity 0s .6s;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;color:#5c6f82;text-align:center;opacity:1;-webkit-transition:opacity .15s ease;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{-webkit-transition:none;transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#5c6f82;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:32px;height:32px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:auto;margin-left:auto;list-style:none}.carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#0073e6!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0059b3!important}.bg-secondary{background-color:#5c6f82!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#475664!important}.bg-success{background-color:#00cc85!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#009963!important}.bg-info{background-color:#979899!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#7e7e80!important}.bg-warning{background-color:#f90!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#cc7a00!important}.bg-danger{background-color:#f73e5a!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#f50d30!important}.bg-light{background-color:#e9e6f2!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#ccc4e1!important}.bg-dark{background-color:#17324d!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#0b1825!important}.bg-100{background-color:#e3e4e6!important}a.bg-100:focus,a.bg-100:hover,button.bg-100:focus,button.bg-100:hover{background-color:#c9cacd!important}.bg-200{background-color:#cacacc!important}a.bg-200:focus,a.bg-200:hover,button.bg-200:focus,button.bg-200:hover{background-color:#b0b1b3!important}.bg-300{background-color:#b1b1b3!important}.bg-400,a.bg-300:focus,a.bg-300:hover,button.bg-300:focus,button.bg-300:hover{background-color:#979899!important}a.bg-400:focus,a.bg-400:hover,button.bg-400:focus,button.bg-400:hover{background-color:#7e7e80!important}.bg-500{background-color:#7e7f80!important}.bg-600,a.bg-500:focus,a.bg-500:hover,button.bg-500:focus,button.bg-500:hover{background-color:#656566!important}a.bg-600:focus,a.bg-600:hover,button.bg-600:focus,button.bg-600:hover{background-color:#4c4c4c!important}.bg-700{background-color:#4c4c4d!important}a.bg-700:focus,a.bg-700:hover,button.bg-700:focus,button.bg-700:hover{background-color:#323233!important}.bg-800{background-color:#323333!important}a.bg-800:focus,a.bg-800:hover,button.bg-800:focus,button.bg-800:hover{background-color:#191919!important}.bg-900{background-color:#19191a!important}a.bg-900:focus,a.bg-900:hover,button.bg-900:focus,button.bg-900:hover{background-color:#000!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #b1b1b3!important}.border-top{border-top:1px solid #b1b1b3!important}.border-right{border-right:1px solid #b1b1b3!important}.border-bottom{border-bottom:1px solid #b1b1b3!important}.border-left{border-left:1px solid #b1b1b3!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#0073e6!important}.border-secondary{border-color:#5c6f82!important}.border-success{border-color:#00cc85!important}.border-info{border-color:#979899!important}.border-warning{border-color:#f90!important}.border-danger{border-color:#f73e5a!important}.border-light{border-color:#e9e6f2!important}.border-dark{border-color:#17324d!important}.border-100{border-color:#e3e4e6!important}.border-200{border-color:#cacacc!important}.border-300{border-color:#b1b1b3!important}.border-400{border-color:#979899!important}.border-500{border-color:#7e7f80!important}.border-600{border-color:#656566!important}.border-700{border-color:#4c4c4d!important}.border-800{border-color:#323333!important}.border-900{border-color:#19191a!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:2px!important}.rounded{border-radius:4px!important}.rounded-top{border-top-left-radius:4px!important}.rounded-right,.rounded-top{border-top-right-radius:4px!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:4px!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:4px!important}.rounded-left{border-top-left-radius:4px!important}.rounded-lg{border-radius:8px!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column,.flex-row{-webkit-box-direction:normal!important}.flex-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse,.flex-row-reverse{-webkit-box-direction:reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column,.flex-sm-row{-webkit-box-direction:normal!important}.flex-sm-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column,.flex-md-row{-webkit-box-direction:normal!important}.flex-md-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column,.flex-lg-row{-webkit-box-direction:normal!important}.flex-lg-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column,.flex-xl-row{-webkit-box-direction:normal!important}.flex-xl-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:4px!important}.mt-1,.my-1{margin-top:4px!important}.mr-1,.mx-1{margin-right:4px!important}.mb-1,.my-1{margin-bottom:4px!important}.ml-1,.mx-1{margin-left:4px!important}.m-2{margin:8px!important}.mt-2,.my-2{margin-top:8px!important}.mr-2,.mx-2{margin-right:8px!important}.mb-2,.my-2{margin-bottom:8px!important}.ml-2,.mx-2{margin-left:8px!important}.m-3{margin:16px!important}.mt-3,.my-3{margin-top:16px!important}.mr-3,.mx-3{margin-right:16px!important}.mb-3,.my-3{margin-bottom:16px!important}.ml-3,.mx-3{margin-left:16px!important}.m-4{margin:24px!important}.mt-4,.my-4{margin-top:24px!important}.mr-4,.mx-4{margin-right:24px!important}.mb-4,.my-4{margin-bottom:24px!important}.ml-4,.mx-4{margin-left:24px!important}.m-5{margin:48px!important}.mt-5,.my-5{margin-top:48px!important}.mr-5,.mx-5{margin-right:48px!important}.mb-5,.my-5{margin-bottom:48px!important}.ml-5,.mx-5{margin-left:48px!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:4px!important}.pt-1,.py-1{padding-top:4px!important}.pr-1,.px-1{padding-right:4px!important}.pb-1,.py-1{padding-bottom:4px!important}.pl-1,.px-1{padding-left:4px!important}.p-2{padding:8px!important}.pt-2,.py-2{padding-top:8px!important}.pr-2,.px-2{padding-right:8px!important}.pb-2,.py-2{padding-bottom:8px!important}.pl-2,.px-2{padding-left:8px!important}.p-3{padding:16px!important}.pt-3,.py-3{padding-top:16px!important}.pr-3,.px-3{padding-right:16px!important}.pb-3,.py-3{padding-bottom:16px!important}.pl-3,.px-3{padding-left:16px!important}.p-4{padding:24px!important}.pt-4,.py-4{padding-top:24px!important}.pr-4,.px-4{padding-right:24px!important}.pb-4,.py-4{padding-bottom:24px!important}.pl-4,.px-4{padding-left:24px!important}.p-5{padding:48px!important}.pt-5,.py-5{padding-top:48px!important}.pr-5,.px-5{padding-right:48px!important}.pb-5,.py-5{padding-bottom:48px!important}.pl-5,.px-5{padding-left:48px!important}.m-n1{margin:-4px!important}.mt-n1,.my-n1{margin-top:-4px!important}.mr-n1,.mx-n1{margin-right:-4px!important}.mb-n1,.my-n1{margin-bottom:-4px!important}.ml-n1,.mx-n1{margin-left:-4px!important}.m-n2{margin:-8px!important}.mt-n2,.my-n2{margin-top:-8px!important}.mr-n2,.mx-n2{margin-right:-8px!important}.mb-n2,.my-n2{margin-bottom:-8px!important}.ml-n2,.mx-n2{margin-left:-8px!important}.m-n3{margin:-16px!important}.mt-n3,.my-n3{margin-top:-16px!important}.mr-n3,.mx-n3{margin-right:-16px!important}.mb-n3,.my-n3{margin-bottom:-16px!important}.ml-n3,.mx-n3{margin-left:-16px!important}.m-n4{margin:-24px!important}.mt-n4,.my-n4{margin-top:-24px!important}.mr-n4,.mx-n4{margin-right:-24px!important}.mb-n4,.my-n4{margin-bottom:-24px!important}.ml-n4,.mx-n4{margin-left:-24px!important}.m-n5{margin:-48px!important}.mt-n5,.my-n5{margin-top:-48px!important}.mr-n5,.mx-n5{margin-right:-48px!important}.mb-n5,.my-n5{margin-bottom:-48px!important}.ml-n5,.mx-n5{margin-left:-48px!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:4px!important}.mt-sm-1,.my-sm-1{margin-top:4px!important}.mr-sm-1,.mx-sm-1{margin-right:4px!important}.mb-sm-1,.my-sm-1{margin-bottom:4px!important}.ml-sm-1,.mx-sm-1{margin-left:4px!important}.m-sm-2{margin:8px!important}.mt-sm-2,.my-sm-2{margin-top:8px!important}.mr-sm-2,.mx-sm-2{margin-right:8px!important}.mb-sm-2,.my-sm-2{margin-bottom:8px!important}.ml-sm-2,.mx-sm-2{margin-left:8px!important}.m-sm-3{margin:16px!important}.mt-sm-3,.my-sm-3{margin-top:16px!important}.mr-sm-3,.mx-sm-3{margin-right:16px!important}.mb-sm-3,.my-sm-3{margin-bottom:16px!important}.ml-sm-3,.mx-sm-3{margin-left:16px!important}.m-sm-4{margin:24px!important}.mt-sm-4,.my-sm-4{margin-top:24px!important}.mr-sm-4,.mx-sm-4{margin-right:24px!important}.mb-sm-4,.my-sm-4{margin-bottom:24px!important}.ml-sm-4,.mx-sm-4{margin-left:24px!important}.m-sm-5{margin:48px!important}.mt-sm-5,.my-sm-5{margin-top:48px!important}.mr-sm-5,.mx-sm-5{margin-right:48px!important}.mb-sm-5,.my-sm-5{margin-bottom:48px!important}.ml-sm-5,.mx-sm-5{margin-left:48px!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:4px!important}.pt-sm-1,.py-sm-1{padding-top:4px!important}.pr-sm-1,.px-sm-1{padding-right:4px!important}.pb-sm-1,.py-sm-1{padding-bottom:4px!important}.pl-sm-1,.px-sm-1{padding-left:4px!important}.p-sm-2{padding:8px!important}.pt-sm-2,.py-sm-2{padding-top:8px!important}.pr-sm-2,.px-sm-2{padding-right:8px!important}.pb-sm-2,.py-sm-2{padding-bottom:8px!important}.pl-sm-2,.px-sm-2{padding-left:8px!important}.p-sm-3{padding:16px!important}.pt-sm-3,.py-sm-3{padding-top:16px!important}.pr-sm-3,.px-sm-3{padding-right:16px!important}.pb-sm-3,.py-sm-3{padding-bottom:16px!important}.pl-sm-3,.px-sm-3{padding-left:16px!important}.p-sm-4{padding:24px!important}.pt-sm-4,.py-sm-4{padding-top:24px!important}.pr-sm-4,.px-sm-4{padding-right:24px!important}.pb-sm-4,.py-sm-4{padding-bottom:24px!important}.pl-sm-4,.px-sm-4{padding-left:24px!important}.p-sm-5{padding:48px!important}.pt-sm-5,.py-sm-5{padding-top:48px!important}.pr-sm-5,.px-sm-5{padding-right:48px!important}.pb-sm-5,.py-sm-5{padding-bottom:48px!important}.pl-sm-5,.px-sm-5{padding-left:48px!important}.m-sm-n1{margin:-4px!important}.mt-sm-n1,.my-sm-n1{margin-top:-4px!important}.mr-sm-n1,.mx-sm-n1{margin-right:-4px!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-4px!important}.ml-sm-n1,.mx-sm-n1{margin-left:-4px!important}.m-sm-n2{margin:-8px!important}.mt-sm-n2,.my-sm-n2{margin-top:-8px!important}.mr-sm-n2,.mx-sm-n2{margin-right:-8px!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-8px!important}.ml-sm-n2,.mx-sm-n2{margin-left:-8px!important}.m-sm-n3{margin:-16px!important}.mt-sm-n3,.my-sm-n3{margin-top:-16px!important}.mr-sm-n3,.mx-sm-n3{margin-right:-16px!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-16px!important}.ml-sm-n3,.mx-sm-n3{margin-left:-16px!important}.m-sm-n4{margin:-24px!important}.mt-sm-n4,.my-sm-n4{margin-top:-24px!important}.mr-sm-n4,.mx-sm-n4{margin-right:-24px!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-24px!important}.ml-sm-n4,.mx-sm-n4{margin-left:-24px!important}.m-sm-n5{margin:-48px!important}.mt-sm-n5,.my-sm-n5{margin-top:-48px!important}.mr-sm-n5,.mx-sm-n5{margin-right:-48px!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-48px!important}.ml-sm-n5,.mx-sm-n5{margin-left:-48px!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:4px!important}.mt-md-1,.my-md-1{margin-top:4px!important}.mr-md-1,.mx-md-1{margin-right:4px!important}.mb-md-1,.my-md-1{margin-bottom:4px!important}.ml-md-1,.mx-md-1{margin-left:4px!important}.m-md-2{margin:8px!important}.mt-md-2,.my-md-2{margin-top:8px!important}.mr-md-2,.mx-md-2{margin-right:8px!important}.mb-md-2,.my-md-2{margin-bottom:8px!important}.ml-md-2,.mx-md-2{margin-left:8px!important}.m-md-3{margin:16px!important}.mt-md-3,.my-md-3{margin-top:16px!important}.mr-md-3,.mx-md-3{margin-right:16px!important}.mb-md-3,.my-md-3{margin-bottom:16px!important}.ml-md-3,.mx-md-3{margin-left:16px!important}.m-md-4{margin:24px!important}.mt-md-4,.my-md-4{margin-top:24px!important}.mr-md-4,.mx-md-4{margin-right:24px!important}.mb-md-4,.my-md-4{margin-bottom:24px!important}.ml-md-4,.mx-md-4{margin-left:24px!important}.m-md-5{margin:48px!important}.mt-md-5,.my-md-5{margin-top:48px!important}.mr-md-5,.mx-md-5{margin-right:48px!important}.mb-md-5,.my-md-5{margin-bottom:48px!important}.ml-md-5,.mx-md-5{margin-left:48px!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:4px!important}.pt-md-1,.py-md-1{padding-top:4px!important}.pr-md-1,.px-md-1{padding-right:4px!important}.pb-md-1,.py-md-1{padding-bottom:4px!important}.pl-md-1,.px-md-1{padding-left:4px!important}.p-md-2{padding:8px!important}.pt-md-2,.py-md-2{padding-top:8px!important}.pr-md-2,.px-md-2{padding-right:8px!important}.pb-md-2,.py-md-2{padding-bottom:8px!important}.pl-md-2,.px-md-2{padding-left:8px!important}.p-md-3{padding:16px!important}.pt-md-3,.py-md-3{padding-top:16px!important}.pr-md-3,.px-md-3{padding-right:16px!important}.pb-md-3,.py-md-3{padding-bottom:16px!important}.pl-md-3,.px-md-3{padding-left:16px!important}.p-md-4{padding:24px!important}.pt-md-4,.py-md-4{padding-top:24px!important}.pr-md-4,.px-md-4{padding-right:24px!important}.pb-md-4,.py-md-4{padding-bottom:24px!important}.pl-md-4,.px-md-4{padding-left:24px!important}.p-md-5{padding:48px!important}.pt-md-5,.py-md-5{padding-top:48px!important}.pr-md-5,.px-md-5{padding-right:48px!important}.pb-md-5,.py-md-5{padding-bottom:48px!important}.pl-md-5,.px-md-5{padding-left:48px!important}.m-md-n1{margin:-4px!important}.mt-md-n1,.my-md-n1{margin-top:-4px!important}.mr-md-n1,.mx-md-n1{margin-right:-4px!important}.mb-md-n1,.my-md-n1{margin-bottom:-4px!important}.ml-md-n1,.mx-md-n1{margin-left:-4px!important}.m-md-n2{margin:-8px!important}.mt-md-n2,.my-md-n2{margin-top:-8px!important}.mr-md-n2,.mx-md-n2{margin-right:-8px!important}.mb-md-n2,.my-md-n2{margin-bottom:-8px!important}.ml-md-n2,.mx-md-n2{margin-left:-8px!important}.m-md-n3{margin:-16px!important}.mt-md-n3,.my-md-n3{margin-top:-16px!important}.mr-md-n3,.mx-md-n3{margin-right:-16px!important}.mb-md-n3,.my-md-n3{margin-bottom:-16px!important}.ml-md-n3,.mx-md-n3{margin-left:-16px!important}.m-md-n4{margin:-24px!important}.mt-md-n4,.my-md-n4{margin-top:-24px!important}.mr-md-n4,.mx-md-n4{margin-right:-24px!important}.mb-md-n4,.my-md-n4{margin-bottom:-24px!important}.ml-md-n4,.mx-md-n4{margin-left:-24px!important}.m-md-n5{margin:-48px!important}.mt-md-n5,.my-md-n5{margin-top:-48px!important}.mr-md-n5,.mx-md-n5{margin-right:-48px!important}.mb-md-n5,.my-md-n5{margin-bottom:-48px!important}.ml-md-n5,.mx-md-n5{margin-left:-48px!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:4px!important}.mt-lg-1,.my-lg-1{margin-top:4px!important}.mr-lg-1,.mx-lg-1{margin-right:4px!important}.mb-lg-1,.my-lg-1{margin-bottom:4px!important}.ml-lg-1,.mx-lg-1{margin-left:4px!important}.m-lg-2{margin:8px!important}.mt-lg-2,.my-lg-2{margin-top:8px!important}.mr-lg-2,.mx-lg-2{margin-right:8px!important}.mb-lg-2,.my-lg-2{margin-bottom:8px!important}.ml-lg-2,.mx-lg-2{margin-left:8px!important}.m-lg-3{margin:16px!important}.mt-lg-3,.my-lg-3{margin-top:16px!important}.mr-lg-3,.mx-lg-3{margin-right:16px!important}.mb-lg-3,.my-lg-3{margin-bottom:16px!important}.ml-lg-3,.mx-lg-3{margin-left:16px!important}.m-lg-4{margin:24px!important}.mt-lg-4,.my-lg-4{margin-top:24px!important}.mr-lg-4,.mx-lg-4{margin-right:24px!important}.mb-lg-4,.my-lg-4{margin-bottom:24px!important}.ml-lg-4,.mx-lg-4{margin-left:24px!important}.m-lg-5{margin:48px!important}.mt-lg-5,.my-lg-5{margin-top:48px!important}.mr-lg-5,.mx-lg-5{margin-right:48px!important}.mb-lg-5,.my-lg-5{margin-bottom:48px!important}.ml-lg-5,.mx-lg-5{margin-left:48px!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:4px!important}.pt-lg-1,.py-lg-1{padding-top:4px!important}.pr-lg-1,.px-lg-1{padding-right:4px!important}.pb-lg-1,.py-lg-1{padding-bottom:4px!important}.pl-lg-1,.px-lg-1{padding-left:4px!important}.p-lg-2{padding:8px!important}.pt-lg-2,.py-lg-2{padding-top:8px!important}.pr-lg-2,.px-lg-2{padding-right:8px!important}.pb-lg-2,.py-lg-2{padding-bottom:8px!important}.pl-lg-2,.px-lg-2{padding-left:8px!important}.p-lg-3{padding:16px!important}.pt-lg-3,.py-lg-3{padding-top:16px!important}.pr-lg-3,.px-lg-3{padding-right:16px!important}.pb-lg-3,.py-lg-3{padding-bottom:16px!important}.pl-lg-3,.px-lg-3{padding-left:16px!important}.p-lg-4{padding:24px!important}.pt-lg-4,.py-lg-4{padding-top:24px!important}.pr-lg-4,.px-lg-4{padding-right:24px!important}.pb-lg-4,.py-lg-4{padding-bottom:24px!important}.pl-lg-4,.px-lg-4{padding-left:24px!important}.p-lg-5{padding:48px!important}.pt-lg-5,.py-lg-5{padding-top:48px!important}.pr-lg-5,.px-lg-5{padding-right:48px!important}.pb-lg-5,.py-lg-5{padding-bottom:48px!important}.pl-lg-5,.px-lg-5{padding-left:48px!important}.m-lg-n1{margin:-4px!important}.mt-lg-n1,.my-lg-n1{margin-top:-4px!important}.mr-lg-n1,.mx-lg-n1{margin-right:-4px!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-4px!important}.ml-lg-n1,.mx-lg-n1{margin-left:-4px!important}.m-lg-n2{margin:-8px!important}.mt-lg-n2,.my-lg-n2{margin-top:-8px!important}.mr-lg-n2,.mx-lg-n2{margin-right:-8px!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-8px!important}.ml-lg-n2,.mx-lg-n2{margin-left:-8px!important}.m-lg-n3{margin:-16px!important}.mt-lg-n3,.my-lg-n3{margin-top:-16px!important}.mr-lg-n3,.mx-lg-n3{margin-right:-16px!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-16px!important}.ml-lg-n3,.mx-lg-n3{margin-left:-16px!important}.m-lg-n4{margin:-24px!important}.mt-lg-n4,.my-lg-n4{margin-top:-24px!important}.mr-lg-n4,.mx-lg-n4{margin-right:-24px!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-24px!important}.ml-lg-n4,.mx-lg-n4{margin-left:-24px!important}.m-lg-n5{margin:-48px!important}.mt-lg-n5,.my-lg-n5{margin-top:-48px!important}.mr-lg-n5,.mx-lg-n5{margin-right:-48px!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-48px!important}.ml-lg-n5,.mx-lg-n5{margin-left:-48px!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:4px!important}.mt-xl-1,.my-xl-1{margin-top:4px!important}.mr-xl-1,.mx-xl-1{margin-right:4px!important}.mb-xl-1,.my-xl-1{margin-bottom:4px!important}.ml-xl-1,.mx-xl-1{margin-left:4px!important}.m-xl-2{margin:8px!important}.mt-xl-2,.my-xl-2{margin-top:8px!important}.mr-xl-2,.mx-xl-2{margin-right:8px!important}.mb-xl-2,.my-xl-2{margin-bottom:8px!important}.ml-xl-2,.mx-xl-2{margin-left:8px!important}.m-xl-3{margin:16px!important}.mt-xl-3,.my-xl-3{margin-top:16px!important}.mr-xl-3,.mx-xl-3{margin-right:16px!important}.mb-xl-3,.my-xl-3{margin-bottom:16px!important}.ml-xl-3,.mx-xl-3{margin-left:16px!important}.m-xl-4{margin:24px!important}.mt-xl-4,.my-xl-4{margin-top:24px!important}.mr-xl-4,.mx-xl-4{margin-right:24px!important}.mb-xl-4,.my-xl-4{margin-bottom:24px!important}.ml-xl-4,.mx-xl-4{margin-left:24px!important}.m-xl-5{margin:48px!important}.mt-xl-5,.my-xl-5{margin-top:48px!important}.mr-xl-5,.mx-xl-5{margin-right:48px!important}.mb-xl-5,.my-xl-5{margin-bottom:48px!important}.ml-xl-5,.mx-xl-5{margin-left:48px!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:4px!important}.pt-xl-1,.py-xl-1{padding-top:4px!important}.pr-xl-1,.px-xl-1{padding-right:4px!important}.pb-xl-1,.py-xl-1{padding-bottom:4px!important}.pl-xl-1,.px-xl-1{padding-left:4px!important}.p-xl-2{padding:8px!important}.pt-xl-2,.py-xl-2{padding-top:8px!important}.pr-xl-2,.px-xl-2{padding-right:8px!important}.pb-xl-2,.py-xl-2{padding-bottom:8px!important}.pl-xl-2,.px-xl-2{padding-left:8px!important}.p-xl-3{padding:16px!important}.pt-xl-3,.py-xl-3{padding-top:16px!important}.pr-xl-3,.px-xl-3{padding-right:16px!important}.pb-xl-3,.py-xl-3{padding-bottom:16px!important}.pl-xl-3,.px-xl-3{padding-left:16px!important}.p-xl-4{padding:24px!important}.pt-xl-4,.py-xl-4{padding-top:24px!important}.pr-xl-4,.px-xl-4{padding-right:24px!important}.pb-xl-4,.py-xl-4{padding-bottom:24px!important}.pl-xl-4,.px-xl-4{padding-left:24px!important}.p-xl-5{padding:48px!important}.pt-xl-5,.py-xl-5{padding-top:48px!important}.pr-xl-5,.px-xl-5{padding-right:48px!important}.pb-xl-5,.py-xl-5{padding-bottom:48px!important}.pl-xl-5,.px-xl-5{padding-left:48px!important}.m-xl-n1{margin:-4px!important}.mt-xl-n1,.my-xl-n1{margin-top:-4px!important}.mr-xl-n1,.mx-xl-n1{margin-right:-4px!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-4px!important}.ml-xl-n1,.mx-xl-n1{margin-left:-4px!important}.m-xl-n2{margin:-8px!important}.mt-xl-n2,.my-xl-n2{margin-top:-8px!important}.mr-xl-n2,.mx-xl-n2{margin-right:-8px!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-8px!important}.ml-xl-n2,.mx-xl-n2{margin-left:-8px!important}.m-xl-n3{margin:-16px!important}.mt-xl-n3,.my-xl-n3{margin-top:-16px!important}.mr-xl-n3,.mx-xl-n3{margin-right:-16px!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-16px!important}.ml-xl-n3,.mx-xl-n3{margin-left:-16px!important}.m-xl-n4{margin:-24px!important}.mt-xl-n4,.my-xl-n4{margin-top:-24px!important}.mr-xl-n4,.mx-xl-n4{margin-right:-24px!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-24px!important}.ml-xl-n4,.mx-xl-n4{margin-left:-24px!important}.m-xl-n5{margin:-48px!important}.mt-xl-n5,.my-xl-n5{margin-top:-48px!important}.mr-xl-n5,.mx-xl-n5{margin-right:-48px!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-48px!important}.ml-xl-n5,.mx-xl-n5{margin-left:-48px!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:Roboto Mono,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#004d99!important}a.text-primary:focus,a.text-primary:hover{color:#004080!important}.text-secondary{color:#3d4955!important}a.text-secondary:focus,a.text-secondary:hover{color:#323c46!important}.text-success{color:#008053!important}a.text-success:focus,a.text-success:hover{color:#006642!important}.text-info{color:#717273!important}a.text-info:focus,a.text-info:hover{color:#646566!important}.text-warning{color:#a36200!important}a.text-warning:focus,a.text-warning:hover{color:#995c00!important}.text-danger{color:#e00929!important}a.text-danger:focus,a.text-danger:hover{color:#c70825!important}.text-light{color:#bdb4d8!important}a.text-light:focus,a.text-light:hover{color:#aea3d0!important}.text-dark{color:#050b12!important}a.text-dark:focus,a.text-dark:hover{color:#000!important}.text-100{color:#bbbdc1!important}a.text-100:focus,a.text-100:hover{color:#aeb0b5!important}.text-200{color:#a3a4a7!important}a.text-200:focus,a.text-200:hover{color:#96979a!important}.text-300{color:#8a8b8d!important}a.text-300:focus,a.text-300:hover{color:#7d7e80!important}.text-400{color:#717273!important}a.text-400:focus,a.text-400:hover{color:#646566!important}.text-500{color:#585859!important}a.text-500:focus,a.text-500:hover{color:#4b4c4c!important}.text-600{color:#3f3f40!important}a.text-600:focus,a.text-600:hover{color:#323233!important}.text-700{color:#262626!important}a.text-700:focus,a.text-700:hover{color:#191919!important}.text-800{color:#0c0c0d!important}.text-900,a.text-800:focus,a.text-800:hover,a.text-900:focus,a.text-900:hover{color:#000!important}.text-body{color:#19191a!important}.text-muted{color:#5a768a!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}body,html{font-size:16px;line-height:1.5}@media (min-width:576px){body,html{font-size:18px;line-height:1.555}}.h1,h1{letter-spacing:-1px}@media (min-width:576px){.h1,h1{font-size:2.666rem;letter-spacing:-1.3px;line-height:1.25}}.h2,h2{line-height:1.25}@media (min-width:576px){.h2,h2{font-size:2.222rem;line-height:1.2;letter-spacing:-2px}}.h3,h3{line-height:1.1428}@media (min-width:576px){.h3,h3{font-size:1.777rem;line-height:1.25}}.h4,h4{line-height:1.1666}@media (min-width:576px){.h4,h4{font-size:1.555rem;line-height:1.428;font-weight:600}}.h5,h5{font-weight:400}@media (min-width:576px){.h5,h5{font-size:1.333rem}}.h6,h6{font-weight:600;line-height:1.5}.display-1{font-size:49.776px;font-size:3.111rem}@media (min-width:576px){.display-1{font-size:3.111rem;line-height:1.428}}.blockquote,blockquote{font-family:Lora,Georgia,serif;margin:1.5rem 0}caption{font-size:12.432px;font-size:.777rem;line-height:1.4285}b,strong{font-weight:600}.small,small{font-size:15px;font-size:.9375rem;font-weight:400}@media (min-width:576px){.small,small{font-size:.8888rem}}.x-small{font-size:14px;font-size:.875rem;font-weight:400}@media (min-width:576px){.x-small{font-size:.7777rem}}.blockquote-footer{color:#656566}.bg-dark .blockquote-footer{color:#979899}.row.variable-gutters{margin-right:-6px;margin-left:-6px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:6px;padding-left:6px}@media (min-width:576px){.row.variable-gutters{margin-right:-6px;margin-left:-6px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:6px;padding-left:6px}}@media (min-width:768px){.row.variable-gutters{margin-right:-10px;margin-left:-10px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:10px;padding-left:10px}}@media (min-width:992px){.row.variable-gutters{margin-right:-10px;margin-left:-10px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:10px;padding-left:10px}}@media (min-width:1200px){.row.variable-gutters{margin-right:-14px;margin-left:-14px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:14px;padding-left:14px}}.table td,.table th{text-align:left;border-bottom:1px solid #d6dce3;border-top:none}.breadcrumb-container .breadcrumb{padding:24px;border-radius:0}.breadcrumb-container .breadcrumb .breadcrumb-item{padding-left:0}.breadcrumb-container .breadcrumb .breadcrumb-item+.breadcrumb-item:before{display:none}.breadcrumb-container .breadcrumb .breadcrumb-item i{padding-right:.5em}.breadcrumb-container .breadcrumb .breadcrumb-item a{color:#5b6f82;font-weight:600}.breadcrumb-container .breadcrumb .breadcrumb-item.active a{font-weight:400;pointer-events:none}.breadcrumb-container .breadcrumb .breadcrumb-item span.separator{display:inline-block;font-weight:600;padding:0 .5em}.breadcrumb-container .breadcrumb.dark{background:#435a70}.breadcrumb-container .breadcrumb.dark .breadcrumb-item a,.breadcrumb-container .breadcrumb.dark .breadcrumb-item span.separator{color:#fff}.breadcrumb-container .breadcrumb.dark .breadcrumb-item i{color:#0bd9d2}.modal-content,.modal-header{border-radius:0}[data-toggle=collapse] .collapse-icon:before{content:"";display:inline-block;width:0;height:0;border-top:.5rem solid;border-right:.5rem solid transparent;border-bottom:0;border-left:.5rem solid transparent;vertical-align:3px;vertical-align:.1875rem}[data-toggle=collapse].collapsed .collapse-icon:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.collapse-div{border-bottom:1px solid #e3e4e6}.collapse-div .collapse-div{border:1px solid #e3e4e6;border-top:0}.collapse-header{position:relative}.collapse-header [data-toggle=collapse]{width:100%;text-align:left;border:0;background-color:transparent;border-top:1px solid #e3e4e6;padding:14px 24px;cursor:pointer;color:#5c6f82;font-weight:600}.collapse-header [data-toggle=collapse][aria-expanded=false]{color:#0073e6}.collapse-header [data-toggle=collapse][aria-expanded=false]:after{content:"\e818"}.collapse-header [data-toggle=collapse][aria-expanded=true]:before{height:2px;width:56px;border-radius:2px;background-color:#0073e6;position:absolute;top:0;display:block;content:"";left:20px}.collapse-header [data-toggle=collapse][aria-expanded=false]:hover:after,.collapse-header [data-toggle=collapse][aria-expanded=true]:hover:after{text-decoration:none}.collapse-header [data-toggle=collapse]:after{content:"\e810";font-family:italia-icon-font;font-style:normal;font-weight:400;float:right;text-decoration:inherit;width:1em;margin-right:.2em;margin-top:5px;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.collapse-header [data-toggle=collapse]:hover{background-color:#e6ecf2;text-decoration:underline}.collapse-header [data-toggle=collapse]:active{background-color:#0073e6;color:#fff;border-color:#0073e6}.collapse-body{padding:12px 24px 42px}.collapse-body .collapse-header button[aria-expanded=true]:before{height:0;width:0}.carousel{background-color:#444e57;padding:3.5em 3em 3em}.carousel-control-next,.carousel-control-prev{top:1em;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.carousel-control-prev{left:auto;right:6em}.carousel-control-next{right:3em}.carousel-caption{position:static;padding-bottom:0}.carousel-indicators li{background-color:rgba(101,220,223,.5)}.carousel-indicators .active{background-color:#5c6f82}.list-group-item{padding:1rem}.list-group-item.disabled,.list-group-item:disabled{cursor:default}.list-group-item-action:focus,.list-group-item-action:hover{text-decoration:underline;background-color:#d9e6f2}.list-group-item-action.disabled:focus,.list-group-item-action.disabled:hover,.list-group-item-action:disabled:focus,.list-group-item-action:disabled:hover{text-decoration:none;background-color:transparent;border-top-color:transparent}.list-group-item.active:focus,.list-group-item.active:hover{background-color:#0073e6}.alert{position:relative;margin-bottom:1rem;border:1px solid #b1b1b3;padding:1rem 1rem 1rem 4em}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.5rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.8rem 1rem;color:inherit}.alert-success{border-left:8px solid #00cc85}.alert-info,.alert-success{background-position:1em .8em;background-repeat:no-repeat}.alert-info{border-left:8px solid #979899}.alert-warning{border-left:8px solid #f90}.alert-danger,.alert-warning{background-position:1em .8em;background-repeat:no-repeat}.alert-danger{border-left:8px solid #f73e5a;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M16 1.6C24 1.6 30.4 8 30.4 16S24 30.4 16 30.4 1.6 24 1.6 16 8 1.6 16 1.6zM16 0C7.2 0 0 7.2 0 16s7.2 16 16 16 16-7.2 16-16S24.8 0 16 0z'/%3E%3Cpath d='M14.4 24c0-.96.64-1.6 1.6-1.6s1.6.64 1.6 1.6c0 .96-.64 1.6-1.6 1.6s-1.6-.64-1.6-1.6zm.64-3.2l-.32-14.4h2.56l-.32 14.4z'/%3E%3C/svg%3E")}.alert-warning{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M14.333 26c0-1 .667-1.667 1.667-1.667S17.667 25 17.667 26 17 27.667 16 27.667 14.333 27 14.333 26zM15 22.667l-.333-15h2.667l-.333 15z'/%3E%3Cpath d='M16 2.667c1 0 2 .5 2.5 1.333l10.333 20.833c.5.833.5 2 0 2.833s-1.5 1.5-2.5 1.5H5.666c-1 0-2-.5-2.5-1.5-.5-.833-.5-2 0-2.833L13.499 4c.5-.833 1.5-1.333 2.5-1.333zM16 1c-1.5 0-3 .833-4 2.333L1.667 24.166c-1.667 3 .5 6.833 4 6.833h20.667c3.5 0 5.667-3.833 4-6.833L20.001 3.333c-1-1.667-2.5-2.333-4-2.333z'/%3E%3C/svg%3E")}.alert-success{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M32 6.682l-2.824-2.635-18.447 18.635-8.094-8.094L0 17.412l8.094 7.906h-.188l2.824 2.635 2.635-2.635z'/%3E%3C/svg%3E")}.alert-info{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M16 1.6C24 1.6 30.4 8 30.4 16S24 30.4 16 30.4 1.6 24 1.6 16 8.16 1.6 16 1.6zM16 0C7.2 0 0 7.2 0 16s7.2 16 16 16 16-7.2 16-16S24.8 0 16 0z'/%3E%3Cpath d='M14.72 9.76V6.72h2.88v3.04h-2.88zm0 15.84V12h2.88v13.6h-2.88z'/%3E%3C/svg%3E")}.btn{padding:12px 24px;font-size:16px;white-space:normal}.btn-group-lg>.btn,.btn-group-sm>.btn,.btn-lg,.btn-sm,.btn-xs{border-radius:4px;line-height:1.5}.btn-xs{padding:8px;font-size:14px;line-height:1.428}.btn-group-sm>.btn,.btn-sm{padding:10px 20px;font-size:14px;line-height:1.428}.btn-group-lg>.btn,.btn-lg{padding:14px 28px;font-size:18px;line-height:1.556}.btn-block{border-radius:0}.btn-primary.disabled,.btn-primary:disabled{color:#bfc2c9;background-color:#e6e9f2;border-color:#dfe4f2}.btn-outline-secondary{background:#fcfdff;-webkit-box-shadow:inset 0 0 0 1px #e6e9f2;box-shadow:inset 0 0 0 1px #e6e9f2}.btn-outline-secondary:hover{-webkit-box-shadow:inset 0 0 0 1px #c9cedc;box-shadow:inset 0 0 0 1px #c9cedc}.bg-dark .btn-link{color:#fff}.bg-dark .btn-primary{color:#19191a;background-color:#fff;border-color:#0073e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);color:#0073e6}.bg-dark .btn-primary:hover{color:#19191a;background-color:#fff;border-color:#0059b3}.bg-dark .btn-primary.focus,.bg-dark .btn-primary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5)}.bg-dark .btn-primary.disabled,.bg-dark .btn-primary:disabled{color:#19191a;background-color:#fff;border-color:#0073e6}.bg-dark .btn-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-primary.dropdown-toggle{color:#19191a;background-color:#fff;border-color:#0053a6}.bg-dark .btn-primary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-primary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.bg-dark .btn-primary.disabled,.bg-dark .btn-primary:disabled,.bg-dark .btn-primary:hover{color:#0059b3}.bg-dark .btn-outline-primary{color:#fff;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff}.bg-dark .btn-outline-primary:hover{color:#e6e6e6;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-primary.focus,.bg-dark .btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary.disabled,.bg-dark .btn-outline-primary:disabled{color:#fff;background-color:transparent}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-primary.dropdown-toggle{color:#e6e6e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary:hover{-webkit-box-shadow:inset 0 0 0 2px #e6e6e6;box-shadow:inset 0 0 0 2px #e6e6e6}.bg-dark .btn-outline-primary.focus,.bg-dark .btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 2px #fff,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 2px #fff,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-primary.dropdown-toggle{-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff}.bg-dark .btn-secondary{background-color:#0073e6;border-color:#fff;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);color:#fff}.bg-dark .btn-secondary:hover{color:#fff;background-color:#0d86ff;border-color:#e6e6e6}.bg-dark .btn-secondary.focus,.bg-dark .btn-secondary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-secondary.disabled,.bg-dark .btn-secondary:disabled{color:#fff;background-color:#0073e6;border-color:#fff}.bg-dark .btn-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-secondary.dropdown-toggle{color:#fff;background-color:#1a8cff;border-color:#dfdfdf}.bg-dark .btn-secondary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary{color:#fff;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:none;box-shadow:none}.bg-dark .btn-outline-secondary:hover{color:#e6e6e6;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-secondary.focus,.bg-dark .btn-outline-secondary:focus{-webkit-box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary.disabled,.bg-dark .btn-outline-secondary:disabled{color:#fff;background-color:transparent}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-secondary.dropdown-toggle{color:#e6e6e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary:hover{-webkit-box-shadow:none;box-shadow:none}.bg-dark .btn-outline-secondary.focus,.bg-dark .btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-secondary.dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.form-group{position:relative;margin-bottom:4px;padding:1.5rem 0 1rem}.form-group button,.form-group input,.form-group optgroup,.form-group select,.form-group textarea{color:#17324d}.form-group label{position:absolute;color:#5c6f82;font-weight:600;line-height:40px;line-height:2.5rem;-webkit-transition:.2s ease-out;transition:.2s ease-out;top:24px;top:1.5rem;font-size:16px;font-size:1rem;cursor:text;display:block;width:100%;padding:0 .75rem;z-index:6}.form-group small.form-text{position:absolute;margin:0;padding:0 .75rem;font-size:12.432px;font-size:.777rem}.form-group.active label{-webkit-transform:translateY(-75%);transform:translateY(-75%);font-size:12.432px;font-size:.777rem}.form-group.active .ico-prefix,.form-group.active label{color:#5c6f82}.form-row .form-group{padding-bottom:0}input[type=date],input[type=datetime-local],input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],select,textarea{border:none;border-bottom:1px solid #5c6f82;border-radius:0;outline:0;height:40px;height:2.5rem;width:100%;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:all .3s;transition:all .3s;font-weight:700}select,textarea{border:1px solid #5c6f82}input[type=file]+label{background-color:transparent}.form-control-plaintext+label,.form-group input.form-control-file+label,.form-group label.active,.form-group select.form-control+label,.input-group+label,.input-group~label,:disabled .form-group label{-webkit-transform:translateY(-75%);transform:translateY(-75%);font-size:12.432px;font-size:.777rem;background:transparent}:disabled .form-group label{top:0}.form-group.active .form-file-name{padding-bottom:1.95rem}.form-control-plaintext{padding:.375rem .75rem;background-color:#fff}.form-control:active,.form-control:focus{-webkit-box-shadow:none!important;box-shadow:none!important}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{background-position:100%!important;background-repeat:no-repeat!important;background-size:45px 45%!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2300cc85' viewBox='0 0 192 512'%3E%3Cpath d='M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z'/%3E%3C/svg%3E")}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{background-position:100%!important;background-repeat:no-repeat!important;background-size:45px 45%!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='0 0 384 512'%3E%3Cpath d='M231.6 256l130.1-130.1c4.7-4.7 4.7-12.3 0-17l-22.6-22.6c-4.7-4.7-12.3-4.7-17 0L192 216.4 61.9 86.3c-4.7-4.7-12.3-4.7-17 0l-22.6 22.6c-4.7 4.7-4.7 12.3 0 17L152.4 256 22.3 386.1c-4.7 4.7-4.7 12.3 0 17l22.6 22.6c4.7 4.7 12.3 4.7 17 0L192 295.6l130.1 130.1c4.7 4.7 12.3 4.7 17 0l22.6-22.6c4.7-4.7 4.7-12.3 0-17L231.6 256z'/%3E%3C/svg%3E")}.custom-select.warning,.form-control.warning{background-position:100%!important;background-repeat:no-repeat!important;background-size:25px 45%!important;border-color:#f90;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f90' viewBox='0 0 192 512'%3E%3Cpath d='M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z'/%3E%3C/svg%3E")}.custom-select.is-valid~.warning-feedback,.form-control.is-valid~.warning-feedback{display:block}.warning-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#f90}.invalid-feedback,.valid-feedback,.warning-feedback{margin-left:.75rem}.form-file input[type=file]{filter:alpha(opacity=0);margin:0;max-width:100%;opacity:0}.form-file .form-file-name{border-bottom:1px solid rgba(0,0,0,.15);border-radius:0;color:#464a4c;left:0;overflow:hidden;padding:.5rem .6rem 2rem;max-height:32px;max-height:2rem;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:5}.form-file .form-file-name,.form-file .form-file-name:before{background-color:#fff;line-height:1.7;position:absolute;right:0;top:0}.form-file .form-file-name:before{bottom:-1px;color:#0073e6;content:"Sfoglia";display:block;height:40px;height:2.5rem;padding:.4rem 1rem 1.5rem;border:1px solid #0073e6;z-index:6;border-top-right-radius:4px}.input-group-text{background-color:#f8f8f8;border:0;border-radius:0!important;border-bottom:1px solid #555}.input-group-prepend{margin-right:0}.input-group-append{margin-left:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:0 1rem;border-radius:0}.ico-prefix{position:absolute;width:48px;width:3rem;font-size:28.8px;font-size:1.8rem;z-index:10;text-align:center}.ico-prefix~.form-file-name{padding-left:3.5rem}.ico-prefix~.select-wrapper .select-dropdown,.ico-prefix~input,.ico-prefix~label,.ico-prefix~textarea{padding-left:3rem}.form-group.active .ico-prefix~label,.ico-prefix~.custom-select~label,.ico-prefix~label.active{padding-left:.75rem}.form-group .form-check,.form-row .form-check,.row .form-check{padding-left:0;margin-top:1rem}.form-check [type=checkbox],.form-check [type=radio]{position:absolute;left:-9999px}.form-check [type=checkbox]+label,.form-check [type=radio]+label{position:relative;padding-left:36px;cursor:pointer;display:inline-block;height:32px;line-height:32px;font-size:16px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-check [type=checkbox]+label:after,.form-check [type=checkbox]+label:before{content:"";left:0;position:absolute;-webkit-transition:.2s;transition:.2s;z-index:1;border-style:solid;border-width:2px}.form-check [type=checkbox]+label:before{top:0;width:17px;height:17px;border:1px solid #e6e9f2;border-radius:1px;margin:2px 5px;-webkit-transform:rotate(37deg);transform:rotate(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.form-check [type=checkbox]+label:after{border-radius:4px;height:20px;width:20px;margin:6px 5px;top:0}.form-check [type=checkbox]:checked+label:before{top:6px;left:1px;width:8px;height:13px;border-color:transparent #fff #fff transparent;border-style:solid;border-width:2px;-webkit-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:.8}.form-check [type=checkbox]:checked+label:after{border-color:#0073e6;background-color:#0073e6;z-index:0}.form-check [type=checkbox]:not(:checked)+label:after{background-color:transparent;border-color:#5c6f82;z-index:0}.form-check [type=checkbox]:not(:checked)+label:before{width:0;height:0;border-color:transparent;left:6px;top:10px}.form-check [type=checkbox]:disabled+label{cursor:not-allowed}.form-check [type=checkbox]:disabled:not(:checked)+label:after{border-color:#e6e9f2;background-color:#fff}.form-check [type=checkbox]:disabled:checked+label:after{background-color:#e6e9f2;border-color:#e6e9f2}.form-check [type=radio]+label{-webkit-transition:.2s ease;transition:.2s ease}.form-check [type=radio]+label:after,.form-check [type=radio]+label:before{content:"";position:absolute;left:0;top:0;margin:5px;width:22px;height:22px;z-index:0;border-radius:50%;border-style:solid;border-width:2px;-webkit-transition:.2s ease;transition:.2s ease}.form-check [type=radio]:not(:checked)+label:after,.form-check [type=radio]:not(:checked)+label:before{border-color:#5c6f82}.form-check [type=radio]:not(:checked)+label:after{z-index:-1;-webkit-transform:scale(0);transform:scale(0)}.form-check [type=radio]:checked+label:after{border-color:#0073e6;background-color:#0073e6;z-index:0;-webkit-transform:scale(.64);transform:scale(.64)}.form-check [type=radio]:checked+label:before{border-color:#0073e6}.form-check [type=radio]:disabled+label{cursor:not-allowed}.form-check [type=radio]:disabled:not(:checked)+label:after,.form-check [type=radio]:disabled:not(:checked)+label:before{border-color:#e6e9f2}.form-check [type=radio]:disabled:checked+label:after{border-color:#e6e9f2;background-color:#e6e9f2}.form-check [type=radio]:disabled:checked+label:before{border-color:#e6e9f2}.form-check.form-check-group{padding:0 0 8px;margin-bottom:16px;-webkit-box-shadow:inset 0 -1px 0 0 rgba(1,1,1,.1);box-shadow:inset 0 -1px 0 0 rgba(1,1,1,.1)}.form-check.form-check-group [type=checkbox]+label,.form-check.form-check-group [type=radio]+label{position:static;padding-left:8px;padding-right:52px}.form-check.form-check-group [type=checkbox]+label:after,.form-check.form-check-group [type=checkbox]+label:before,.form-check.form-check-group [type=radio]+label:after,.form-check.form-check-group [type=radio]+label:before{right:15px;left:auto}.form-check.form-check-group [type=checkbox]:checked+label:before{right:26px}.form-check.form-check-group [type=radio]:checked+label:before{right:15px}.form-check.form-check-group .form-text{opacity:.6;margin:0;padding-left:8px;padding-right:52px}.toggles,.toggles *{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.toggles label{cursor:pointer;width:100%;margin:0 8px 8px;height:32px;line-height:32px;font-weight:700}.toggles label input[type=checkbox]{opacity:0;width:0;height:0}.toggles label input[type=checkbox]+.lever{content:"";position:relative;width:46px;height:16px;background-color:#e6e9f2;border-radius:10px;-webkit-transition:background .3s ease;transition:background .3s ease;vertical-align:middle;float:right;margin:8px 16px 0}.toggles label input[type=checkbox]+.lever:after,.toggles label input[type=checkbox]+.lever:before{content:"";position:absolute;display:inline-block;width:26px;height:26px;border-radius:50%;left:0;top:-5px;left:-3px;-webkit-transition:left .3s ease,background .1s ease,-webkit-transform .1s ease;transition:left .3s ease,background .1s ease,-webkit-transform .1s ease;transition:left .3s ease,background .1s ease,transform .1s ease;transition:left .3s ease,background .1s ease,transform .1s ease,-webkit-transform .1s ease}.toggles label input[type=checkbox]+.lever:before{background-color:rgba(0,115,230,.15)}.toggles label input[type=checkbox]+.lever:after{background-color:#5c6f82;background-size:10px 10px;background-repeat:no-repeat;background-position:50%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='10' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.364 4.95l3.535 3.535L8.485 9.9 4.95 6.364 1.414 9.899 0 8.485 3.536 4.95 0 1.414 1.414 0 4.95 3.536 8.485 0 9.9 1.414 6.364 4.95z' fill='%23FFF' fill-rule='evenodd' opacity='.8'/%3E%3C/svg%3E");border:2px solid #fff}.toggles label input[type=checkbox]:checked+.lever{background-color:#e6e9f2}.toggles label input[type=checkbox]:checked+.lever:after,.toggles label input[type=checkbox]:checked+.lever:before{left:23px}.toggles label input[type=checkbox]:checked+.lever:after{background-color:#0073e6;background-size:14px 14px;background-repeat:no-repeat;background-position:50%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='14' height='11' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.879 7.536l7.07-7.072 1.415 1.415-7.071 7.07-1.414 1.415L.636 6.121 2.05 4.707 4.88 7.536z' fill='%23FFF' fill-rule='evenodd' opacity='.5'/%3E%3C/svg%3E")}.toggles label input[type=checkbox][disabled]+.lever{cursor:default;background-color:#e6e9f2}.toggles label input[type=checkbox][disabled]+.lever:after,.toggles label input[type=checkbox][disabled]:checked+.lever:after{background-color:#e6e9f2}.select-wrapper{position:relative}.select-wrapper .search-wrap input{width:100%;border:none;border-bottom:1px solid #0073e6;font-size:14.4px;font-size:.9rem;padding:0 .5em}.select-wrapper .dropdown-menu{background-color:#fff;border-radius:0;-webkit-box-shadow:0 2px 4px 3px rgba(0,0,0,.1);box-shadow:0 2px 4px 3px rgba(0,0,0,.1);margin:0;display:none;min-width:100px;max-height:240px;overflow-y:auto;position:absolute;padding:.3rem;z-index:999;will-change:width,height;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.select-wrapper .dropdown-menu.show{display:block}.select-wrapper .dropdown-menu li{clear:both;color:#000;cursor:pointer;line-height:32px;width:100%;text-align:left;text-transform:none}.select-wrapper .dropdown-menu li.optgroup>span{color:#ccc;padding:0}.select-wrapper .dropdown-menu li:not(.disabled):focus,.select-wrapper .dropdown-menu li:not(.disabled):hover{background-color:#eee}.select-wrapper .dropdown-menu li.active>span:after{content:"";background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNDQ4LjggNDQ4LjgiPjxwYXRoIGZpbGw9IiMwMDZERjAiIGQ9Ik0xNDIuOCAzMjMuODVMMzUuNyAyMTYuNzUgMCAyNTIuNDVsMTQyLjggMTQyLjggMzA2LTMwNi0zNS43LTM1Ljd6Ii8+PC9zdmc+");background-size:16px 16px;background-repeat:no-repeat;background-position:50%;float:right;display:block;height:32px;width:16px;opacity:.5}.select-wrapper .dropdown-menu li>a,.select-wrapper .dropdown-menu li>span{font-size:14px;color:#5c6f82;font-weight:600;display:block;padding:0 .5rem}.select-wrapper .dropdown-menu li>a.filtrable label,.select-wrapper .dropdown-menu li>a [type=checkbox],.select-wrapper .dropdown-menu li>span.filtrable label,.select-wrapper .dropdown-menu li>span [type=checkbox]{display:none}.select-wrapper .dropdown-menu li.disabled>span{cursor:unset;color:#ccc}.select-wrapper .dropdown-menu li>a>i{height:inherit;line-height:inherit}.select-wrapper .select-dropdown{color:#17324d;border-bottom:1px solid #5c6f82;position:relative;cursor:pointer;background-color:transparent;outline:0;width:100%;font-size:16px;font-size:1rem;margin:0 0 15px;display:block;line-height:24px;padding:12px 38px 12px 16px}.select-wrapper .select-dropdown:disabled{color:rgba(0,0,0,.3);border-bottom-color:rgba(0,0,0,.3);cursor:default}.select-wrapper .select-dropdown ul{list-style-type:none;padding:0}.select-wrapper .select-dropdown ul li.disabled,.select-wrapper .select-dropdown ul li.disabled>span,.select-wrapper .select-dropdown ul li.optgroup{color:rgba(0,0,0,.3);background-color:transparent!important;cursor:context-menu}.select-wrapper .select-dropdown ul li.optgroup{border-top:1px solid #eee}.select-wrapper .select-dropdown ul li.optgroup.selected>span{color:rgba(0,0,0,.7)}.select-wrapper .select-dropdown ul li.optgroup>span{color:rgba(0,0,0,.4)}.select-wrapper .caret{color:#757575;position:absolute;right:12px;line-height:16px;top:calc(50% - 8px)}.select-wrapper .caret .disabled{color:rgba(0,0,0,.46)}.select-wrapper.show .select-dropdown{color:#0073e6;border-bottom:1px solid #0073e6}.select-wrapper.show .caret{color:#0073e6}.select-wrapper+label{padding:0 .75rem!important;position:absolute;top:-18px;font-size:12.8px;font-size:.8rem}.select-wrapper select.custom-select{display:none!important}.select-wrapper select:disabled{color:rgba(0,0,0,.3)}.btn-eye{background-position:50%!important;background-repeat:no-repeat!important;width:28px;height:22px;position:absolute;right:8px;right:.5rem;top:36px;top:2.25rem;z-index:10;color:#5c6f82;cursor:pointer}.eye-on{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 576 512'%3E%3Cpath d='M272.702 359.139c-80.483-9.011-136.212-86.886-116.93-167.042l116.93 167.042zM288 392c-102.556 0-192.092-54.701-240-136 21.755-36.917 52.1-68.342 88.344-91.658l-27.541-39.343C67.001 152.234 31.921 188.741 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.004 376.006 168.14 440 288 440a332.89 332.89 0 0 0 39.648-2.367l-32.021-45.744A284.16 284.16 0 0 1 288 392zm281.354-111.631c-33.232 56.394-83.421 101.742-143.554 129.492l48.116 68.74c3.801 5.429 2.48 12.912-2.949 16.712L450.23 509.83c-5.429 3.801-12.912 2.48-16.712-2.949L102.084 33.399c-3.801-5.429-2.48-12.912 2.949-16.712L125.77 2.17c5.429-3.801 12.912-2.48 16.712 2.949l55.526 79.325C226.612 76.343 256.808 72 288 72c119.86 0 224.996 63.994 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM528 256c-44.157-74.933-123.677-127.27-216.162-135.007C302.042 131.078 296 144.83 296 160c0 30.928 25.072 56 56 56s56-25.072 56-56l-.001-.042c30.632 57.277 16.739 130.26-36.928 171.719l26.695 38.135C452.626 346.551 498.308 306.386 528 256z'/%3E%3C/svg%3E")}.eye-off{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 576 512'%3E%3Cpath d='M569.354 231.631C512.97 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-102.556 0-192.091-54.701-240-136 44.157-74.933 123.677-127.27 216.162-135.007C273.958 131.078 280 144.83 280 160c0 30.928-25.072 56-56 56s-56-25.072-56-56l.001-.042C157.794 179.043 152 200.844 152 224c0 75.111 60.889 136 136 136s136-60.889 136-136c0-31.031-10.4-59.629-27.895-82.515C451.704 164.638 498.009 205.106 528 256c-47.908 81.299-137.444 136-240 136z'/%3E%3C/svg%3E")}.psw-wrapper{padding:0 .75rem}.psw-meter{height:3px;max-width:180px}.psw-meter .col-3{height:3px}.psw-percent,.psw-text{font-size:12px;font-size:.75rem;display:block;padding:.25rem 0;font-weight:500}.psw-percent{margin-right:5px}@-webkit-keyframes dropdownFadeIn{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:16px}}@keyframes dropdownFadeIn{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:16px}}@-webkit-keyframes dropdownFadeInTop{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:-16px}}@keyframes dropdownFadeInTop{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:-16px}}.btn-dropdown{color:#06c;padding:0 4px;background-color:transparent;font-size:16px;font-size:1rem;border-radius:0}.btn-dropdown:not(:disabled):not(.disabled):active{-webkit-box-shadow:none;box-shadow:none}.btn-dropdown:after{content:"";font-size:12.8px;font-size:.8rem;font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;border:none;display:inline-block;vertical-align:0;width:auto;height:auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.btn-dropdown[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.dropdown-menu{border-radius:0 0 4px 4px}.dropdown-menu.full-width{width:100%}.dropdown-menu.full-width .link-list li{display:inline-block;width:auto}.dropdown-menu.full-width .link-list li:focus,.dropdown-menu.full-width .link-list li:hover{background:none;text-decoration:underline}.dropdown-menu .link-list{margin-bottom:0}.dropdown-menu .link-list h3{line-height:2.3em;margin-bottom:0}.dropdown-menu:before{content:"";position:absolute;top:-6px;left:24px;width:18px;height:18px;border-radius:4px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.dropdown-menu[x-placement=top-start]{border-radius:4px 4px 0 0}.dropdown-menu[x-placement=top-start]:before{bottom:-6px;top:auto}.dropdown-menu.dark{background-color:#435a70}.dropdown-menu.dark .link-list-wrapper ul span.divider{background:#2e465e}.dropdown-menu.dark .link-list-wrapper ul li a:hover span,.dropdown-menu.dark .link-list-wrapper ul li a span,.dropdown-menu.dark .link-list-wrapper ul li h3,.dropdown-menu.dark .link-list-wrapper ul li i{color:#fff}.dropdown-menu.dark .link-list-wrapper ul li a:not(.active):not(.disabled):hover i{color:#4fe0dc}.dropdown-menu.dark .link-list-wrapper ul li a.disabled span{color:#adb2b8}.dropdown-menu.dark:before{background-color:#435a70}nav.pagination-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination-wrapper,nav.pagination-wrapper.pagination-total{-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}nav.pagination-wrapper.pagination-total{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination-wrapper.pagination-total ul{margin-bottom:.5rem}nav.pagination-wrapper.pagination-total p{font-size:14.222px;font-size:.8888888889rem;color:#5b6f82;margin-bottom:1rem;font-weight:600;text-align:center}nav.pagination-wrapper .form-group{margin-left:2.5rem;width:72px;width:4.5rem;margin-top:0}nav.pagination-wrapper .form-group label{font-size:14.222px;font-size:.8888888889rem;color:#9da2a6}nav.pagination-wrapper .form-group.active label{font-size:12.8px;font-size:.8rem}nav.pagination-wrapper .btn.dropdown-toggle{font-size:14.222px;font-size:.8888888889rem;color:#5b6f82;font-weight:600;padding:12px;height:40px;height:2.5rem;border:none;width:100%}nav.pagination-wrapper .btn.dropdown-toggle:after{color:#0073e6;margin-left:.5rem}.pagination{-ms-flex-wrap:wrap;flex-wrap:wrap}.pagination .page-item{margin-right:5px}.pagination .page-item.disabled a.page-link,.pagination .page-item.disabled a.page-link i[class^=it-]{color:#c2c7cc}.pagination .page-item span.page-link{pointer-events:none}.pagination .page-item .page-link{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:40px;height:2.5rem;min-width:40px;min-width:2.5rem;border-radius:4px;border:none;font-size:14.222px;font-size:.8888888889rem;font-weight:600;color:#5b6f82;background-color:transparent}.pagination .page-item .page-link[aria-current]{border:1px solid #06c;color:#06c;pointer-events:none}.pagination .page-item .page-link.text,.pagination .page-item .page-link i[class^=it-]{color:#0073e6}.pagination .page-item .page-link i[class^=it-]{font-size:11.2px;font-size:.7rem}.pagination .page-item .page-link span.d-inline-block{margin-right:.5rem}.pagination .page-item .page-link:hover{color:#06c;background-color:transparent}.pagination .page-item .page-link:hover i[class^=it-]{color:#06c}@media (min-width:576px){.pagination .page-item .page-link{height:2.6666666667rem;min-width:2.6666666667rem}nav.pagination-wrapper .btn.dropdown-toggle{height:2.6666666667rem}}@media (min-width:768px){nav.pagination-wrapper{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}nav.pagination-wrapper .dropdown{margin-left:2.6666666667rem}}@media (max-width:767.98px){.offcanvas-collapse{position:fixed;top:56px;bottom:0;left:1em;width:100%;overflow-y:auto;background-color:#323333;-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out;-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-collapse.open{-webkit-transform:translateX(-1rem);transform:translateX(-1rem)}}.nav-tabs{position:relative;background-color:#fff;border-bottom:0}.nav-tabs:after{content:"";position:absolute;z-index:-1;-webkit-box-shadow:0 0 2rem rgba(0,0,0,.15);box-shadow:0 0 2rem rgba(0,0,0,.15);bottom:0;left:10%;right:10%;width:80%;height:50%;border-radius:100%}.nav-tabs .nav-link{border-radius:0;font-weight:600;color:#5c6f82;border:none;border-bottom:2px solid transparent}.nav-tabs .nav-link.disabled{color:#b1b1b3;font-weight:400}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{border-bottom:2px solid #06c;color:#06c;cursor:inherit}.nav-tabs .nav-item{margin-bottom:0}.nav-tabs.nav-dark{background-color:#455b71}.nav-tabs.nav-dark .nav-link{color:#c7d1d0}.nav-tabs.nav-dark .nav-item.show .nav-link,.nav-tabs.nav-dark .nav-link.active{background-color:#455b71;color:#00fff7;border-bottom:2px solid #00fff7}.it-ico-sm{font-size:28px;font-size:1.75rem}.it-ico{font-size:20px;font-size:1.25rem}.it-ico-lg{font-size:24px;font-size:1.5rem}.cookiebar{bottom:0;left:0;right:0;display:none;position:fixed;width:100%;z-index:1100}.cookiebar.cookiebar-top{bottom:auto;top:0}.cookiebar.show{display:block}.hero{padding:1rem;margin-bottom:1rem;background-color:#cacacc;border-radius:0}@media (min-width:576px){.hero{padding:1rem}}.hero .hero-heading{font-size:32px;font-size:2rem;font-weight:700;color:#00264d;margin-bottom:.8rem}.hero-fluid{padding-right:0;padding-left:0;border-radius:0}.forward{display:block;text-align:center;font-size:48px;font-size:3rem;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.forward:hover{text-decoration:none}.return-to-top{position:fixed;bottom:16px;right:16px;background:#0073e6;background:rgba(0,115,230,.7);width:48px;height:48px;display:block;text-decoration:none;border-radius:50%;display:none;text-align:center;z-index:1}.return-to-top,.return-to-top i{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.return-to-top i{color:#fff;margin:0;position:relative;top:8px;font-size:20px}.return-to-top i:before{margin:0}.return-to-top:hover{background:rgba(0,115,230,.9);text-decoration:none}.return-to-top:hover i{color:#fff;top:4px}.autocomplete-clear{visibility:hidden;position:absolute;z-index:2;right:4px;right:.25rem;top:8px;top:.5rem;background:transparent;border:none;cursor:pointer}.autocomplete-clear svg{fill:#a6a6a6}.autocomplete-wrap{position:absolute;left:0;right:0;background:#fff;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.25);box-shadow:0 2px 5px rgba(0,0,0,.25);z-index:100;max-height:240px;overflow-y:auto;padding-left:0;list-style-type:none}.autocomplete-wrap li{cursor:pointer;padding:12px 16px;font-size:14px;font-size:.875rem}.autocomplete-wrap li:hover{background:#eee}.link-list-wrapper ul{padding:0;list-style-type:none}.link-list-wrapper ul.link-sublist{padding-left:24px}.link-list-wrapper ul li a{font-size:.889em;line-height:2.3em;display:block;padding:0 24px;position:relative}.link-list-wrapper ul li a:hover:not(.disabled){text-decoration:none}.link-list-wrapper ul li a:hover:not(.disabled) span{color:#06c;text-decoration:underline}.link-list-wrapper ul li a:hover:not(.disabled) p{color:#06c;text-decoration:none}.link-list-wrapper ul li a.disabled:hover{text-decoration:none}.link-list-wrapper ul li a.medium{font-weight:600}.link-list-wrapper ul li a span{color:#06c;display:block;margin-right:24px}.link-list-wrapper ul li a.right-icon i.right{position:absolute;top:0;right:24px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.link-list-wrapper ul li a.right-icon i.right.secondary{color:#9da2a6}.link-list-wrapper ul li a.right-icon[aria-expanded=true] i.right{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.link-list-wrapper ul li a.active span{color:#17324d;text-decoration:underline}.link-list-wrapper ul li a.disabled{cursor:not-allowed}.link-list-wrapper ul li a.disabled.left-icon i,.link-list-wrapper ul li a.disabled.left-icon i.secondary,.link-list-wrapper ul li a.disabled.right-icon i,.link-list-wrapper ul li a.disabled.right-icon i.secondary,.link-list-wrapper ul li a.disabled span{color:#adb2b8}.link-list-wrapper ul li a.left-icon{display:-webkit-box;display:-ms-flexbox;display:flex}.link-list-wrapper ul li a.left-icon i.left{margin-right:8px}.link-list-wrapper ul li a.large{font-size:1em}.link-list-wrapper ul li a p{font-size:.778em;line-height:normal;color:#5b6f82}.link-list-wrapper ul li a.avatar{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:8px}.link-list-wrapper ul li a.avatar .avatar{display:block;border-radius:50px;margin-right:8px}.link-list-wrapper ul li h3{font-size:1em;color:#17324d;padding:0 24px}.link-list-wrapper ul li h3 a{line-height:inherit;font-size:1em;padding:0}.link-list-wrapper ul .divider{display:block;height:1px;background:#ebeced;margin:8px 0}.link-list-wrapper ul .toggles label{padding:0 24px;font-size:.889em;line-height:2.3em;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:auto;font-weight:inherit;margin:0}.link-list-wrapper ul .toggles input[type=checkbox]+.lever{margin:8px 0 0}.link-list-wrapper ul .form-check.form-check-group{padding:0 24px;-webkit-box-shadow:none;box-shadow:none}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label{padding-left:0;font-size:.889em;line-height:2.3em;height:inherit;margin-bottom:0}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label:after{right:24px}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label:before{right:35px}.link-list-wrapper ul .form-check.form-check-group [type=checkbox][disabled]+label{color:#adb2b8}@media (min-width:576px){.link-list-wrapper ul li a.large{font-size:1em;line-height:2.7em}}@media (min-width:768px){.link-list-wrapper ul li a.large{line-height:2.7em}}@-webkit-keyframes megamenuFadeIn{0%{opacity:0;margin-top:16px}to{opacity:1;margin-top:16px}}@keyframes megamenuFadeIn{0%{opacity:0;margin-top:16px}to{opacity:1;margin-top:16px}}.navbar{background:#06c}.navbar .navbar-collapsable{position:fixed;top:0;right:0;left:0;bottom:0;z-index:10;background:rgba(0,0,0,.6);display:none}.navbar .navbar-collapsable .menu-wrapper{background:#06c;position:absolute;top:0;bottom:0;right:0;left:48px;pointer-events:all;overflow-y:auto;-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:all .3s;transition:all .3s}.navbar .navbar-collapsable .navbar-nav{margin-top:102px;padding:24px 0}.navbar .navbar-collapsable .navbar-nav li a.nav-link{color:#fff;font-weight:400;padding:12px 24px;position:relative}.navbar .navbar-collapsable .navbar-nav li a.nav-link.active{border-left:2px solid #fff}.navbar .navbar-collapsable.expanded .close-div,.navbar .navbar-collapsable.expanded .menu-wrapper{-webkit-transform:translateX(0);transform:translateX(0)}.navbar .close-div{-webkit-transform:translateX(100%);transform:translateX(100%);padding:24px;position:fixed;left:48px;right:0;top:0;background:#06c;z-index:10;-webkit-transition:all .3s;transition:all .3s}.navbar .close-div .close-menu{background:transparent;color:#fff;text-align:center;font-size:.75em;text-transform:uppercase;padding:0}.navbar .close-div .close-menu span{display:block;text-align:center;font-size:2em}.navbar .close-div .close-menu span:before{margin-right:0}.navbar .dropdown-menu{background:transparent;-webkit-box-shadow:none;box-shadow:none}.navbar .dropdown-menu:before{display:none}.navbar .dropdown-menu .link-list-wrapper{padding-left:24px;padding-right:24px}.navbar .dropdown-menu .link-list-wrapper ul li a h3,.navbar .dropdown-menu .link-list-wrapper ul li a span,.navbar .dropdown-menu .link-list-wrapper ul li h3{color:#fff}.navbar .dropdown-toggle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar .dropdown-toggle:after{font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:auto;height:auto;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;content:"\e818";vertical-align:auto;border:none;border-bottom:0;font-size:.8em;line-height:2em;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:all .3s;transition:all .3s}.navbar .dropdown-toggle[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.custom-navbar-toggler{background:none;border:none}.custom-navbar-toggler span{color:#fff;font-size:1.625em}.inline-menu .link-list-wrapper .link-list,.inline-menu .link-list-wrapper .link-list li a{position:relative}.inline-menu .link-list-wrapper .link-list li a i{color:#6aaaeb}.inline-menu .link-list-wrapper .link-list li a:after{content:"";display:block;width:2px;background:#06c;position:absolute;right:0;top:0;height:100%;-webkit-transform-origin:center;transform-origin:center;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:all .3s;transition:all .3s;z-index:1}.inline-menu .link-list-wrapper .link-list li a.active span{color:#06c;text-decoration:none}.inline-menu .link-list-wrapper .link-list li a[aria-expanded=true]:after{-webkit-transform:scaleY(1);transform:scaleY(1)}.inline-menu .link-list-wrapper .link-list:after{content:"";display:block;width:2px;background:-webkit-gradient(linear,left top,left bottom,from(#e6ecf2),to(rgba(230,236,242,.3)));background:linear-gradient(180deg,#e6ecf2 0,rgba(230,236,242,.3));position:absolute;right:0;top:0;height:100%}@media (min-width:992px){.navbar{background:#06c;padding:0}.navbar .navbar-collapsable{position:relative;z-index:auto;background:none;display:block!important}.navbar .navbar-collapsable,.navbar .navbar-collapsable .menu-wrapper{top:auto;right:auto;left:auto;bottom:auto;-webkit-transition:none;transition:none}.navbar .navbar-collapsable .menu-wrapper{position:inherit;overflow-y:visible;-webkit-transform:none;transform:none}.navbar .navbar-collapsable .navbar-nav{margin-top:0;padding:0 24px}.navbar .navbar-collapsable .navbar-nav li a.nav-link{font-weight:400;padding:12px 24px}.navbar .navbar-collapsable .navbar-nav li a.nav-link.active{border-left:0;border-bottom:2px solid #fff}.navbar .navbar-collapsable .navbar-nav li a.nav-link.disabled{opacity:.5;cursor:not-allowed}.navbar .close-div{display:none}.navbar .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#19191a;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:0 solid transparent;border-radius:4px;-webkit-box-shadow:0 0 30px 5px rgba(0,0,0,.05);box-shadow:0 0 30px 5px rgba(0,0,0,.05)}.navbar .dropdown-menu.show{-webkit-animation:dropdownFadeIn .3s forwards;animation:dropdownFadeIn .3s forwards;top:calc(100% - 16px)}.navbar .dropdown-menu:before{display:block}.navbar .dropdown-menu .link-list-wrapper{padding-left:0;padding-right:0}.navbar .dropdown-menu .link-list-wrapper ul li a h3,.navbar .dropdown-menu .link-list-wrapper ul li a span{color:#06c}.navbar .dropdown-menu .link-list-wrapper ul li h3{color:#19191a}.navbar .dropdown-toggle{display:block;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit}.navbar .dropdown-toggle:after{content:"";font-size:.8rem;font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;border:none;display:inline-block;vertical-align:0;width:auto;height:auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.navbar.megamenu .navbar-collapsable{width:100%}.navbar.megamenu .navbar-collapsable .nav-item{position:static}.navbar.megamenu .navbar-collapsable .nav-item a{position:relative}.navbar.megamenu .navbar-collapsable .nav-item a:before{content:"";position:absolute;top:auto;bottom:-12px;left:24px;width:18px;height:18px;border-radius:4px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0;-webkit-transition:opacity .3s;transition:opacity .3s}.navbar.megamenu .navbar-collapsable .nav-item.show a:before{opacity:1}.navbar.megamenu .navbar-collapsable .dropdown-menu{min-width:auto;left:24px;right:24px}.navbar.megamenu .navbar-collapsable .dropdown-menu:before{display:none}.navbar.megamenu .navbar-collapsable .dropdown-menu.show{-webkit-animation:megamenuFadeIn .3s forwards;animation:megamenuFadeIn .3s forwards}.custom-navbar-toggler{display:none}}.skiplinks{background-color:#0bd9d2;text-align:center}.skiplinks a{display:inline-block;padding:.5rem;display:block;font-weight:600;color:#5b6f82;text-decoration:underline}.componente-base{background-color:#0073e6;color:#fff;cursor:pointer;padding:8px}.focus--keyboard,.form-check [type=checkbox]:focus+label,.toggles label input[type=checkbox]:focus+.lever{border-color:#f90;-webkit-box-shadow:0 0 6px 2px #f90;box-shadow:0 0 6px 2px #f90;outline:none}.focus--mouse,.form-check [type=checkbox]:focus.focus--mouse+label,.toggles label input[type=checkbox]:focus.focus--mouse+.lever{border-color:inherit;-webkit-box-shadow:none;box-shadow:none;outline:none}.bg-primary--dark{background-color:#06c}.bg-primary--mid-dark{background-color:#004e95}.bg-primary--darken{background-color:#002b4d}.text-grey{color:#ccc}.text-sans-serif{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.text-serif{font-family:Lora,serif}.text-light-blue{color:#e6f3fe}.text-blue{color:#0073e6}.border-dark-blue{border-color:#193e5e!important}.border-medium-blue{border-color:#06c!important}.border-grey-light{border-color:#eaebed!important}.border-width-2{border-width:2px!important}.stopScrolling--vertical{overflow-y:hidden}.deactive{display:none!important}@font-face{font-family:docs-icons;src:url(../font/docs.eot);src:url(../font/docs-italia.eot#iefix) format("embedded-opentype"),url(../font/docs-italia.ttf) format("truetype"),url(../font/docs-italia.woff) format("woff"),url(../font/docs-italia.svg#docs) format("svg");font-weight:400;font-style:normal}[class*=" docs-icon-"],[class^=docs-icon-]{font-family:docs-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:middle;color:inherit;font-size:20.8px;font-size:1.3rem;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.docs-icon-more:before{content:""}.docs-icon-expand:before{content:""}.docs-icon-collapse:before{content:""}.docs-icon-plus:before{content:""}.docs-icon-minus:before{content:""}.docs-icon-document:before{content:""}.docs-icon-edit:before{content:""}.docs-icon-download:before{content:""}.docs-icon-info:before{content:""}.docs-icon-compare:before{content:""}.docs-icon-github:before{content:""}.docs-icon-share:before{content:""}.docs-icon-search:before{content:""}.docs-icon-link:before{content:""}.docs-icon-external-link:before{content:""}.docs-icon-comment:before{content:""}.docs-icon-attention:before,.docs-icon-warning:before{content:""}.docs-icon-example:before{content:""}.docs-icon-procedure:before{content:""}.docs-icon-hint:before{content:""}.docs-icon-note:before{content:""}.docs-icon-step:before{content:""}.docs-icon-pdf:before{content:""}.docs-icon-html:before{content:""}.docs-icon-project:before{content:""}.docs-icon-publisher:before{content:""}.docs-icon-docs:before{content:""}.docs-icon-user:before{content:""}.small{font-size:14px}.navbar-dark--text-white{color:#fff}.navbar-dark .lang-selector .nav-link,.navbar-dark .navbar-nav .nav-link{color:#fff!important}.navbar.bg-white{background-color:#fff}.navbar.primary-bg-a7{background-color:#0059b3}@media (min-width:992px){.dropdown-menu.dropdown-menu-right:before{right:24px;left:auto}}@media (min-width:992px){.navbar .dropdown-menu.dropdown-menu-right{left:auto;right:0}}@media (max-width:991.98px){.dropdown-menu-right{right:auto;left:auto}}.btn-group.show .dropdown-menu[x-placement=bottom-start],.dropdown.show .dropdown-menu[x-placement=bottom-start]{-webkit-animation:dropdownFadeIn .3s forwards;animation:dropdownFadeIn .3s forwards}.btn-group.show .dropdown-menu[x-placement=top-start],.dropdown.show .dropdown-menu[x-placement=top-start]{-webkit-animation:dropdownFadeInTop .3s forwards;animation:dropdownFadeInTop .3s forwards}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-menu:before{z-index:-1}.injected{display:none}body{color:#596771;background-color:#002b4d}body.no-scroll{overflow-y:hidden}p{font-family:Lora,serif}h1,h2,h3,h4,h5{color:#000;margin-bottom:2rem}img{max-width:100%;height:auto}.container-fluid--desktop{max-width:1450px}@-webkit-keyframes pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}@keyframes pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}.loading{overflow:hidden}.loading:after{position:absolute;background:#0073e6;height:100%;width:100%;z-index:10;content:"";left:0;top:0}.loading:before{border:5px solid #fff;margin:-15px 0 0 -15px;border-radius:30px;position:absolute;content:"";z-index:11;height:30px;left:50%;top:50%;opacity:0;width:30px;-webkit-animation:pulsate 1s ease-out;animation:pulsate 1s ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.loading.no-bg:after{background:none;position:relative}.dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}.dropdown-menu .dropdown-item{color:#0073e6}.dropdown-menu .dropdown-item.active,.dropdown-menu .dropdown-item:active{font-weight:600;text-decoration:inherit;background-color:inherit}#version-list .dropdown-toggle .current-version{max-width:8em;text-overflow:ellipsis;overflow:hidden;display:inline-block;font-size:inherit;font-weight:400}#version-list .version-list-wrapper{max-height:10.2em;max-width:18em;overflow-y:scroll}#version-list .dropdown-item{text-overflow:ellipsis;max-width:16em;overflow-x:hidden}.document-actions .dropdown-toggle:after{vertical-align:middle;line-height:1.5}@media (max-width:767.98px){.document-actions .dropdown-toggle:after{font-family:italia-icon-font!important;border:none;margin:0 2em 0 0;width:auto;height:auto;float:right;content:"\e818";vertical-align:middle;font-size:.8em;line-height:2em;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:all .3s;transition:all .3s}.document-actions .dropdown-toggle[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.document-actions .dropdown-toggle:hover{text-decoration:none}.document-actions .dropdown-menu.show{position:static!important;-webkit-transform:none!important;transform:none!important;-webkit-box-shadow:none;box-shadow:none;padding:0;margin-top:16px;-webkit-animation:none;animation:none}.document-actions .dropdown-menu.show:before{display:none}}.header{font-size:16px;font-size:1rem}.header .navbar-brand{font-size:14.224px;font-size:.889rem;font-weight:600}.header .navbar-brand a{text-decoration:none}.header .navbar .dropdown-toggle:after{margin:0 .2rem;font-size:11.2px;font-size:.7rem}.header .nav-item{margin-left:.2rem}@media (min-width:992px){.header .nav-item{border-left:0;margin-left:0}}.header .nav-item.active{font-weight:600}.header .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.header .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-left:.2rem solid #fff;margin-left:0}@media (min-width:992px){.header .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.header .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-left:0;margin-left:0;border-bottom:2px solid #fff;margin-bottom:0}}.slim-header{font-size:14.224px;font-size:.889rem}.slim-header .navbar-toggler .navbar__icon{font-size:11.2px;font-size:.7rem;line-height:3em;display:inline-block;-webkit-transform:scaleY(-1);transform:scaleY(-1);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.slim-header .navbar-toggler.collapsed .navbar__icon{-webkit-transform:scaleY(1);transform:scaleY(1)}.slim-header .navbar-toggler .dropdown-toggle:after{content:""}.slim-header.navbar .divider{border-top:.05rem solid #799ebc;padding-right:1px;width:10%;margin-top:.75rem;margin-bottom:1rem;margin-left:.2rem;padding-bottom:1px}.slim-header.navbar .divider:first-child{margin-top:1px}.slim-header.navbar .divider.divider--w-100{width:100%}@media (min-width:992px){.slim-header.navbar .divider.divider--w-100{width:inherit}}@media (min-width:992px){.slim-header.navbar .divider{border-top:0;width:inherit;margin-top:inherit;margin-bottom:inherit;border-right:.05rem solid #06c;padding-right:1px;margin-left:0}}.secondary-nav{font-weight:600}@media (max-width:991.98px){.secondary-nav.secondary-nav--offcanvas{-webkit-transform:translateX(-100%);transform:translateX(-100%);z-index:10;background-color:#fff;color:#06c;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;position:fixed;top:0;left:0;bottom:0;right:25%;overflow-y:auto}.secondary-nav.secondary-nav--offcanvas.active{-webkit-transform:translateX(0);transform:translateX(0)}}.secondary-nav .navbar-nav li{padding:.5rem;border-bottom:.2rem solid transparent}.secondary-nav .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.secondary-nav .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-bottom:.2rem solid #fff}@media (max-width:991.98px){.article-intro-more .dropdown.show:before{content:"";width:100vw;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.5);z-index:999}}.article-intro-more .dropdown .dropdown-toggle:after{display:none}.article-intro-more .dropdown .dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}@media (max-width:991.98px){.article-intro-more .dropdown .dropdown-menu{position:fixed!important;z-index:1001!important;top:calc(50% - 140px)!important;left:calc(50% - 140px)!important;-webkit-transform:none!important;transform:none!important}.article-intro-more .dropdown .dropdown-menu:before{display:none}}.article-intro-more .dropdown .dropdown-menu .dropdown-item{color:#0073e6}@media (max-width:991.98px){.lang-selector .dropdown.show:before{content:"";width:100vw;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.5);z-index:999}}.lang-selector .dropdown .dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}@media (max-width:991.98px){.lang-selector .dropdown .dropdown-menu{position:fixed!important;z-index:1001!important;top:calc(50% - 80px)!important;left:calc(50% - 80px)!important;-webkit-transform:none!important;transform:none!important}.lang-selector .dropdown .dropdown-menu:before{display:none}}.lang-selector .dropdown .dropdown-menu .dropdown-item{color:#0073e6}.lang-selector .dropdown .dropdown-menu .dropdown-item.active,.lang-selector .dropdown .dropdown-menu .dropdown-item:active{font-weight:600;text-decoration:inherit;background-color:inherit}.h1--header{font-size:21.328px;font-size:1.333rem;font-weight:600;line-height:1.2;letter-spacing:unset}@media (min-width:576px){.h1--header{font-size:1.8rem}}.h1--header span{font-size:11.2px;font-size:.7rem;font-weight:400}.svg--header{width:39px;height:36px}@media (min-width:576px){.svg--header{width:65px;height:60px}}.h2--header{font-size:14px;font-weight:300;letter-spacing:unset}.docs__document-info{color:#fff;font-size:14.4px;font-size:.9rem;vertical-align:bottom}.docs__document-info .docs__document-info__icon{font-size:19.2px;font-size:1.2rem;vertical-align:bottom}.docs__document-info .docs__document-info__ownership .docs__document-info__label{font-size:12.8px;font-size:.8rem}.docs__document-info .docs__document-info__ownership .docs__document-info__icon{font-size:16px;font-size:1rem}.doc-header{-webkit-box-shadow:0 0 120px 0 rgba(0,0,0,.1);box-shadow:0 0 120px 0 rgba(0,0,0,.1);position:relative;z-index:10;color:#0073e6;font-size:16px;font-weight:600}.doc-header .progress-container{width:100%;height:4px;height:.25rem;background:#e6f3fe}.doc-header .progress-bar{height:4px;height:.25rem;background:#06c;width:0}.docs-italia #cerca{border:1px solid #ccc;font-size:12.8px;font-size:.8rem;font-weight:100}.docs-italia #cerca::-webkit-input-placeholder{color:#ccc}.docs-italia #cerca::-moz-placeholder{color:#ccc}.docs-italia #cerca::-ms-input-placeholder{color:#ccc}.docs-italia #cerca::placeholder{color:#ccc}.social{color:#fff}.social .social__label{font-size:15.2px;font-size:.95rem}.social .social__link{color:#fff;font-size:16px;font-size:1rem}.social .social__link:active,.social .social__link:hover{text-decoration:none}#rtd-search-form{border:1px solid #ccc}#rtd-search-form input[type=text]{border:none;height:100%}#rtd-search-form .input-group-append button{background-color:#fff}#rtd-search-form .input-group-append button .docs-icon-search{font-size:19.2px;font-size:1.2rem}#documentInfo .tag{font-family:Titillium Web,Geneva,Tahoma,sans-serif}.offcanvas-menu{position:fixed;z-index:1000;width:100vw;height:100vh;top:0;left:0;right:0;bottom:0}.offcanvas-menu.animate--left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-transition:-webkit-transform .4s;transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}.offcanvas-menu.js-active{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .8s;transition:-webkit-transform .8s;transition:transform .8s;transition:transform .8s,-webkit-transform .8s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}.offcanvas-menu .offcanvas-menu__inner{width:80%;background-color:#fff;height:100vh;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:all .5s ease-out;transition:all .5s ease-out}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__header{padding:1.5rem 1.8rem 1rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__header .offcanvas-menu__title{font-weight:600;font-size:19.2px;font-size:1.2rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav{padding:.5rem 0 0;margin:0}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item{list-style:none;margin:0;padding:.5rem 1rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:first-child,.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:nth-child(4){position:relative}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:first-child:before,.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:nth-child(4):before{content:"";width:64px;height:1px;left:32px;left:2rem;border-top:1px solid rgba(0,102,204,.2);position:absolute;top:0}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item .offcanvas-menu__nav__link{padding:.5rem 1rem;font-size:16px;font-size:1rem;display:block}.offcanvas-menu.deactive .offcanvas-menu__inner{margin-left:-80%;overflow:hidden}.offcanvas-menu .offcanvas-menu__extra{width:20%;height:100vh;position:fixed;right:0;top:0}body:before{position:fixed;top:0;left:0;z-index:999;bottom:0;right:0;background:rgba(0,0,0,.5);content:"";opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-webkit-transition:opacity .4s,-webkit-transform 0s .4s;transition:opacity .4s,-webkit-transform 0s .4s;transition:opacity .4s,transform 0s .4s;transition:opacity .4s,transform 0s .4s,-webkit-transform 0s .4s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}body.show-menu:before{opacity:1;-webkit-transition:opacity .8s;transition:opacity .8s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1);-webkit-transform:translateZ(0);transform:translateZ(0)}#desktop-menu{-webkit-transform:translate(0);transform:translate(0);-webkit-transform:translateZ(0);transform:translateZ(0);will-change:position,transform;padding-bottom:5rem}#desktop-menu>button:first-of-type{margin-top:1.5rem}.col--nav{width:100%}@media (min-width:768px){.col--nav{width:420px;float:left;border-right:1px solid #eeeff0;padding-left:4.5rem}}.docs-menu{will-change:min-height;display:none}@media (min-width:768px){.docs-menu{display:block}}@media (max-width:767.98px){.docs-offcanvas-menu{-webkit-transform:translateX(100%);transform:translateX(100%);z-index:10;background-color:#fff;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;position:fixed;top:0;left:0;bottom:0;right:0;overflow-y:auto}.docs-offcanvas-menu.active{-webkit-transform:translateX(0);transform:translateX(0)}}@media (min-width:768px){.docs-offcanvas-menu{display:none}}.navbar-toggler--wrap{position:fixed;bottom:0;left:0;right:0;z-index:9;background-color:#fff;-webkit-box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25);box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25)}@media (min-width:768px){.navbar-toggler--wrap{display:none}}.navbar-toggler{color:#06c;padding:1rem 1rem 1rem 2rem}.navbar-toggler__chapter{color:#000;font-size:12.8px;font-size:.8rem}.sidebar-tabs{position:fixed;top:0;left:0;right:0;background-color:#fff;-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;z-index:11;-webkit-box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25);box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25)}.sidebar-tabs.active{-webkit-transform:translateX(0);transform:translateX(0)}@media (min-width:768px){.sidebar-tabs{display:none}}.sidebar-btn{text-transform:uppercase;color:#06c;font-weight:700;cursor:pointer;border:0;border-bottom:3px solid #0073e6;background:none}@media (min-width:768px){.sidebar-btn{border-bottom:2px solid #bbd8f1}}.sidebar-btn.sidebar-btn--mobile{display:inline-block;font-size:11.2px;font-size:.7rem;text-align:center;border:0}.sidebar-btn.sidebar-btn--mobile.active.show{border-bottom:3px solid #0073e6;text-decoration:none}@media (min-width:768px){.sidebar-btn.sidebar-btn--mobile.active.show{border-bottom:2px solid #bbd8f1}}.form-check [type=checkbox]:focus.focus--mouse+label.sidebar-btn,.sidebar-btn.focus--mouse,.toggles label input[type=checkbox]:focus.focus--mouse+.sidebar-btn.lever{border-color:#0073e6!important}@media (min-width:768px){.form-check [type=checkbox]:focus.focus--mouse+label.sidebar-btn,.sidebar-btn.focus--mouse,.toggles label input[type=checkbox]:focus.focus--mouse+.sidebar-btn.lever{border-color:#bbd8f1!important}}.sidebar-btn .it-collapse,.sidebar-btn .it-expand{font-size:9.6px;font-size:.6rem;line-height:2.5}.sidebar-btn .it-expand{display:inline-block}.sidebar-btn.collapsed .it-expand,.sidebar-btn .it-collapse{display:none}.sidebar-btn.collapsed .it-collapse{display:inline-block}@media (min-width:768px){.sidebar-btn{display:block;width:100%;text-align:left}}@media (max-width:767.98px){.sidebar-btn.collapsed .it-collapse,.sidebar-btn.collapsed .it-expand,.sidebar-btn .it-collapse,.sidebar-btn .it-expand{display:none}}.main-container{overflow:hidden;position:relative;background-color:#fff}.doc-content__consultation{position:absolute;right:0;left:0;top:0;background-color:#4bd4d6;text-align:left;text-transform:uppercase;font-weight:700;color:#000;padding:.5rem 0 .5rem 2rem}@media (min-width:992px){.doc-content__consultation{padding-left:4rem}}@media (min-width:1200px){.doc-content__consultation{-webkit-transform:rotate(45deg) translate(45px,-125px);transform:rotate(45deg) translate(45px,-125px);width:320px;-webkit-transform-origin:left;transform-origin:left;z-index:1;left:auto;text-align:center;padding-left:0}}.col-content{padding:4rem 2rem}@media (min-width:992px){.col-content{padding:4rem 4rem 5rem}}.caption-wrap{clear:both}.caption-wrap .caption--table{margin-top:1rem;margin-bottom:1rem;display:block;font-family:Lora,serif;font-style:italic;font-size:12px;font-size:.75rem;padding:0}@media (min-width:992px){.caption-wrap .caption--table{width:calc(100% - 200px);float:left}}.caption-wrap .reference--wrap{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;margin-top:1rem;margin-bottom:2rem;font-size:.9em}@media (min-width:768px){.caption-wrap .reference--wrap{width:200px;float:right;padding-left:2rem}}.caption-number{font-weight:700;color:#000}.chapter-header{margin-bottom:1rem;margin-left:.5rem}.chapter-nav{position:relative}@media (min-width:992px){.chapter-nav{width:200px;float:left}}.figure-fixed-wrap{display:block;width:100%;overflow-x:auto}.figure-fixed{max-width:none}.title__background{width:100%;background-color:#e6f3fe;position:absolute;top:-1px;height:auto;left:-8px;left:-.5rem;display:none;right:0;z-index:0}.title__background:after{content:"";position:absolute;left:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);top:0;bottom:0;width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-top:20px solid #e6f3fe}.std-term{background-color:#bffffd;color:#000;padding:.2rem}.footer-buttons--next{clear:both;margin-top:4rem}.footer-buttons--next a{background-color:#0073e6;color:#fff;padding:.5rem 1rem;border-radius:.2rem;font-weight:700;display:inline-block}.footer-buttons--prev{margin-bottom:2.5rem}.reference-icon{vertical-align:middle;display:inline-block}#doc-content{width:100%;position:relative}@media (min-width:768px){#doc-content{width:calc(100% - 420px);float:left}}#doc-content a.reference[href]{text-decoration:underline}#doc-content .useful-docs .mimetype{display:none}#doc-content .useful-docs ul{list-style-type:none;padding-left:0}#doc-content .useful-docs li{border-top:1px solid #ccc;padding-top:1rem;padding-bottom:1rem;vertical-align:middle}#doc-content .useful-docs li:after{display:none}#doc-content .useful-docs [class*=" docs-icon-"],#doc-content .useful-docs [class^=docs-icon-]{font-size:30.4px;font-size:1.9rem;color:#0073e6}#doc-content ul.simple,#doc-content ul.simple ul{list-style-type:disc}#doc-content ul.simple li,#doc-content ul.simple ul li{position:relative;margin-bottom:.5rem;font-size:14.4px;font-size:.9rem}#doc-content ul.simple li ul li,#doc-content ul.simple ul li ul li{margin-top:.5rem}#doc-content .section{clear:both}#doc-content .section:after{content:"";display:table;clear:both}@media (min-width:992px){#doc-content .section>*{width:calc(100% - 200px);float:left;clear:left}}@media (min-width:992px){#doc-content .section .caption-wrap,#doc-content .section .chapter-header,#doc-content .section .figure,#doc-content .section .full-width,#doc-content .section .section,#doc-content .section .table-responsive,#doc-content .section>.toctree-wrapper.compound{width:100%}}#doc-content .section .figure{width:100%}#doc-content .section .figure[id],#doc-content .section .rubric.ref[id],#doc-content .section .section[id],#doc-content .section .table[id]{border-top:4.2rem solid transparent}#doc-content .section .glossary dt:not([id=""]){margin-top:-4em;padding-top:4em}#doc-content .section ol.loweralpha,#doc-content .section ol.loweralpha li{list-style:lower-alpha}#doc-content .section ol.upperalpha,#doc-content .section ol.upperalpha li{list-style:upper-alpha}#doc-content .section ol.upperroman,#doc-content .section ol.upperroman li{list-style:upper-roman}#doc-content .section ol,#doc-content .section ol.arabic{list-style:decimal}#doc-content .topic-title{color:#000;font-weight:700;font-size:22.4px;font-size:1.4rem;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .topic.procedure{margin-bottom:3rem}#doc-content .topic.procedure em{font-weight:700}#doc-content .topic.procedure ol{padding-left:1rem}#doc-content .topic.procedure ol li{position:relative;margin-bottom:1rem;padding-left:1rem;counter-increment:list;list-style-type:none;font-family:Lora,serif}#doc-content .topic.procedure ol li:after{position:absolute;left:-16px;left:-1rem;top:0;width:16px;width:1rem;height:24px;height:1.5rem;z-index:1;content:counter(list);color:#fff;text-align:center;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}#doc-content .topic.procedure .topic-title{text-transform:uppercase;font-size:17.6px;font-size:1.1rem;font-weight:700;color:#002b4d;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;padding-bottom:.2rem;background:-webkit-gradient(linear,left top,left bottom,from(#004e95),to(#004e95)) no-repeat 100% 100%/calc(100% - 2rem) 2px;background:linear-gradient(#004e95,#004e95) no-repeat 100% 100%/calc(100% - 2rem) 2px;margin-bottom:1rem}#doc-content .topic.procedure .topic-title [class*=" docs-icon-"],#doc-content .topic.procedure .topic-title [class^=docs-icon-]{margin-right:.5rem}#doc-content .topic.procedure .procedure__img{padding-left:1.5rem;margin-bottom:2rem;margin-left:.5rem;margin-top:2rem;border-left:1px solid #799ebc}#doc-content .topic.procedure .procedure__img img{-webkit-box-shadow:0 0 61px 0 rgba(0,0,0,.15);box-shadow:0 0 61px 0 rgba(0,0,0,.15)}#doc-content .topic.procedure .procedure-internal-title{text-transform:uppercase;color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12.8px;font-size:.8rem;font-weight:700}#doc-content .topic.procedure .docs-icon-step{color:#004e95;position:absolute;left:-24px;left:-1.5rem;font-size:32px;font-size:2rem}@media (min-width:992px){#doc-content .title-wrap{width:calc(100% - 200px);float:left;clear:left;position:relative}#doc-content .title-wrap h2{line-height:60px}#doc-content .title-wrap h3{line-height:46px}#doc-content .title-wrap h1,#doc-content .title-wrap h2,#doc-content .title-wrap h3{display:inline;cursor:pointer;position:relative;color:#000;box-shadow:.5rem 0 0 #fff,-.5rem 0 0 #fff;-webkit-box-shadow:.5rem 0 0 #fff,-.5rem 0 0 #fff;-webkit-box-decoration-break:clone;-ms-box-decoration-break:clone;-o-box-decoration-break:clone;box-decoration-break:clone;left:-.5rem;z-index:1}#doc-content .title-wrap h1 .title__chapter,#doc-content .title-wrap h2 .title__chapter,#doc-content .title-wrap h3 .title__chapter{position:relative;color:#0073e6}#doc-content .title-wrap h1{line-height:71px}#doc-content .title-wrap h1 .title__chapter{position:relative;background-color:#0073e6;color:#fff;margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;display:inline-block;z-index:1}#doc-content .title-wrap h1 .title__chapter:after,#doc-content .title-wrap h1 .title__chapter:before{content:"";top:0;bottom:0;width:.5rem;background-color:#0073e6;position:absolute}#doc-content .title-wrap h1 .title__chapter:after{right:100%}#doc-content .title-wrap h1 .title__chapter:before{left:100%}}#doc-content .title-wrap.active h1,#doc-content .title-wrap.active h2,#doc-content .title-wrap.active h3{-webkit-box-shadow:.5rem 0 0 #e6f3fe,-.5rem 0 0 #e6f3fe;box-shadow:.5rem 0 0 #e6f3fe,-.5rem 0 0 #e6f3fe;background-color:#e6f3fe}#doc-content .title-wrap.active .title__background{display:block}#doc-content .headerlink{display:none}#doc-content .document-info{padding:0}#doc-content .document-info .docutils.field-list{width:100%;margin-bottom:2rem;border-bottom:1px solid #ccc;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;display:grid}#doc-content .document-info .docutils.field-list tr{display:block;margin-bottom:2rem}@media (min-width:576px){#doc-content .document-info .docutils.field-list tr{width:50%;float:left}}#doc-content .document-info .docutils.field-list .field-body,#doc-content .document-info .docutils.field-list .field-name{display:block;font-weight:400}#doc-content .document-info .docutils.field-list .field-body{color:#06c;text-decoration:underline}#doc-content dd>p{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .highlights{font-size:24px;font-size:1.5rem;font-family:Lora,serif}#doc-content blockquote.epigraph{margin-top:2rem;padding-left:2rem;border-left:4px solid #00c4c8;color:#596771;font-size:19.2px;font-size:1.2rem;margin-bottom:2rem}#doc-content blockquote.epigraph .attribution{margin-bottom:0;font-size:16px;font-size:1rem}#doc-content .question-and-answers blockquote{margin-top:.5rem;margin-bottom:0}#doc-content .question-and-answers blockquote>div{font-weight:700;font-family:Lora,serif}#doc-content .question-and-answers .pull-quote{max-width:490px;margin-bottom:2rem}#doc-content .question-and-answers .pull-quote ul{list-style-type:none;padding-left:1.5rem}#doc-content .question-and-answers .pull-quote ul li{display:inline-block;margin-top:1rem}#doc-content .question-and-answers .pull-quote ul li:after{display:none}#doc-content .question-and-answers .pull-quote ul li a{padding:.2rem .5rem;margin-right:.2rem;background-color:#bffffd;color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;border-bottom:2px dotted #ccc}#doc-content .question-and-answers .pull-quote>div>p{text-transform:uppercase;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;color:#0b0b0b;margin-bottom:0;font-weight:100}#doc-content .question-and-answers .pull-quote:nth-of-type(odd){float:left;clear:right}#doc-content .question-and-answers .pull-quote:nth-of-type(odd) blockquote>div,#doc-content .question-and-answers .pull-quote:nth-of-type(odd) ul{padding-left:1.5rem;border-left:5px solid #00c4c8}#doc-content .question-and-answers .pull-quote:nth-of-type(2n){float:right;text-align:right;clear:left}#doc-content .question-and-answers .pull-quote:nth-of-type(2n) blockquote>div,#doc-content .question-and-answers .pull-quote:nth-of-type(2n) ul{padding-right:1.5rem;border-right:5px solid #00c4c8}#doc-content .question-and-answers .glossary.docutils{display:none}#doc-content .highlighted{background:#bffffd;display:inline-block;font-weight:700}.highlight{padding:1rem;margin-bottom:1em}.highlight pre{margin:0;padding-bottom:1em}.highlighttable .highlight{padding:0}.code .highlight{background:none}code:not(.download) .pre{background-color:#efc;padding:.2rem}code.download{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:100%}#doc-content .admonition{margin-bottom:2rem;margin-top:2rem;padding-left:2rem;border-left:4px solid;color:#596771}#doc-content .admonition .more{padding:0}#doc-content .admonition .admonition-title{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;text-transform:uppercase;font-weight:700}#doc-content .admonition .admonition-title [class*=" docs-icon-"],#doc-content .admonition .admonition-title [class^=docs-icon-]{font-size:24px;font-size:1.5rem;margin-right:.5rem}#doc-content .admonition .admonition__hidden-paragraph{display:none}#doc-content .admonition .admonition__toggle-wrap{border-top:1px solid #ccc;padding-top:1rem;margin-top:1.5rem}#doc-content .admonition .admonition__toggle-btn{cursor:pointer;background:none;border:none;color:#0073e6;padding-left:0}#doc-content .admonition .admonition__toggle-btn [class*=" docs-icon-"],#doc-content .admonition .admonition__toggle-btn [class^=docs-icon-]{font-size:9.6px;font-size:.6rem;margin-left:.5rem;position:relative}#doc-content .admonition .admonition__toggle-btn [class*=" docs-icon-"]:after,#doc-content .admonition .admonition__toggle-btn [class^=docs-icon-]:after{content:"";width:16px;width:1rem;height:16px;height:1rem;border:2px solid #0073e6;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;border-radius:50%}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-less:first-letter,#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-more:first-letter{text-transform:uppercase}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-less{display:none}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-more{display:inline-block}#doc-content .admonition .admonition__toggle-btn.active .admonition__toggle-show-more{display:none}#doc-content .admonition .admonition__toggle-btn.active .admonition__toggle-show-less{display:inline-block}#doc-content .admonition.display-page{background-color:#f9fafb;padding:2rem;position:relative;border:none}#doc-content .admonition.display-page:after,#doc-content .admonition.display-page:before{content:"";width:0;height:0;right:0;top:0;position:absolute;z-index:1}#doc-content .admonition.display-page:before{border-bottom:50px solid transparent;border-right:50px solid #fff}#doc-content .admonition.display-page:after{border-top:50px solid transparent;border-bottom:50px solid #ccc;border-right:50px solid transparent;-webkit-transform:translateY(-50%);transform:translateY(-50%)}#doc-content .admonition.display-page .admonition__hidden-paragraph p,#doc-content .admonition.display-page>p,#doc-content .admonition.display-page li{font-size:12.8px;font-size:.8rem;color:#002b4d}#doc-content .admonition.display-page ol{counter-reset:list}#doc-content .admonition.display-page ol li{margin-bottom:1rem;position:relative;list-style-type:none;counter-increment:list;color:#002b4d;font-family:Lora,serif;text-indent:16px;text-indent:1rem}#doc-content .admonition.display-page ol li:after{position:absolute;left:-16px;left:-1rem;top:0;width:17.6px;width:1.1rem;height:24px;height:1.5rem;z-index:1;content:counter(list) ".";text-align:center;font-weight:700}#doc-content .admonition.display-page ol li:before{position:absolute;left:-32px;left:-2rem;top:.65em;height:1px;z-index:1;content:"";font-weight:700;background-color:#002b4d;width:16px;width:1rem}#doc-content .admonition.display-page .admonition-title,#doc-content .admonition.display-page .code-block__header{color:#004e95;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.display-page .admonition-title{padding-bottom:.2rem;display:inline-block;background:-webkit-gradient(linear,left top,left bottom,from(#004e95),to(#004e95)) no-repeat 100% 100%/calc(100% - 2.2rem) 2px;background:linear-gradient(#004e95,#004e95) no-repeat 100% 100%/calc(100% - 2.2rem) 2px;margin-bottom:1rem;overflow:hidden}#doc-content .admonition.display-page .admonition-internal-title{text-transform:uppercase;font-size:12.8px;font-size:.8rem;font-weight:700;color:#002b4d;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.display-page .linenodiv pre{color:#8998a5;font-weight:400}#doc-content .admonition.display-page .highlighttable pre{font-size:12.8px;font-size:.8rem}#doc-content .admonition.admonition-consultation{padding-bottom:1rem;border-bottom:1px solid #ccc;position:relative}#doc-content .admonition.admonition-consultation a{text-decoration:underline}#doc-content .admonition.admonition-consultation .last{font-family:Lora,serif}#doc-content .admonition.admonition-consultation .admonition-title{color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.admonition-consultation .admonition-title [class*=" docs-icon-"],#doc-content .admonition.admonition-consultation .admonition-title [class^=docs-icon-]{font-size:19.2px;font-size:1.2rem}#doc-content .admonition.error{border-color:#d83750}#doc-content .admonition.error .admonition-title{color:#d83750}#doc-content .admonition.note{border-color:#004e95}#doc-content .admonition.note .admonition-title{color:#004e95}#doc-content .admonition.attention,#doc-content .admonition.warning{border-color:#df7d26}#doc-content .admonition.attention .admonition-title,#doc-content .admonition.warning .admonition-title{color:#df7d26}#doc-content .admonition.important{border-color:#008255}#doc-content .admonition.important .admonition-title{color:#008255}#doc-content .admonition.important .last{font-weight:700;font-size:19.2px;font-size:1.2rem}#doc-content .admonition.hint{border-color:#008255}#doc-content .admonition.hint .admonition-title{color:#008255}#doc-content .admonition.hint .reference.internal{font-size:12.8px;font-size:.8rem;position:relative}#doc-content .admonition.hint .reference.internal:after{content:"";width:6.4px;width:.4rem;height:6.4px;height:.4rem;border-top:1px solid #0073e6;border-right:1px solid #0073e6;left:100%;-webkit-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%);position:absolute;top:50%}#doc-content .admonition.admonition-may,#doc-content .admonition.admonition-must,#doc-content .admonition.admonition-must-not,#doc-content .admonition.admonition-should,#doc-content .admonition.admonition-should-not,#doc-content .admonition.admonition-use,#doc-content .admonition.admonition-use-not{margin-top:2rem;border:2px solid;border-radius:1em;padding:2em;position:relative}#doc-content .admonition.admonition-may .admonition__header,#doc-content .admonition.admonition-must-not .admonition__header,#doc-content .admonition.admonition-must .admonition__header,#doc-content .admonition.admonition-should-not .admonition__header,#doc-content .admonition.admonition-should .admonition__header,#doc-content .admonition.admonition-use-not .admonition__header,#doc-content .admonition.admonition-use .admonition__header{display:inline-block;position:relative;padding:0 1em;background:#fff}#doc-content .admonition.admonition-may .admonition__header .admonition-title,#doc-content .admonition.admonition-must-not .admonition__header .admonition-title,#doc-content .admonition.admonition-must .admonition__header .admonition-title,#doc-content .admonition.admonition-should-not .admonition__header .admonition-title,#doc-content .admonition.admonition-should .admonition__header .admonition-title,#doc-content .admonition.admonition-use-not .admonition__header .admonition-title,#doc-content .admonition.admonition-use .admonition__header .admonition-title{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;margin:0}#doc-content .admonition.admonition-may:before,#doc-content .admonition.admonition-must-not:before,#doc-content .admonition.admonition-must:before,#doc-content .admonition.admonition-should-not:before,#doc-content .admonition.admonition-should:before,#doc-content .admonition.admonition-use-not:before,#doc-content .admonition.admonition-use:before{position:absolute;right:4em;top:-.65em;width:6em;padding:0 1em;display:inline-block;background-color:#fff}#doc-content .admonition.admonition-may,#doc-content .admonition.admonition-must,#doc-content .admonition.admonition-must-not,#doc-content .admonition.admonition-should,#doc-content .admonition.admonition-should-not{border-color:#004080}#doc-content .admonition.admonition-may .admonition__header,#doc-content .admonition.admonition-must-not .admonition__header,#doc-content .admonition.admonition-must .admonition__header,#doc-content .admonition.admonition-should-not .admonition__header,#doc-content .admonition.admonition-should .admonition__header{top:-2.8em}#doc-content .admonition.admonition-may .admonition__header .admonition-title,#doc-content .admonition.admonition-must-not .admonition__header .admonition-title,#doc-content .admonition.admonition-must .admonition__header .admonition-title,#doc-content .admonition.admonition-should-not .admonition__header .admonition-title,#doc-content .admonition.admonition-should .admonition__header .admonition-title{color:#004080}#doc-content .admonition.admonition-use{border-color:#00cf86}#doc-content .admonition.admonition-use .admonition__header .admonition-title{color:#00cf86}#doc-content .admonition.admonition-use .admonition__header .admonition-title:before{content:""}#doc-content .admonition.admonition-use-not{border-color:#d1344c}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title{color:#d1344c}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title:before{content:""}#doc-content .admonition.admonition-use-not .admonition__header,#doc-content .admonition.admonition-use .admonition__header{top:-3.2em}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title:before,#doc-content .admonition.admonition-use .admonition__header .admonition-title:before{font-family:docs-icons;margin-right:.5rem;font-size:1.6em;vertical-align:middle}#doc-content .admonition.admonition-must:before{content:url(../images/must.svg)}#doc-content .admonition.admonition-should:before{content:url(../images/should.svg)}#doc-content .admonition.admonition-must-not:before{content:url(../images/must_not.svg)}#doc-content .admonition.admonition-should-not:before{content:url(../images/should_not.svg)}#doc-content .admonition.admonition-may:before{content:url(../images/may.svg)}.footer *{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.footer a:hover{text-decoration:none}.footer .in-collaboration{font-size:.8em}.footer .team-logo--icon{width:54px}.footer .team-logo--text{font-size:16px;font-size:1rem;line-height:18px;max-width:160px;text-transform:uppercase}.footer .agid-logo--icon{width:8em}@media (min-width:768px){.footer .agid-logo--icon{width:10em}}.footer .agid-logo--separator{border-left-width:2px!important;height:30px}@media (min-width:768px){.footer .agid-logo--separator{height:40px}}.footer .agid-logo--text{width:112px;width:7rem;line-height:1.2;font-size:1em;display:inline-block;vertical-align:middle}@media (min-width:768px){.footer .agid-logo--text{font-size:1.1em;width:8rem}}.footer .small-prints{color:#00fff8;font-weight:600}.footer .social{font-size:1em;color:#fff}.footer .social .icon{color:#00264d;background-color:#fff;padding:.3em;border-radius:100%;font-size:22px}.footer .colophon{border-top:1px solid hsla(0,0%,100%,.1);margin-top:1.5em}@media (min-width:992px){.footer .colophon{margin-top:2em}}.footer-menu__link:hover{color:#fff}.t_translate-wrap{display:none}.doc-tooltip{background-color:#fff;font-family:Lora,serif;-webkit-box-shadow:0 0 100px 0 rgba(0,0,0,.15);box-shadow:0 0 100px 0 rgba(0,0,0,.15)}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:before,.doc-tooltip.bs-popover-auto[x-placement^=top]:before,.doc-tooltip.bs-popover-bottom:before,.doc-tooltip.bs-popover-top:before{content:"";width:0;height:0;border-top:40px solid transparent;border-bottom:40px solid transparent;border-left:40px solid #fff;position:absolute;left:0;z-index:-1}.doc-tooltip.bs-popover-auto[x-placement^=top]:before,.doc-tooltip.bs-popover-top:before{bottom:-40px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:before,.doc-tooltip.bs-popover-bottom:before{top:-40px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:after,.doc-tooltip.bs-popover-auto[x-placement^=top]:after,.doc-tooltip.bs-popover-bottom:after,.doc-tooltip.bs-popover-top:after{content:"";width:15px;height:15px;-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;left:5px;z-index:-2}.doc-tooltip.bs-popover-auto[x-placement^=top]:after,.doc-tooltip.bs-popover-top:after{-webkit-box-shadow:5px 5px 70px 8px rgba(0,0,0,.15);box-shadow:5px 5px 70px 8px rgba(0,0,0,.15);bottom:-20px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:after,.doc-tooltip.bs-popover-bottom:after{-webkit-box-shadow:-5px -5px 70px 8px rgba(0,0,0,.15);box-shadow:-5px -5px 70px 8px rgba(0,0,0,.15);top:-20px}.doc-tooltip.doc-tooltip--note:after,.doc-tooltip.doc-tooltip--note:before{content:none}.tooltip__wrap{overflow:hidden;width:330px;padding:2rem;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.tooltip__title{overflow:hidden;font-style:italic;margin-bottom:.5rem;font-size:1em;letter-spacing:0}.tooltip__content{font-size:14.4px;font-size:.9rem;font-style:italic;margin-bottom:0}.tooltip__close-btn{position:absolute;top:16px;top:1rem;right:16px;right:1rem;width:20px;height:20px;padding:0;background:none;border:0;cursor:pointer}.tooltip__close-btn:after,.tooltip__close-btn:before{content:"";position:absolute;height:20px;width:1px;background-color:#0073e6;top:0;left:50%}.tooltip__close-btn:after{-webkit-transform:rotate(45deg) translateX(-50%);transform:rotate(45deg) translateX(-50%)}.tooltip__close-btn:before{-webkit-transform:rotate(-45deg) translateX(-50%);transform:rotate(-45deg) translateX(-50%)}.tooltip__link{color:#0073e6;font-size:12.8px;font-size:.8rem;font-weight:100;text-transform:uppercase;letter-spacing:0;position:relative;display:inline-block;margin-top:1rem}.tooltip__link:after{content:"";position:absolute;left:100%;top:0;width:30px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAGCAYAAAAVMmT4AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gUPDDQNy1r5IQAAAH5JREFUGNNj+I8HTD704v+ZR1/gfCYGPODNlz8MLv3XGc4+/srAwMDAwHjx6df//jNuYVX84esfhg9f/jAI8LAw3G4yYGD8+vPv/ztvfmBVPP3wK4YZ+14wdIfJM5Q4SzIw/v///z8uZzRsf8rAw8bEUOIsCRHA58EXn36h8AF2435mx6vmAAAAAABJRU5ErkJggg==");background-repeat:no-repeat;bottom:0;background-position:50%}@media (max-width:991.98px){.chapter-nav__list--hidden:not(.show){display:none}}@media (min-width:992px){.chapter-nav__list--hidden{visibility:hidden;opacity:0;-webkit-transition:visibility .35s,opacity .35s;transition:visibility .35s,opacity .35s}.chapter-nav__list--hidden.active{visibility:visible;opacity:1}}@media (max-width:991.98px){.chapter-nav__list-wrap{max-width:300px;margin-left:auto;margin-right:auto;border-radius:4px}}@media (min-width:992px){.chapter-nav__wrap{position:absolute;left:2rem;top:1rem}}.chapter-link{background:none;border:none;color:#0073e6;padding:0;display:inline-block;font-size:.9em;font-weight:400;cursor:pointer;vertical-align:middle}.chapter-link:hover{text-decoration:underline}.chapter-link__title{float:left}.chapter-link__counter{margin-right:.3rem;display:inline-block;float:left}.chapter-nav__list{list-style-type:none;margin-bottom:0;padding:1rem}@media (min-width:992px){.chapter-nav__list{padding:0}}.chapter-nav__title{padding:1rem;color:#000;font-size:12.8px;font-size:.8rem;font-weight:700;border-bottom:1px solid #ccc}.chapter-nav__title .title__chapter{color:#8998a5}@media (min-width:992px){.chapter-nav__title{display:none}}.chapter-nav__item:not(:last-child){margin-bottom:1rem}@media (min-width:992px){.chapter-nav__item:not(:last-child){margin-bottom:0}}.chapter-nav__list--visible{margin-top:1rem}@media (min-width:992px){.chapter-nav__list--visible{margin-top:-.5rem}}.chapter-nav__list--visible .chapter-nav__item{display:inline-block}@media (min-width:992px){.chapter-nav__list--visible .chapter-nav__item{display:block}}#doc-content ::-webkit-scrollbar{width:1em;height:14px}#doc-content ::-webkit-scrollbar-track{background-color:#e6f3fe;border-radius:7px;border:2px solid #fff}#doc-content ::-webkit-scrollbar-thumb{background-color:#0073e6;border-radius:7px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHCAYAAAABIM1CAAAALUlEQVQoU2N88+m/hggf4w0GLODJp//CLEwMUhI8jJexyT/7/l+OcdSAQRAGABbrTN6F2sNMAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:50%}#doc-content table:not(.footnote){border:0}#doc-content table:not(.footnote) td{border-right:0;border-left:0}#doc-content table:not(.footnote):not(.highlighttable) td{min-width:220px}#doc-content table:not(.footnote) thead .head{border-right:0;border-left:0;text-transform:uppercase;color:#000;font-size:12px;font-size:.75rem;vertical-align:top}#doc-content table:not(.footnote) tr{font-size:12px;font-size:.75rem}#doc-content .footnote-reference{color:#193e5e;border:1px solid #193e5e;border-radius:3px;padding:0 .4rem;line-height:1.4}#doc-content .note-action{margin-top:.5rem}#doc-content .note-back-btn,#doc-content .note-close-btn{background:none;border:0;display:inline-block;color:#0073e6;font-size:1.2em;cursor:pointer}#doc-content .note-back-btn{position:relative}#doc-content .note-back-btn:before{content:"";top:0;bottom:0;width:1px;position:absolute;background-color:#0073e6;left:0}#doc-content .note-back-btn:hover{text-decoration:underline}#doc-content .docutils.footnote{color:#000;font-size:12.8px;font-size:.8rem;display:none;margin-bottom:2rem}#doc-content .docutils.footnote td{width:100%;float:left}#doc-content .docutils.footnote .fn-backref{color:#193e5e;border:1px solid #193e5e;border-radius:3px;padding:.2rem;line-height:1;display:inline-block;margin-bottom:.5rem}.block-comments{margin-top:4.4rem;padding-bottom:2rem}.block-comments__body p{font-family:Titillium Web,Geneva,Tahoma,sans-serif}.block-comments__header{border-bottom-color:#ccc!important;border-top-color:#eeeff0!important}.block-comments__header h6{color:#06c}.block-comments__img{width:56px}.block-comments__reply-anchor{margin-top:-5em;padding-top:5em}.block-comments__logout-link{display:none;padding-top:.25em}.block-comments__logout-link--icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#d83750;text-shadow:0 0 20px #000}.block-comments__logout-link--icon:hover{color:#fff}.block-comments__logout-link:hover{text-decoration:none}.block-comments__logout-link--visible{display:block;position:relative}.block-comments__input{margin-bottom:1em!important}.block-comments__toggle-btn{background:none;width:32px;width:2rem;height:32px;height:2rem}.block-comments__toggle-btn .docs-icon-minus,.block-comments__toggle-btn .docs-icon-plus{color:#06c;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.block-comments__toggle-btn .docs-icon-plus{display:none}.block-comments__toggle-btn.collapsed .docs-icon-plus{display:block}.block-comments__toggle-btn.collapsed .docs-icon-minus{display:none}.block-comments__item-btn{background:none;width:32px;width:2rem;height:24px;height:1.5rem;border:0}.block-comments__item-btn .it-collapse,.block-comments__item-btn .it-expand{color:#06c}.block-comments__item-btn.collapsed .it-collapse,.block-comments__item-btn .it-expand{display:none}.block-comments__item-btn.collapsed .it-expand{display:inline-block}.block-comments__item{padding-top:1em}.block-comments__item.hidden{opacity:.5}.block-comments__item.is-new{background-color:#e6f3fe;-webkit-animation:background-fade-highlight 2s ease-out 1 forwards;animation:background-fade-highlight 2s ease-out 1 forwards}.block-comments__content{word-wrap:break-word}.block-comments__name{color:#06c;font-weight:400;font-size:16px;font-size:1rem;letter-spacing:0}.block-comments__date,.block-comments__role{font-size:14px;line-height:21px}.block-comments__role{letter-spacing:.88px}.block-comments__paragraph{font-size:14px;line-height:21px}.block-comments__paragraph a{text-decoration:underline}.box-comment{position:relative;width:100%}.box-comment:not(.sending) .loading{display:none}.box-comment.sending .loading{margin-left:1em;display:inline-block!important;position:relative;overflow:visible;width:40px;z-index:1}.box-comment.sending .loading:before{border:5px solid #0073e6!important;top:60%}.box-comment textarea{min-height:5em;font-weight:400;border:1px solid #eeeff0;border-radius:5px}.box-comment textarea:focus{border:1px solid #596771}.box-comment textarea::-webkit-input-placeholder{color:#ccc}.box-comment textarea::-moz-placeholder{color:#ccc}.box-comment textarea::-ms-input-placeholder{color:#ccc}.box-comment textarea::placeholder{color:#ccc}.box-comment__login{display:-webkit-box;display:-ms-flexbox;display:flex;border:1px solid #edf5fc;border-radius:5px;padding:1em}.box-comment__legend{font-size:12px}.box-comment__user-image{border-radius:50%;position:relative;height:56px;width:56px;float:left}.box-comment__user-image--anon{margin:.25em .75em .25em .25em;background-color:#e8f2fc}.box-comment__user-image i{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.box-comment__buttons{float:left}.box-comment__required{float:right}.box-comment__required>span{font-size:.8em}.box-comment__submit{position:relative;overflow:hidden}.box-comment__submit .loading.no-bg{display:none;width:30px;height:0;content:" ";overflow:visible;margin-bottom:5px;margin-left:-15px;margin-right:5px}.box-comment__submit .loading.no-bg:before{left:auto}.box-comment__submit>div:not(.loading){display:inline}.box-comment__suggestions__tooltip .tooltip__content{font-style:normal;padding-left:1.75em;font-size:.95em}.missing_permission{width:100%}.missing_permission__text{border:1px solid #edf5fc;border-radius:5px;padding:1em}@-webkit-keyframes background-fade-highlight{to{background-color:transparent}}@keyframes background-fade-highlight{to{background-color:transparent}}@media (max-width:767.98px){.sidebar-nav{padding-top:5.5rem}}.sidebar-nav a{text-decoration:none;color:#596771;font-size:14.4px;font-size:.9rem;display:block;line-height:1.6;margin-bottom:1rem;margin-top:1rem}.sidebar-nav a.current_item{position:relative;z-index:1;margin-bottom:1rem;margin-top:1rem;-webkit-transition:margin-bottom .3s,margin-top .3s;transition:margin-bottom .3s,margin-top .3s}.sidebar-nav a.current_item:before{content:"";position:absolute;top:-8px;top:-.5rem;bottom:-8px;bottom:-.5rem;left:-8px;left:-.5rem;right:-8px;right:-.5rem;background-color:#bffffd;z-index:-1}.sidebar-nav a:focus,.sidebar-nav a:hover{text-decoration:underline}.sidebar-nav>.sidebar-list--wrapper{padding:1rem}@media (min-width:768px){.sidebar-nav>.sidebar-list--wrapper{padding:0}}.sidebar-nav>.sidebar-list--wrapper>ul>li{padding:.1rem 3rem .1rem 1rem}.sidebar-nav>.sidebar-list--wrapper>ul>li>a{font-weight:700}.sidebar-nav>.sidebar-list--wrapper ul{list-style-type:none;padding-left:0;margin-bottom:0}.sidebar-nav>.sidebar-list--wrapper ul.current>li.current{background-color:#f6fbff}.sidebar-nav>.sidebar-list--wrapper ul.current>li.current a{color:#004e95}.sidebar-nav>.sidebar-list--wrapper ul ul{padding-left:1rem}.sidebar-nav>.sidebar-list--wrapper.figures-index--menu,.sidebar-nav>.sidebar-list--wrapper.glossary-mobile--menu,.sidebar-nav>.sidebar-list--wrapper.table-index--menu{padding-top:1rem}.sidebar-nav>.sidebar-list--wrapper.figures-index--menu>ul>li,.sidebar-nav>.sidebar-list--wrapper.glossary-mobile--menu>ul>li,.sidebar-nav>.sidebar-list--wrapper.table-index--menu>ul>li{padding-bottom:0;padding-top:.5rem}#glossary-page>.chapter-header{display:none}#glossary-page .chapter-header{padding-top:2rem;padding-bottom:2rem;padding-left:.5rem;overflow:hidden}#glossary-page .chapter-header h2{font-size:128px;font-size:8rem;font-family:Lora,serif;line-height:1}#glossary-page .glossary-page__btn{border:0;background:none;cursor:pointer;color:#0073e6;display:block;width:100%;text-align:left;text-transform:uppercase;-webkit-transition:color .3s;transition:color .3s}#glossary-page .glossary-page__btn .docs-icon-minus,#glossary-page .glossary-page__btn .docs-icon-plus{color:#0073e6}#glossary-page .glossary-page__btn .docs-icon-minus{display:inline-block}#glossary-page .glossary-page__btn .docs-icon-plus{display:none}#glossary-page .glossary-page__btn.collapsed{color:#596771}#glossary-page .glossary-page__btn.collapsed .docs-icon-minus{display:none}#glossary-page .glossary-page__btn.collapsed .docs-icon-plus{display:inline-block}#glossary-page .term-content{padding-left:2.3rem}#glossary-page .term-content,#glossary-page .term-content p{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#glossary-page .term-content:last-of-type.show,#glossary-page dt:last-of-type .glossary-page__btn.collapsed{border-bottom:2px solid #eaebed}.glossary-page__copy-link-wrap{color:#0073e6}.glossary-page__copy-link{background:none;border:none;color:#0073e6;cursor:pointer}@media (max-width:767.98px){.return-to-top{bottom:4rem}}.return-to-top i:before{margin:0}@media (max-width:767.98px){.modal.modal-sm-full .modal-dialog{margin:0;max-width:none}.modal.modal-sm-full .modal-dialog .modal-content{margin:0;width:100vw;height:100vh;border-radius:0!important;border:none}}@font-face{font-family:italia-icon-font;src:url(../font/italia-icon-font.eot?94539880);src:url(../font/italia-icon-font.eot?94539880#iefix) format("embedded-opentype"),url(../font/italia-icon-font.woff2?94539880) format("woff2"),url(../font/italia-icon-font.woff?94539880) format("woff"),url(../font/italia-icon-font.ttf?94539880) format("truetype"),url(../font/italia-icon-font.svg?94539880#italia-icon-font) format("svg");font-weight:400;font-style:normal}[class*=" it-"]:before,[class^=it-]:before{font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;font-smoothing:antialiased}.it-app:before{content:"\e800"}.it-app-1:before{content:"\e801"}.it-arrow-down:before{content:"\e802"}.it-arrow-left:before{content:"\e803"}.it-arrow-right:before{content:"\e804"}.it-arrow-up:before{content:"\e805"}.it-behance:before{content:"\e806"}.it-calendar:before{content:"\e807"}.it-camera:before{content:"\e808"}.it-cancel:before{content:"\e809"}.it-check:before{content:"\e80a"}.it-chevron-left:before{content:"\e80d"}.it-chevron-right:before{content:"\e80e"}.it-close:before{content:"\e80f"}.it-collapse:before{content:"\e810"}.it-comment:before{content:"\e811"}.it-copy:before{content:"\e812"}.it-download:before{content:"\e813"}.it-drop-down:before{content:"\e814"}.it-drop-up:before{content:"\e815"}.it-help:before{content:"\e816"}.it-expand-media:before{content:"\e817"}.it-expand:before{content:"\e818"}.it-external-link:before{content:"\e819"}.it-facebook:before{content:"\e81a"}.it-favorite:before{content:"\e81b"}.it-file:before{content:"\e81c"}.it-flickr:before{content:"\e81d"}.it-github:before{content:"\e81e"}.it-googleplus:before{content:"\e81f"}.it-no:before{content:"\e820"}.it-instagram:before{content:"\e821"}.it-link:before{content:"\e822"}.it-linkedin:before{content:"\e823"}.it-list:before{content:"\e824"}.it-lock:before{content:"\e825"}.it-mail:before{content:"\e826"}.it-medium:before{content:"\e827"}.it-more-actions:before{content:"\e828"}.it-more-items:before{content:"\e829"}.it-pdf:before{content:"\e82a"}.it-pin:before{content:"\e82b"}.it-print:before{content:"\e82c"}.it-refresh:before{content:"\e82f"}.it-rss:before{content:"\e830"}.it-search:before{content:"\e831"}.it-settings:before{content:"\e832"}.it-share:before{content:"\e833"}.it-slideshare:before{content:"\e834"}.it-twitter:before{content:"\e835"}.it-unlock:before{content:"\e836"}.it-upload:before{content:"\e837"}.it-video:before{content:"\e838"}.it-warning:before{content:"\e839"}.it-whatsapp:before{content:"\e83a"}.it-youtube-text:before{content:"\e83b"}.it-youtube:before{content:"\e83c"}.it-zoom-in:before{content:"\e83d"}.it-zoom-out:before{content:"\e83e"}.it-error:before{content:"\e83f"}.it-info:before{content:"\e840"}.it-paper-plane:before{content:"\e841"} \ No newline at end of file diff --git a/rp-vp-kid/en/_static/data/glossary.json b/rp-vp-kid/en/_static/data/glossary.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/rp-vp-kid/en/_static/data/glossary.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/rp-vp-kid/en/_static/doctools.js b/rp-vp-kid/en/_static/doctools.js new file mode 100644 index 000000000..c3db08d1c --- /dev/null +++ b/rp-vp-kid/en/_static/doctools.js @@ -0,0 +1,264 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.highlightSearchWords(); + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords: () => { + const highlight = + new URLSearchParams(window.location.search).get("highlight") || ""; + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + const url = new URL(window.location); + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + const blacklistedElements = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", + ]); + document.addEventListener("keydown", (event) => { + if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements + if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + case "Escape": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.hideSearchWords(); + event.preventDefault(); + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/rp-vp-kid/en/_static/documentation_options.js b/rp-vp-kid/en/_static/documentation_options.js new file mode 100644 index 000000000..860ac2179 --- /dev/null +++ b/rp-vp-kid/en/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: 'version: latest', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: false, +}; \ No newline at end of file diff --git a/rp-vp-kid/en/_static/file.png b/rp-vp-kid/en/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/_static/font/docs-italia.eot b/rp-vp-kid/en/_static/font/docs-italia.eot new file mode 100644 index 0000000000000000000000000000000000000000..169c6163b35c962c959ee57b2c2257fd4ae9f981 GIT binary patch literal 11192 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 k!RrF@`>@1b^2_9IJhy + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/_static/font/docs-italia.ttf b/rp-vp-kid/en/_static/font/docs-italia.ttf new file mode 100644 index 0000000000000000000000000000000000000000..96a7767f4dd660a0d79cc2678274189f10fb7ad4 GIT binary patch literal 11012 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/_static/font/docs-italia.woff b/rp-vp-kid/en/_static/font/docs-italia.woff new file mode 100644 index 0000000000000000000000000000000000000000..cda2cacb9b6c8afb3c845bff87d03a2b034e3dea GIT binary patch literal 11092 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 B(DMKQ literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/_static/font/italia-icon-font.eot b/rp-vp-kid/en/_static/font/italia-icon-font.eot new file mode 100644 index 0000000000000000000000000000000000000000..5242e53839d7d1643699f0b6fc9a012d4f4d5f56 GIT binary patch literal 23672 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 + + +Copyright (C) 2018 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/_static/font/italia-icon-font.ttf b/rp-vp-kid/en/_static/font/italia-icon-font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f290bd6e060305044fed76427a695f7cf364aa71 GIT binary patch literal 23472 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 QzV+UM@c%$i^b_(w0enpTDF6Tf literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/_static/font/italia-icon-font.woff b/rp-vp-kid/en/_static/font/italia-icon-font.woff new file mode 100644 index 0000000000000000000000000000000000000000..101f487bc8f60c2e787058058785bbec8f2a43cf GIT binary patch literal 13888 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 Y*7{$1T|uO;#mK-h0I+Vv4*(^b literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/_static/font/italia-icon-font.woff2 b/rp-vp-kid/en/_static/font/italia-icon-font.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4598d5a9919533a1c6aba2b07bddaec3786da1df GIT binary patch literal 11952 zcmV;hE>F>SPew8T0RR9104}fq4*&oF09&vC04`Sm0RR9100000000000000000000 z0000SR0dW6iBa%zykd<= zBrm<)dH?3dn(f=mkiseyGTGrysUDoE=Tim#<%KqHokKql1e z0>-}od@f(l#Rt+8446NmQ)d5;=hr3IamIy-0;noZ8CKnPv%%G(Kk3%@CPdMQqfrvV zLNFiJjQ!@EduLvBruEnEtmv=4@&@>A_Ky%Af;zAOK@e*aA~8WhN>~sjScPIz;x-q$ zC}ZWKQqSQ+SM9AD*Y18S)r&F!rgCb#3GcQnFtluQ2|!Q+kb6Jr=3W9ra%gj)9I^vN z6dXMPSS?$69}wd4Jy=B@QlJIy4hg=t-|hV$gNP0mgV{zlnF`&3(xngT(e_G3nea8M zJOk-MWYnjGZI*(Psi;%b*Hxnn@2C50h?E>q>AtWCh|x~=%gwmh`>tR*Sp177XN?rq;DYw=19hz?`39`mkO&Uu@s zD5%uLLeRxU{WTGw=fmcR)wT6~!Pf_Ow}?pjLj$(c$Mwb80dO3mo%JE+y|HZhix*9( z?yG)0te*I_5Ky0)75P$apN@~o61jw#>)QO1W!-fy45w1S^m9hyyE*;^rHbiQ=9ahN zf9RA!7&4jDDIXh4$V|?~>|3UyBiB_4lj%9eh5s{Nl2vL&qty|JBr=6cqcfQD3W`d~ zDl9gK%j2sGglZyn8ycEoEo~iLJ$(a1BV!X&GY~ELv;&~}H$4Ig%L@dgz9|Bg$^?~4 zl1e2-rIMyn$xx|esZ?@QDw9+yGcTtPnSD6}$Q0C>f#@h*BX+gD4%M z42UuzDi2Wwh$=!<38KmnRe>lAqHKtAAj*X(52AdCszOu%Q6WUtAS!~WIz%-gDu$?* zmoo#h{c>hOcF-Bsg{U4x^&x5iQA3CtLDU$cCJ;4+s2N1fA!-3p7^0R0t;&k2a>=S| z!wrbh00ex;QIg*NL+|}9{`o2L@ioDJzEpQ9!dCuA@es<+?6h$X_y@FMk08v!gFq#| z^bpXw_-7Z5KJ|}7i=(sA{^#h-HQiNlwi_KdHDXw&hyO|S5Wy|yJbs;xIU;s!Vl48H z5C^_56Onw2Ie`^8CL^s+`o)~4p9bV98SoY_Qt~7q5`B>*(y z)$6=k8U)QyhJfdJMrX*?!N#ag-n+qTT(x5g+lzU(Df=l}%5m^Pyus#(vP{p*Lji`X zJ(T1k=)fwY48&m|#j}4ZsY;jma!%Ppd1zf2i=Jrcs`^Jt#hmlr;MpPQe3W|d=l>F`n)6$d2&<%A~b6#I$bdUhy@s~6n| zRa)=JoU5NTq}HDlqy~(VSSxZf-itr^FnehB64C4`gv~fl`My9hsZp1?f z=5r&#a-QWfOS8wUU0UM%i%F1?jk`@4ad!;cR%h@Yvm9l5%psXW7s|@IB?2b~wUNdF z57e&y+J#Lyc?R`2HJhO#&|vG&Ji{~>Rs-A|1C*enI8%{2+*7A1xu zZ_6z<@Ab5rX{9*_ZMIXmc$+AnVx&Ykkq;^ucqu)`J0%@2Ey2qLq+@(DCR{-=_-A z00E5vngBGT5-kg$1wbo+*{Dp*0hkM59)S61rd9y35Wpe;i&3do0yl2^M<5*lajr^7SJFv$1kwYX zu7TNufo ziaA=YcUXbrjP(iuAS6eUCpeM zxTF1TGj5vFq-CAlYmcq!fhG+>BsEVuacs=Vp#ezf)rlmg!}Y-zMp=cJ^tjDF0?n2TGI#ZLJoDU}GrO0a^)jm9C_-$U1x% z1tDo?-WA)pBP}3Kw8=jdiFYGboN5qQMJO@=f`U_h=tr@~n?t54x?UOvsWnogX)W7_ zgVIP|_34ZrvJru_0IKtAwq7BRu=QylpjSalu4Jf|1y{_203k=o10WPIX&VG?MfDg! zGS?}DOj<(whx=z+PjxHp4!c2I7UD7tLddvEztXe)#55AkklgZ|MJ;L=rLK!u`bji70wEbuJmEfOdsT}^byubXIw&3lDnD9cJ2u}F6(FznKll$c)+E@ z6Q(oY`CKKEIKh;2FqsEsc`PPBlA(>^dt76IL!2y%xT9qjnT?1AB)tQt%Hv*X1fjTb zDeVusxgzT5BHJE#L1z&_(dq6X?#5zR3f)nba!JPDpH6y9+%IeMN@WYpY`>8jH=h1kbp&_z^aFZf_gG+UwK+TIvOE9uxX(;ZCk=^(2u@ z$^)U+pLmG1CD^t#R2RrTLel7i+^Gd=YP~bIzY}~i=4K!nP#sj%5v8asWExBE1gVf@ z?f4sG8@!=ww7KBX!dt)t-wDQo(LV2w%m_{RGlSc(4z3U8yoxm7m3~#Wj6Ku4TA0?p z^g*KZj(~$qEnP~5CpK#+(Lt<6l9E|fcEyQ!7%HaIVIcS;q~azSM&rRZBs%47@aBRk zT7yl@lR4yVO=%X|%G=O5W$*CFU^3%Yo+GrynW~3%VS?`tj=VRBo^2zDFkw$hljoL0 zD*hFdn2cJolhs}0L7|cqx89~wSx2MVMV%++7HZxGeABDpJ9Wc`YX?CGoX?Ag#GKID zrw%e-A8Z-hfHxU5XrOKqGEP6g^x2zVyz%AcLnV8%8%1BeSuM!iv8wALx^7h4U~D!n zp3kPav8x(}L8oq!=>%+9yT-XS;_5zRVal7ry7+0ewgYFGVCkJUrAKW6m5MPB}OD{F0u7@`pAj7vJKJh@vvYO`8?uz`_EMDSe z+qxQTXW?yW==IoZbgGY3WPj| zH5Z~pN=2By2Gt2mkb@Nf1e@TK4VzEqLl8I$vvm~Lkb3*qW{ri?8aAlaHz!PHIKUjB zYKRF})UQ|;$s%E&;w5ET%!YDOh6537iA-GMMfTj{#oG-+OFiaQV=)ujBrZ|sX$KNV zB3esZ*q28#__4 zVmcl*>bT~@TgwA`u~}CGc?(q8<%fXcqx$Kb22i+1%eU=NADQc2baSL*hr1K=-Cmwe zCfS7uU=+jVW|?e?t8tXe#-MD3C%NF($Z+{oM=1JObb6SbP7XfydY%0GF_IZCo@OL* zz_iJ-E*Ga#lqeI793feOFf9%vhYw~bnDXmx#U1t36wF^vWwB~BuSF?tg0djX!Qr)- zecmd<h zew(j8!U}Jf9Wi?Cq_gcy!FfXfD=#j2HbK6Dbyp!=Cll^g6Y@xd?Oc6&bJdvK zV1_@EzNkTU^OdSD&_#uDo#OJ*-m7&xdV$5FBlJQWIxa_Dj7k}(;gDX(N^3D_Il8ON zRcy>4-*>zQ^%JQmeKsc9*F!Y9MQ?}BPh>_?cS26P;z&FE-+QTc{3C}W9}TDW6l->S$G=g#%Rrnd}Z)U{yr%y`7_`OI6;X)xWYvTI53;a zu9Ox74YimvC;63Xz6jyo$cE90bf)}gNe#lY7XsNaCU;L}>B;pMz20T2gx*H~YJX<5 z!QR!mR^ITs?+5%lp+4rJ5UjEfz8%F_H)$%GK+n!%qR?tr(p|4|G4UEZ8%cY(ak&ha!4N9Jbmlb#7hJ)A~IBZ_?jqub=Ee5~@y+tip50 zt2lg3JyQQ|Lk67hhcAT6|8kXo1Ft+BcTVNk`94yMJQb0O>FeAVVb{$^`wd19{uzU2 zAZN=n9JSIGv*7&bfg}}G3VtXxg1E^64RG#PHsjMQRp4P%m-EKX8`ME+%0~L0=$A2b8Kzhd8lk5`vf@U&`OKv35g5L8N%o9NynN3W=TtO4z zGl6LtVN=-NWDSF%Ei}t$p*E@=65BBVuZ5(ENaZ3y0JoTVfGXK9-RUPeRRu=~h+D@zL5P}qXqZfz4L7(Zn!#rIPRu9Lx23;)i~61rH;QCk&HBtNJsP{==*&FqMx{l@R^7rd?D-;N`W6-aY7)` zpGJFt+Jy2uHwpTQgM>}{CS&uih_58_j-s@I*o(P~>J9o5)C>C4=W-X0)mIH^ z=W>CcL6HyDf%$QGP=BXK(tq2+`eo6@`;>tsaNG#5C0+`{!o-qX`*h{J|(H08q!J z74g@pcf6y>r1IDc9sPb)?G|1!!(hmlPR`Qwejh9N-g~m^*P9`qVc->S?ojQPw_al9<|f6VV|_lGo^nWdblVZsGdj@G5UmLgPldilZK}q za&!F#Y%HEUVo&>@yRU&^TyQ(>^jg#sqK|)nS=?Z!IZ@OhNh&b>toG zVK+cDB<%||{OH&C0)uX4Ti_1+Wsaq0=YwC>-1R2f{3Q=e>$&P*AMC8La4s+ECbk{l zDhj{1O^tlMdwYZu!w9uvvI7ob`;eJUeM|TO2d6E8!$xhdC6f}lUI|y7spUVI^C)HR%>fP6EOlCSU*V(pD)u zT!+Bn`vGii6oxcHU>Y-24@MGNRT}qZ&6X{z@Uc`hOp^BjO}|Ck-?IO^Y3Tc(Y$`sq zd^14%szc$|#<~bxcgiqMTw1;zpf#;&nw_%S%oOV_Qyl$q_gJY)z|?uQn&eJ_F2?DK zpfj1F;aV~2Qb}#Cq@`B;{#Us)qptAF^gp5%)G~1uvmLpu>rcC>GEFz7rDe*dVrkT+ zRhsO7x{5YuUW{>r3Zz@HJ#wT6ovcMRi(S&v3nQ*oS;CX4@r_d(XE5hrt=PG1BOGMM zFTW5ZgvN}7o19?KU;WF zA6xwt!T@-2Prq)}C*V)b)J`s*^M#@iKtA&`oUG((fI+xqE z5X`m5?+kPYx-7v2uOT+~CRQ1%3~fHg=aQv4?rZ!B7mZl{ehcQgvG|dj8Luu2`l>v zLE20TO@~g2pcfgxu4C0q&SP3E+>@MLOd)G#T$!|$RhnAM$`KFD(l7SYo;6cwOjIVw z6$zP%JIoR*L7u3@rLCH|SG||NV}cq#fZrQ=@X(6fyZ7+7Mhr5)EU(O9^=M6Sje_6w zpou>S4TdUsO?6E{ki8T3^6hS8&&PHa*YWeXIXT=s{u8ro=jQP9o+JjVn=~)QF{ec= za5`nOT$+Vi+~&=k!pAbbxQ0o6i#HQzKOEcS*Z|Ujb=X3ooScOWU9m4I3|)*JOKp&$5iX=XIoB%MXu_?#nP?1K zY=;-R#=<}wCZAUxfZQQzj#aCcN-HW_rG~f%ns8OcC(Gilvj>Du%_?%r%{_lB&H>`nUHY|nN(G9or(G3uT3|&0p*jF4iokL5Z zg4a`R$9QE`)dnOv1|5pTBvo5%Si$d7@T?pO*9N#{X-Hr01QAp)W-Zw7wPSW`6 zm@7+r1K#iz3La(1NTZY@Bts>?QHld(h|*}9aVW-h&|lD2o$-?viQ8rKJM!n`Iu_@0 zmwL_8g62`E@gX`9uESL}N)mugznwHcO0uRh_aC_V515KUV)L*1Cr8uSswm*h9MLwy zAr=r?U%G|AFf5V?`p@2#FyqMu|etW z&RVmQV}@qQ^GR8N#;UG=!i;49q_~@yo8E^UUikX(3aRKGemf^@Hg5aH<5BN}JxmYb zWrefCag^y~if1v91&1!e(ILyiL`}#sTIjPRn}Q$p@RmEkFX>zs6(GV3eg`9rr93Fs zfk5g5k=RPFAC7502vJa>J{V|MF0kT_z&z| z#;Pe*|Glx_jH-gZ{que`)QrlycAyg~kJu3bm3R7YL^bsOpKq&vExEJy?!E7Dq^3V{ z5Y5<2rJ?inEOk+Tq8W8+rk>@~C3XWrZROGqVaHP8QhTqm7|FW|bQ^_6xxn~esb{J# zeCl5Wm??5N&&nvEtYzi+u)`c3rC^4tNIHGO?&;G#HE8cre|D_H#LTv@pxdnX`Z)_3_@Qt+~}Lt2P{s4eFg0d$>G&wwd-J6 zuQeWK*7Fjp3Qyt-=>#Bx zSc}pn2=siHCu|32HE7Zs(=$YdAfLf)26u;_?|>6cHaI2iS)y!6NFhgex$kVSlvc)# zqE){@9=}H|=<4w33%0G(wQX+X;j3#E-PwoWF-1=k&=OUk0R@$oYJhgcqCB8Rj&&X& zh%RyHQ3{qW5X?gGV!<{I%bl@*J0B5q5SnT@$p$o*nt@yn4o$5(=vYAI0;pOhC3^OX z_p~`$^J?xiTptbu9$@q0>SS+c6Hi8i#cVhX>U7C7|eIeSnTpBIgC8|+zU2W%xXGCDy0+0+D0<-!QIj0R$Drx=Mk*d%NoUV4Z zH^9}EZmUb9~HY^zi>4W+Agvz0D&R#0PF{jRxRZIgMJ$ZRI? zob4TB(bkQEc+=a!U_Iq1Pws?E!#*K4Cl+48)zoc*iJFWMR^c%K)S*MfM0~MznKn2W z_$&wEk#ARuc_Ev2@{TDY#YFN_YaNvA)8u;j6=H3FNJ~=)Y%A4|B{1w-slS1$t*h72 z)=j(Jq?Slu7lXR#7Il;Bb2RfZlgv$i1tLWaSxDdw2+gr-<&Y-#~9A#RaT)wyDa8l|brw(HZ!?3G`NkGA4wW1}9`!l2r} zwLaY^$tPf$AhtSWgi&>L06AS6OH%qow_dZ#n!-6+YB-ItJi^l!Njf8;%ew>%FF)&Q z)g$y7VAeI<^fhGU8j7-b!TL)x-?J*J%u~jVCYKhkqJ6%H9^D`6mWeSvE|7w*EOVm5 z%|azYXwUOa zn=GYrszml9X)VmTuM#KaEf%6pwF;;%0QZiQ^0eig&wI562%bN$uY3MMH`@DmZ{NHg z^uK!f;?|98S5KYn^_}S1x@Gf5r=#v!{nJXD$skHk6Q)iWBsKxx#il$io=mO6q%o*2 zH3g;mN%g52F}!i8feQ3XS-`{XyWsr8$wYGTXbDZs=ZPg*LYSMf$!B$!=2zi6(`+C0 zohaOf4kWUhuR#%#1_B)`N{yuL9%^=Jb{=FvLF=U*;K^(0sWx^0&$oV-%S2e7pVFUOcD3~EeV~Lyn6%*qj-h5@B;vF+dCS$Oh|#WK zR&1Ta@I_VqqNzx^Cf&_<=VI!NT}-P+;eOGTf)NXN>%;K`=iW4zc%Hyq(`sIXxuwKy zutJirE?q@8(kUibri2Ngi!hY1(aa#6E!E{^kZ3zN#y%jx2m_dT{3*?J1J$Byq#NMj z6?l|0iY2dRIj&-fRhh6%r+S&DeU$pz-9{5NeeRn)?VxP^s*Jk`fbmCTi$%ID&Y@nG z`eM!#1%0;kgMR8${=zh<&J)fre*Q+!@8^}5UwZMWCmvtp`SilMKum$ zUpw^V2H^zu6xIs~UGz}(mc0ocnEj0zqGXBQfN8SVph$`ljkMCdfu2w1{tXGW;?;Y( zhGmMSfedKT3At`7qY&aHVmz64%S$K==+~eUZ}ArSzY!f>nm@L;KS1r|zJKtY%0JIt zpPXE{>hbk`zf__Xb9kY1PT=^Vf9v&J$1Yi=Yih>3)3wWwu6V8@lHEDM#49i{!8W;> zvoPKpy?I}tBYr@OVr=zyxJ5SxZ zaeQ!Cs0AKdIwH~$v(RcE(TS>LVEQ3MumMoZ`q1=TvypFv2Bp|>KKhX#KVaP@zWm8< z6smG6O^^Kd>hleaHkK9Q{mm9-3XH*q34)v?4~7^!q1GlxgK!K&ldz5~2{%N=CGABt&oY1QgZ@6Vad&|?!)7f-1{CqChZToKCROPI=%j5B| z>l3DS=SUMsQNH34crni4D1{I}7a+oB=i=<6@tI{=uyp!b=X+a$8k_Q@skivT&I!zh z!_{2F0MF;y#k{6UA~@h_ep(&^NsZ%7V9R4;V6t*X$o*-2g!_B%$kd~zbuWmP%d>W* zt3&CHG6ObNa-4CmwQtN7Mmeb z06`c8XT6Xq{X&?kikVK=e6F-v+dam5AA#Q{@|UOGiAsN>p}P7r3MZHIjWG}g<9;`r zAT&k5`y()eE|R&|r-|yw&?n=!ZUdd;d=Y|%9~Qg%w!XsUmtNdlqV&h#zxdTl(q(4( z!sZL}spsShzD)ni+B+rw?^y%2r4M)i9VjaAEs^@Ofth}CecmN8+wBpt`sek239Emh zcA~^z|Hj?4*muZ}j$3=KUUpxizpS=2T~5#}bKAUuT(|i()YR6mp+ZCzrza=|_$f5* z2t22ulG+AT~E?feEhgpxg6u7MZC=U9LU zvUodz=7fqc+(tKVrcbeNWKL1a!4({snFF0oGjHopBL4j@YZ_geJ?1}~%l@k$?`iv( z{PK@s+2qOnK;z#9{HKNe%t6^dcv(lUGcw3@1t;{3d9i^(`;vPzk$kV&o^O7w*Icf*U+ z)XF>uBPn=FXlOzx!w@${CNt?U2w?a+02hEjJB4V4&gf{GPFLs}{}f@OVmcuP4v{CP zi9*z{%@ZxZF68f7X3ijtNmonZoLthlHzsO~8H?ZJ=#}hNSYxWGlax5v4B<X4-j||A2KDx#a2H7zvN11 zOF5Yc58X;BZ^)q%^4T=c^UGc^&1ZV_d9%bz@AOTy>Z_9z@3 z`*WAfpCo0l^}k(mfRZ`n-;IyPLX47okM+m?TK|W$H@&mm4ZPux`teEqzi7G0FFxx= z{)fKBGL=hqUOYX0w}BlKaW>cXCZz&uNNNYeq#ah}rx_bHshDOFFre@|Asn`v2UW2MUkJFLkm*+>EZKJD!8t&WH z+@CN2dmKEW$P;MiA)&&SLwvFI0sVO!Ok7mBiu~?Cf2_7XN-5b}VuW0<_mUE_HD2Lx zpguDSOsh#H^CJ7`lGWS&@-coNy&4Hr=|Y-Wns z&5`_ByM-*&(|QqEBIa1j4a*?CdGeNOQB|}do@J9EqmDTO z;}8G;vlW2Kd7j*=61s>URpxU8E`H@B~Qy{@ohkP{ubSXfkH6!Q;@MmUGQbyP(TTC CrWaHI literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/_static/images/agid-logo.svg b/rp-vp-kid/en/_static/images/agid-logo.svg new file mode 100644 index 000000000..a81f5eb84 --- /dev/null +++ b/rp-vp-kid/en/_static/images/agid-logo.svg @@ -0,0 +1,25 @@ + + + +Logo dell&Agenzia per l&Italia Digitale +Emblema della Repubblica Italiana con accanto l&acronimo AGID + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/en/_static/images/may.svg b/rp-vp-kid/en/_static/images/may.svg new file mode 100644 index 000000000..53670ba97 --- /dev/null +++ b/rp-vp-kid/en/_static/images/may.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/en/_static/images/must.svg b/rp-vp-kid/en/_static/images/must.svg new file mode 100644 index 000000000..177c3c51e --- /dev/null +++ b/rp-vp-kid/en/_static/images/must.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/en/_static/images/must_not.svg b/rp-vp-kid/en/_static/images/must_not.svg new file mode 100644 index 000000000..8c0c0d852 --- /dev/null +++ b/rp-vp-kid/en/_static/images/must_not.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/en/_static/images/should.svg b/rp-vp-kid/en/_static/images/should.svg new file mode 100644 index 000000000..c1f35d655 --- /dev/null +++ b/rp-vp-kid/en/_static/images/should.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/en/_static/images/should_not.svg b/rp-vp-kid/en/_static/images/should_not.svg new file mode 100644 index 000000000..88e64a64c --- /dev/null +++ b/rp-vp-kid/en/_static/images/should_not.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/en/_static/images/team-digitale-logo.svg b/rp-vp-kid/en/_static/images/team-digitale-logo.svg new file mode 100644 index 000000000..fa557011d --- /dev/null +++ b/rp-vp-kid/en/_static/images/team-digitale-logo.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/rp-vp-kid/en/_static/jquery-3.6.0.js b/rp-vp-kid/en/_static/jquery-3.6.0.js new file mode 100644 index 000000000..fc6c299b7 --- /dev/null +++ b/rp-vp-kid/en/_static/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Cryptographic algorithms

+

The following algorithms MUST be supported:

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Algorithm `alg` parameter value

Description

Operations

References

ES256

Elliptic Curve Digital Signature Algorithm (ECDSA) using one of the enabled curves listed in the section below and SHA256.

Signature

RFC 7518, [SOG-IS], [ETSI] .

ES384

Elliptic Curve Digital Signature Algorithm (ECDSA) using one of the enabled curves listed in the section below and SHA384.

Signature

RFC 7518, [SOG-IS], [ETSI] .

ES512

Elliptic Curve Digital Signature Algorithm (ECDSA) using one of the enabled curves listed in the section below and SHA521.

Signature

RFC 7518, [SOG-IS], [ETSI] .

RSA-OAEP-256

RSA Encryption Scheme with Optimal Asymmetric Encryption Padding (OAEP) using SHA256 hash function and the MGF1 with SHA-256 mask generation function.

Key Encryption

RFC 7516, RFC 7518.

A128CBC-HS256

AES encryption in Cipher Block Chaining mode with 128-bit Initial Vector value, plus HMAC authentication using SHA-256 and truncating HMAC to 128 bits.

Content Encryption

RFC 7516, RFC 7518.

A256CBC-HS512

AES encryption in Cipher Block Chaining mode with 256-bit Initial Vector value, plus HMAC authentication using SHA-512 and truncating HMAC to 256 bits.

Content Encryption

RFC 7516, RFC 7518.

+

The following Elliptic Curves MUST be supported for the Elliptic Curve Digital Signature Algorithm:

+ +++++ + + + + + + + + + + + + + + + + +

Curve Family

Short Curve Name

References

Brainpool

brainpoolP256r1, brainpoolP384r1, brainpoolP512r1.

RFC 5639, [ETSI] .

NIST

P-256, P-384, P-521

[ETSI], [FIPS-186-4], [ISO/IEC 14888-3].

+

The following algorithms are RECOMMENDED to be supported:

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Algorithm `alg` parameter value

Description

Operations

References

PS256

RSASSA (RSA with Signature Scheme Appendix) with PSS ( Probabilistic Signature Scheme) padding using SHA256 hash function and MGF1 mask generation function with SHA-256.

Signature

RFC 7518, [SOG-IS].

PS384

RSASSA (RSA with Signature Scheme Appendix) with PSS ( Probabilistic Signature Scheme) padding using SHA384 hash function and MGF1 mask generation function with SHA-384.

Signature

RFC 7518, [SOG-IS].

PS512

RSASSA (RSA with Signature Scheme Appendix) with PSS ( Probabilistic Signature Scheme) padding using SHA512 hash function and MGF1 mask generation function with SHA-512.

Signature

RFC 7518, [SOG-IS].

ECDH-ES

Elliptic Curve Diffie-Hellman (ECDH) Ephemeral Static key agreement using Concat Key Derivation Function (KDF).

Key Encryption

RFC 7518.

ECDH-ES+A128KW

ECDH-ES using Concat KDF and content encryption key (CEK) wrapped using AES with a key length of 128 (A128KW).

Key Encryption

RFC 7518.

ECDH-ES+A256KW

ECDH-ES using Concat KDF and content encryption key (CEK) wrapped using AES with a key length of 256 (A256KW).

Key Encryption

RFC 7518.

+

The following algorithms MUST NOT be supported:

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Algorithm `alg` parameter value

Description

Operations

References

none

    +
  • +
+

Signature

RFC 7518.

RSA_1_5

RSAES with PKCS1-v1_5 padding scheme. Use of this algorithm is generally not recommended.

Key Encryption

RFC 7516, [Security Vulnerability], [SOG-IS].

RSA-OAEP

RSA Encryption Scheme with Optimal Asymmetric Encryption Padding (OAEP) using default parameters.

Key Encryption

RFC 7518, [SOG-IS].

HS256

HMAC using SHA256.

Signature

RFC 7518.

HS384

HMAC using SHA384.

Signature

RFC 7518.

HS512

HMAC using SHA512

Signature

RFC 7518.

+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/backup-restore.html b/rp-vp-kid/en/backup-restore.html new file mode 100644 index 000000000..b54c522a0 --- /dev/null +++ b/rp-vp-kid/en/backup-restore.html @@ -0,0 +1,1477 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | backup-restore.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

backup-restore.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/contribute.html b/rp-vp-kid/en/contribute.html new file mode 100644 index 000000000..aaf395d7b --- /dev/null +++ b/rp-vp-kid/en/contribute.html @@ -0,0 +1,1481 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | How to contribute + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

How to contribute

+

The IT Wallet project, including this document, follows an open development process. This approach ensures the development process is accessible to all, inviting all interested parties to participate.

+

Consequently, stakeholders, national and international community members are not only encouraged but also heartily welcomed to contribute to the refinement of these technical rules.

+

Below are several methods available for contributing to this project:

+
    +
  • GitHub issues. By opening an issue, you can seek clarification, propose enhancements, or report editorial typos. If you are working on an issue, we encourage you to open a draft pull request and link it.

  • +
  • Pull requests. Pull requests represent active contributions to the project, typically, but not always following issue-based discussions. Once a pull request is initiated, it facilitates discussion and review of the proposed changes before they are merged into the main branch (versione-corrente).

  • +
  • Developers Italia Slack channel. Slack is a messaging application designed for businesses, connecting people to the information they need. Developers Italia is an open community based on contributions and participation from public administrations, developers, technicians, students, and citizens. Developers Italia has initiated a Slack channel that [everyone can join for free](https://slack.developers.italia.it/), where you can learn about all their activities and partake in discussions.

  • +
+
+

Acknowledgements

+

We would like to thank the following individuals for their comments, +concerns, ideas, contributions, some of which substantial, to this +implementation profile and to the initial set of implementations.

+
    +
  • Alen Horvat

  • +
  • Amir Sharif

  • +
  • Andrea Prosseda

  • +
  • Emanuele De Cupis

  • +
  • Emiliano Vernini

  • +
  • Francesco Grauso

  • +
  • Francesco Marino

  • +
  • Francesco Ventola

  • +
  • Giada Sciarretta

  • +
  • Giuseppe De Marco

  • +
  • Klaas Wierenga

  • +
  • Kristina Yasuda

  • +
  • Leif Johansson

  • +
  • Lorenzo Cerini

  • +
  • Mart Aarma

  • +
  • Marta Sciunnach

  • +
  • Michele Silletti

  • +
  • Nicola Saitto

  • +
  • Niels van Dijk

  • +
  • Oliver Terbu

  • +
  • Paul Bastien

  • +
  • Pasquale De Rose

  • +
  • Peter Altmann

  • +
  • Riccardo Iaconelli

  • +
  • Roland Hedberg

  • +
  • Salvatore Laiso

  • +
  • Salvatore Manfredi

  • +
  • Stefano Alifuoco

  • +
  • Takahiko Kawasaki

  • +
  • Torsten Lodderstedt

  • +
  • Vladimir Duzhinov

  • +
+

If anyone has been forgotten, please accept our apologies with the +request to propose the modification of this page via a [Pull Request](https://github.com/italia/eudi-wallet-it-docs) +with a brief description of the contribution offered, during which +event or channel, and during which period. We will then have the opportunity +to apologize again and make amends as soon as possible, including you in the list.

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/defined-terms.html b/rp-vp-kid/en/defined-terms.html new file mode 100644 index 000000000..5da013836 --- /dev/null +++ b/rp-vp-kid/en/defined-terms.html @@ -0,0 +1,1554 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Normative Language and Conventions + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Normative Language and Conventions

+

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.

+
+
+

Defined Terms

+

The terms User, Trust Service, Trust Model, Trusted List, Trust Framework, Attribute, Electronic Attestations of Attributes Provider or Trust Service Provider (TSP), Person Identification Data (PID), Revocation List, Qualified Electronic Attestations of Attributes Provider or Qualified Trust Service Provider (QTSP), Electronic Attestation of Attributes (EAA), are defined in the EIDAS-ARF.

+

Below are the description of acronyms and definitions which are useful for further insights into topics that complement the it-wallet and the interacting components.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Accreditation Body

An entity accredited by the Federation Authority, responsible for managing the process of verification and certification of accreditation requirements for ecosystem roles.

Digital Identity Provider

An entity, recognized and accredited by the State, responsible for identifying citizens for the issuance of an Electronic Identity Certificate.

Digital Credential

An signed Credential whose integrity can be cryptographically verified using the public keys of its Issuer. It is also known as Credential.

Federation Authority

A public governance entity that issues guidelines and technical rules, and administers - directly or through its intermediary - Trusted Lists, services, and accreditation processes, the status of participants, and their eligibility evaluation. It also performs oversight functions.

Wallet Instance

An instance of the Wallet Solution, installed on a personal mobile device and controlled by a specific User who is its sole owner. It is the application that enables citizens to fully and autonomously manage their digital identity and EAAs.

Wallet Provider

All public and/or private entities, conforming to a technical profile and accredited by the Federation Authority, that provide citizens with an IT Wallet Instance.

Wallet Attestation

Verifiable Attestation, issued by the Wallet Provider, that proves the security compliace of the Wallet Instance.

Wallet Secure Cryptographic Device

Hardware-backed secure environment for creating, storing, and/or managing cryptographic keys and data. A WSCD MAY implement an association proof in different ways. This largely depends on the implementation of the WSCD for example: remote HSM, external smart card, internal UICC, internal native cryptographic hardware, such as the iOS Secure Enclave or the Android Hardware Backed Keystore or StrongBox

Credential Status Attestation

Verifiable Attestation proving that a related Digital Credential is not revoked.

Device Integrity Service

A service provided by device manufacturers that verifies the integrity and authenticity of the app instance (Wallet Instance), as well as certifying the secure storage of private keys generated by the device within its dedicated hardware. It's important to note that the terminology used to describe this service varies among manufacturers.

Cryptographic Hardware Keys

During the app initialization, the Wallet Instance generates a pair of keys, one public and one private, which remain valid for the entire duration of the Wallet Instance's life. Functioning as a Master Key for the personal device, these Cryptographic Hardware Keys are confined to the OS domain and are not designed for signing arbitrary payloads. Their primary role is to provide a unique identification for each Wallet Instance.

Cryptographic Hardware Key Tag

A unique identifier created by the operating system for the Cryptographic Hardware Keys, utilized to gain access to the private key stored in the hardware.

Key Attestation

An attestation from the device's OEM that enhances your confidence in the keys used in your Wallet Instance being securely stored within the device's hardware-backed keystore.

Qualified Electronic Attestation of Attributes (QEAA)

A digitally verifiable attestation in electronic form, issued by a QTSP, that substantiates a person's possession of attributes.

Qualified Electronic Signature Provider

The Electronic Trust Service Provider responsible for the issuing of Qualified Electronic Signature certificates to the User.

Relying Party

A natural or legal person that implements an authentication system requiring electronic attribute attestation submissions as an authentication mechanism.

Verifier

See Relying Party.

Trust Attestation

Electronic attestation of an entity's compliance with the national regulatory framework, which is cryptographically verifiable and cannot be repudiated over time by the entity that issued it. A Trust Attestation is always related to a particular Trust Framework.

Trust Layer

An architectural component that enables IT Wallet system participants to establish trust, in terms of reliability and compliance of all participants with the regulatory framework governing the digital identity system.

Trust Model

System defining how the participants of the ecosystem establish and maintain trust in their interactions. The Trust Model outlines the rules and the procedures for the entities (like users, systems, or applications) should validate each other's identities, authenticate, and establish the level of trust before exchanging information.

Level of Assurance

The degree of confidence in the vetting process used to establish the identity of the User and the degree of confidence that the User who presents the credential is the same User to whom the Digital Credential was issued.

Holder Key Binding

Ability of the Holder to prove legitimate possession of the private part, related to the public part attested by a Trusted Third Party.

+
+

Acronyms

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Acronym

Description

OID4VP

OpenID for Verifiable Presentation

PID

Person Identification Data

VC

Verifiable Credential

VP

Verifiable Presentation

API

Application Programming Interface

LoA

Level of Assurance

AAL

Authenticator Assurance Level as defined in https://csrc.nist.gov/glossary/term/authenticator_assurance_level

WSCD

Wallet Secure Cryptographic Device

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/genindex.html b/rp-vp-kid/en/genindex.html new file mode 100644 index 000000000..80d120bf6 --- /dev/null +++ b/rp-vp-kid/en/genindex.html @@ -0,0 +1,1504 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Index + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + +

Index

+ +
+ R + +
+

R

+ + +
+ + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/index.html b/rp-vp-kid/en/index.html new file mode 100644 index 000000000..0df330b7e --- /dev/null +++ b/rp-vp-kid/en/index.html @@ -0,0 +1,1642 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | The Italian EUDI Wallet implementation profile + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + +
+

The Italian EUDI Wallet implementation profile

+
+

Introduction

+

The European Parliament has adopted the revision of the eIDAS Regulation concerning electronic identification and trust services, introducing a significant innovation: the European Digital Identity Wallet. This update marks a pivotal advancement in the EU's digital strategy, aiming to enhance the security, interoperability, and usability of digital identities across Member States. For further details, resources, and notes on this legislative development, please refer to the official EU Commission and Parliament websites.

+

Italy has launched the National digital identity Wallet solution, known as IT Wallet, in direct response to the European community's directives. This initiative ensures full interoperability with the digital identity solutions provided by other European Member States, aligning completely with European regulations.

+

The purpose of the following technical rules is to define the technical architecture and reference framework to be used as a guideline by all the parties involved in the development of the IT Wallet project.

+

This documentation defines the national implementation profile of EUDI Wallet, containing the technical details about components of the Wallet ecosystem, as listed below:

+
+
    +
  • Entities of the ecosystem according to EIDAS-ARF.

  • +
  • Infrastructure of trust attesting realiability and eligibility of the participants.

  • +
  • PID and EAAs data schemes and attribute sets.

  • +
  • PID/EAA in MDL CBOR format.

  • +
  • PID/EAA in SD-JWT format.

  • +
  • Wallet Solution general architecture.

  • +
  • Wallet Attestation.

  • +
  • Issuance of PID/EAA according to OpenID4VCI.

  • +
  • Presentation of PID/EAA according to OpenID4VP.

  • +
  • Presentation of pseudonyms according to SIOPv2.

  • +
  • PID/EAA backup and restore mechanisms.

  • +
  • PID/EAA revocation lists.

  • +
+
+
+
+

Index of content

+
+ +
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/objects.inv b/rp-vp-kid/en/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..4d48361b3d0d817a0a62cffc78d56e17c034ac13 GIT binary patch literal 1689 zcmV;K24?vqAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkZXk{Qt zbYX01VQwHrRYXZ3S7B^yWpp5EZE$R5ZDnqBVRUJ4ZXj@SZ)Rz1WeOu8R%LQ?X>V>i zAa-SPb7^mGIv{LebY*jN3L_v?Xk{RBWo=<;Ze(S0Aa78b#rNMXCQiPX<{x4c-o~{O_Sp$5WV|XP~|=B9@tbWx7?=YBkQV3;>>K4 zqY6vdVipN4pqX`keHsuFAjy_JRl7A-L%)7BO?Ly~2O*g*D}|IUel0|f@Xv_!($A%? zIJ%X`MvH?aP08|LbhRV-x3t7SlgOmftFg#}aI&L(24)@0u+hP*T+~{! zU8^G&gVZtjBHoY|fjH0`8&9;?!?!g$0VZidYt0DH8qs7gZ#tttVoXV2MNTvmHReod z)gkwa7!)xmVo<~(;GhUUzqhdX%dvwA9fmVg&^@bZfi;zJAVdSsg?|WH0mLgskEA}d zhk$K59&2=lC3k@2wXvm;_KEoG|87$Aagej3m96z%9fEyyg ze@gJy%v-`dh5ce?K3Y~=DSoiZc=`c!PSg7ydhFf)jL|;+_38fR<{F<`&IWmI)2^bu z91ud`r!o6GstMz?n58(Rhb4Jsf>HqRujPg|wbIu7re<(PG+2KcCOym$0Ug~cOthv- zzlYES(6bexn?UsBa-pMhpf#(DG_`uE%Yhs7b2UusvSl#iYY9u%gfmj3`@iot-XE-L zIIVo-qehB7Y{{w;#e~u3i2Z;={aq9-r=58pC5| zl~{E>e0LpM5Y1=8e0$U-9F8d3r&k+tKj9BJ;dTsd%@}&_#!i7Qa`T6I;7UN3nC^NY z_PmV1?T8zk-RxL%9SH39#z=8`j44c{&ajDjWP6$)b4W^xnmQNra5AU#?8djyo59@N z)}dBWiE~a^7guKw%?I1J+*%ETl7XL>9A#?|rfyqRLQ%PCA!H=`FHYzmw>M9p;7c{o zFItje8%+SPYL-?PV=x#Al>cm~>jeq7mYK8}UZwWp+rbq!<6Ahp39>Kq@P>L#L zVlc68T9nL|#;gy^%giTjQ(DMJ>t%2+5?9!9dNUyzS*Rt+!cOuEV*n8~qf`CCHXMf= zpN8W850z}ss2r_Y1`%)tpGf_ot@8ze<+_|K=yLoO@d^UtmdW20Pqj|FW7_ehB;ObW zMArje8-Z^O_ZXuXJVQl`Z*;~l^BKk}_3Qs?zPud(g}5N7#O>jwE@1ht)1RGS3rXqe&t6heRt64?Oal{`>wE5*s?7vK@ps;*IK6ST7_`^+ zr>zU8aMB{meLK3$0j&51HnIa5?wEN=E3yoslY3p<>3Y!7J6Y$Z8MvtppO`xG+ZlGz j)`IT5m8r{nG87T*Z`J9fIg0TmJ@sBdu1EeKh6D#rMhhzN literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/pid-eaa-data-model.html b/rp-vp-kid/en/pid-eaa-data-model.html new file mode 100644 index 000000000..e6eda4d1f --- /dev/null +++ b/rp-vp-kid/en/pid-eaa-data-model.html @@ -0,0 +1,2394 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | PID/(Q)EAA Data Model + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

PID/(Q)EAA Data Model

+

The Person Identification Data (PID) is issued by the PID Provider according to national laws. The main scope of the PID is allowing natural persons to be authenticated for the access to a service or to a protected resource. +The User attributes provided within the Italian PID are the ones listed below:

+
+
    +
  • Current Family Name

  • +
  • Current First Name

  • +
  • Date of Birth

  • +
  • Unique Identifier

  • +
  • Taxpayer identification number

  • +
+
+

The (Q)EAAs are issued by (Q)EAA Issuers to a Wallet Instance and MUST be provided in SD-JWT-VC or MDOC-CBOR data format.

+

The PID/(Q)EAA data format and the mechanism through which a digital credential is issued to the Wallet Instance and presented to a Relying Party are described in the following sections.

+
+

SD-JWT

+

The PID/(Q)EAA is issued in the form of a Digital Credential. The Digital Credential format is Selective Disclosure JWT format as specified in [SD-JWT-based Verifiable Credentials 02].

+

An SD-JWT is a JWT that MUST be signed using the Issuer's private key. The SD-JWT payload of the MUST contain the _sd_alg claim described in [SD-JWT]. Section 5.1.2. and other claims specified in this section, some of them may be selectively disclosable claims.

+

The claim _sd_alg indicates the hash algorithm used by the Issuer to generate the digests over the salts and the claim values. The _sd_alg claim MUST be set to one of the specified algorithms in Section Cryptographic Algorithms.

+

Selectively disclosable claims are omitted from the SD-JWT. Instead, the digests of the respective disclosures and decoy digests are contained as an array in a new JWT claim, _sd.

+

Each digest value ensures the integrity of, and maps to, the respective Disclosure. Digest values are calculated using a hash function over the disclosures, each of which contains

+
+
    +
  • a random salt,

  • +
  • the claim name (only when the claim is an object property),

  • +
  • the claim value.

  • +
+
+

The Disclosures are sent to the Holder together with the SD-JWT in the Combined Format for Issuance that MUST be an ordered series of base64url-encoded values, each separated from the next by a single tilde ('~') character as follows:

+
<Issuer-Signed-JWT>~<Disclosure 1>~<Disclosure 2>~...~<Disclosure N>
+
+
+

See [SD-JWT VC] and [SD-JWT] for more details.

+
+

PID/(Q)EAA SD-JWT parameters

+

The JOSE header contains the following mandatory parameters:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

typ

MUST be set to vc+sd-jwt as defined in [draft-terbu-sd-jwt-vc-latest].

[RFC7515, Section 4.1.9].

alg

Signature Algorithm.

[RFC7515, Section 4.1.1].

kid

Unique identifier of the public key.

[RFC7515, Section 4.1.8].

trust_chain

JSON array containing the trust chain that proves the reliability of the issuer of the JWT.

[OIDC-FED, Section 3.2.1].

+

The following claims MUST be in the JWT payload. Some of these claims can be disclosed, these are listed in the following tables that specify whether a claim is selectively disclosable [SD] or not [NSD].

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

[NSD].URL string representing the PID/(Q)EAA Issuer unique identifier.

[RFC7519, Section 4.1.1].

sub

[NSD]. The identifier of the subject of the Digital Credential, the User, MUST be opaque and MUST NOT correspond to any anagraphic data or be derived from the User's anagraphic data via pseudonymization. Additionally, it is required that two different Credentials issued MUST NOT use the same sub value.

[RFC7519, Section 4.1.2].

iat

[SD].UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519.

[RFC7519, Section 4.1.6].

exp

[NSD].UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in RFC 7519.

[RFC7519, Section 4.1.4].

status

[NSD].it MUST be a valid JSON object containing the information on how to read the status of the Verifiable Credential. It MUST contain the JSON member status_attestation set to a JSON Object containing the credential_hash_alg claim indicating the Algorithm used for hashing the Digital Credential to which the Status Attestation is bound. It is RECOMMENDED to use sha-256.

[SD-JWT-VC. Section 3.2.2.2] and [OAuth Status Attestations Draft 01].

cnf

[NSD].JSON object containing the proof-of-possession key materials. By including a cnf (confirmation) claim in a JWT, the issuer of the JWT declares that the Holder is in control of the private key related to the public one defined in the cnf parameter. The recipient MUST cryptographically verify that the Holder is in control of that key.

[RFC7800, Section 3.1] and [SD-JWT-VC. Section 3.2.2.2].

vct

[NSD].Credential type as a string, MUST be set in accordance to the type obtained from the PID/(Q)EAA Issuer metadata. For example, in the case of the PID, it MUST be set to PersonIdentificationData.

[SD-JWT-VC. Section 3.2.2.2].

+
+
+

PID Claims

+

Depending on the Digital Credential type vct, additional claims data MAY be added. The PID MUST support the following data:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

given_name

[SD]. Current First Name.

[OpenID Connect Core 1.0, Section 5.1]

family_name

[SD]. Current Family Name.

[OpenID Connect Core 1.0, Section 5.1]

birth_date

[SD]. Date of Birth.

unique_id

[SD]. Unique citizen identifier (ID ANPR) given by the National Register of the Resident Population (ANPR). It MUST be set according to ANPR rules

tax_id_code

[SD]. National tax identification code of natural person as a String format. It MUST be set according to ETSI EN 319 412-1. For example TINIT-<ItalianTaxIdentificationNumber>

+
+
+

PID Non-Normative Examples

+

In the following, the non-normative example of a PID in JSON format.

+
{
+  "iss": "https://issuer.example.org",
+  "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs",
+  "iat": 1683000000,
+  "exp": 1883000000,
+  "status": {
+    "status_attestation": {
+      "credential_hash_alg": "sha-256"
+    },
+  "vct": "PersonIdentificationData",
+  "unique_id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
+  "given_name": "Mario",
+  "family_name": "Rossi",
+  "birth_date": "1980-01-10",
+  "tax_id_code": "TINIT-XXXXXXXXXXXXXXXX"
+}
+
+
+

The corresponding SD-JWT verson for PID is given by

+
{
+   "typ":"vc+sd-jwt",
+   "alg":"ES256",
+   "kid":"dB67gL7ck3TFiIAf7N6_7SHvqk0MDYMEQcoGGlkUAAw",
+   "trust_chain" : [
+    "NEhRdERpYnlHY3M5WldWTWZ2aUhm ...",
+    "eyJhbGciOiJSUzI1NiIsImtpZCI6 ...",
+    "IkJYdmZybG5oQU11SFIwN2FqVW1B ..."
+   ]
+}
+
+
+
{
+  "_sd": [
+    "7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc",
+    "NOxVzjUJg667iBdeDwmr6tZ46X-jchKwIVxMAfv43yc",
+    "TK2RguPYoXzCx0vv5hbN9u5M2mHlWBt41qGWlLXCNu8",
+    "UHChpGtNF2bj1FvAfBby1rnf7WXkxelFJ5a4vSj2FO4",
+    "q6Tqnxau97tu-MqUDg0fSAmLGZdSuMUMk6a2s3bcsC0",
+    "wyfxVqq9BosPT7tN4SHOI4E48P19aVA1ktW5Zf0E-fc"
+  ],
+  "exp": 1883000000,
+  "iss": "https://pidprovider.example.org",
+  "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs",
+  "status": {
+    "status_attestation": {
+      "credential_hash_alg": "sha-256"
+    }
+  },
+  "vct": "PersonIdentificationData",
+  "_sd_alg": "sha-256",
+  "cnf": {
+    "jwk": {
+      "kty": "EC",
+      "crv": "P-256",
+      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
+      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
+    }
+  }
+}
+
+
+

In the following the disclosure list is given

+

Claim iat:

+
    +
  • SHA-256 Hash: 7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc

  • +
  • Disclosure: +WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd

  • +
  • Contents: ["57mvycTh5yZCrKLZ5xnfUw", "iat", 1683000000]

  • +
+

Claim unique_id:

+
    +
  • SHA-256 Hash: NOxVzjUJg667iBdeDwmr6tZ46X-jchKwIVxMAfv43yc

  • +
  • Disclosure: +WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgInVuaXF1ZV9pZCIsICJ4eHh4 +eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiXQ

  • +
  • Contents: ["kucrBmlo_hMaIFF585RzaQ", "unique_id", +"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]

  • +
+

Claim given_name:

+
    +
  • SHA-256 Hash: wyfxVqq9BosPT7tN4SHOI4E48P19aVA1ktW5Zf0E-fc

  • +
  • Disclosure: +WyJOVE5Sb09pdVZWUnRGNkNFenRkOVp3IiwgImdpdmVuX25hbWUiLCAiTWFy +aW8iXQ

  • +
  • Contents: ["NTNRoOiuVVRtF6CEztd9Zw", "given_name", "Mario"]

  • +
+

Claim family_name:

+
    +
  • SHA-256 Hash: UHChpGtNF2bj1FvAfBby1rnf7WXkxelFJ5a4vSj2FO4

  • +
  • Disclosure: +WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgImZhbWlseV9uYW1lIiwgIlJv +c3NpIl0

  • +
  • Contents: ["FDSSPggzGBUwQLHDSE6wQQ", "family_name", "Rossi"]

  • +
+

Claim birth_date:

+
    +
  • SHA-256 Hash: TK2RguPYoXzCx0vv5hbN9u5M2mHlWBt41qGWlLXCNu8

  • +
  • Disclosure: +WyJLWjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImJpcnRoX2RhdGUiLCAiMTk4 +MC0wMS0xMCJd

  • +
  • Contents: ["KZ8e5wVEtDvb1ziSPA4DzA", "birth_date", "1980-01-10"]

  • +
+

Claim tax_id_code:

+
    +
  • SHA-256 Hash: q6Tqnxau97tu-MqUDg0fSAmLGZdSuMUMk6a2s3bcsC0

  • +
  • Disclosure: +WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgInRheF9pZF9jb2RlIiwgIlRJ +TklULVhYWFhYWFhYWFhYWFhYWFgiXQ

  • +
  • Contents: ["pZ5MRyOxpVWZuHLoJ-yjRg", "tax_id_code", +"TINIT-XXXXXXXXXXXXXXXX"]

  • +
+

The combined format for the PID issuance is given by

+
eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImV4YW1wbGUrc2Qtand0In0.eyJfc2QiOiBb
+IjdXRzRuVDZLMjZfUjM5NzV6Y3duVndnb0hBN2I5ODhfMy12SnpiWmY2WWMiLCAiTk94
+VnpqVUpnNjY3aUJkZUR3bXI2dFo0NlgtamNoS3dJVnhNQWZ2NDN5YyIsICJUSzJSZ3VQ
+WW9YekN4MHZ2NWhiTjl1NU0ybUhsV0J0NDFxR1dsTFhDTnU4IiwgIlVIQ2hwR3RORjJi
+ajFGdkFmQmJ5MXJuZjdXWGt4ZWxGSjVhNHZTajJGTzQiLCAicTZUcW54YXU5N3R1LU1x
+VURnMGZTQW1MR1pkU3VNVU1rNmEyczNiY3NDMCIsICJ3eWZ4VnFxOUJvc1BUN3RONFNI
+T0k0RTQ4UDE5YVZBMWt0VzVaZjBFLWZjIl0sICJleHAiOiAxODgzMDAwMDAwLCAiaXNz
+IjogImh0dHBzOi8vcGlkcHJvdmlkZXIuZXhhbXBsZS5vcmciLCAic3ViIjogIk56Ykxz
+WGg4dURDY2Q3bm9XWEZaQWZIa3hac1JHQzlYcyIsICJzdGF0dXMiOiB7InN0YXR1c19h
+dHRlc3RhdGlvbiI6IHsiY3JlZGVudGlhbF9oYXNoX2FsZyI6ICJzaGEtMjU2In19LCAi
+dmN0IjogIlBlcnNvbklkZW50aWZpY2F0aW9uRGF0YSIsICJfc2RfYWxnIjogInNoYS0y
+NTYiLCAiY25mIjogeyJqd2siOiB7Imt0eSI6ICJFQyIsICJjcnYiOiAiUC0yNTYiLCAi
+eCI6ICJUQ0FFUjE5WnZ1M09IRjRqNFc0dmZTVm9ISVAxSUxpbERsczd2Q2VHZW1jIiwg
+InkiOiAiWnhqaVdXYlpNUUdIVldLVlE0aGJTSWlyc1ZmdWVjQ0U2dDRqVDlGMkhaUSJ9
+fX0.A36ovweqpCpPkYHX75dg-HIib7zQKlfmMCaixlpOCmEl1CxlX-NtZbFn_kdN0nlJ
+YMLay4xSeetmic_ScLTxdg~WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsI
+DE2ODMwMDAwMDBd~WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgInVuaXF1ZV9pZCIs
+ICJ4eHh4eHh4eC14eHh4LXh4eHgteHh4eC14eHh4eHh4eHh4eHgiXQ~WyJOVE5Sb09pd
+VZWUnRGNkNFenRkOVp3IiwgImdpdmVuX25hbWUiLCAiTWFyaW8iXQ~WyJGRFNTUGdnek
+dCVXdRTEhEU0U2d1FRIiwgImZhbWlseV9uYW1lIiwgIlJvc3NpIl0~WyJLWjhlNXdWRX
+REdmIxemlTUEE0RHpBIiwgImJpcnRoX2RhdGUiLCAiMTk4MC0wMS0xMCJd~WyJwWjVNU
+nlPeHBWV1p1SExvSi15alJnIiwgInRheF9pZF9jb2RlIiwgIlRJTklULVhYWFhYWFhYW
+FhYWFhYWFgiXQ~
+
+
+
+
+

(Q)EAA non-normative examples

+

In the following, we provide a non-normative example of (Q)EAA in JSON.

+
{
+  "iss": "https://issuer.example.org",
+  "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs",
+  "iat": 1683000000,
+  "exp": 1883000000,
+  "status": {
+  "status_attestation": {
+    "credential_hash_alg": "sha-256"
+  },
+  "vct": "DisabilityCard",
+  "document_number": "XXXXXXXXXX",
+  "given_name": "Mario",
+  "family_name": "Rossi",
+  "birth_date": "1980-01-10",
+  "expiry_date": "2024-01-01",
+  "tax_id_code": "TINIT-XXXXXXXXXXXXXXXX",
+  "constant_attendance_allowance": true
+}
+
+
+

The corresponding SD-JWT for the previous data is represented as follow, as decoded JSON for both header and payload.

+
{
+   "typ":"vc+sd-jwt",
+   "alg":"ES256",
+   "kid":"d126a6a856f7724560484fa9dc59d195",
+   "trust_chain" : [
+    "NEhRdERpYnlHY3M5WldWTWZ2aUhm ...",
+    "eyJhbGciOiJSUzI1NiIsImtpZCI6 ...",
+    "IkJYdmZybG5oQU11SFIwN2FqVW1B ..."
+   ]
+}
+
+
+
{
+  "_sd": [
+    "-LLA7MCh-YWWYNzFfwZsJBGGiE096fN8d60a-ml3sgo",
+    "7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc",
+    "AFRJaRPZTMaNxYu5IIWPifOAXJCnK-_h1eJt7MymcgM",
+    "TK2RguPYoXzCx0vv5hbN9u5M2mHlWBt41qGWlLXCNu8",
+    "UHChpGtNF2bj1FvAfBby1rnf7WXkxelFJ5a4vSj2FO4",
+    "i9XHLePHyV8OM35l3nf1MKqfpWuD7OFpRamSAsX0-5g",
+    "rhPkItz7BGGpjnWX2SGVH_OV9VhRjz9Hx_INXwBbz6o",
+    "wyfxVqq9BosPT7tN4SHOI4E48P19aVA1ktW5Zf0E-fc"
+  ],
+  "exp": 1883000000,
+  "iss": "https://issuer.example.org",
+  "sub": "NzbLsXh8uDCcd7noWXFZAfHkxZsRGC9Xs",
+  "status": {
+    "status_attestation": {
+      "credential_hash_alg": "sha-256"
+    }
+  },
+  "vct": "DisabilityCard",
+  "_sd_alg": "sha-256",
+  "cnf": {
+    "jwk": {
+      "kty": "EC",
+      "crv": "P-256",
+      "x": "TCAER19Zvu3OHF4j4W4vfSVoHIP1ILilDls7vCeGemc",
+      "y": "ZxjiWWbZMQGHVWKVQ4hbSIirsVfuecCE6t4jT9F2HZQ"
+    }
+  }
+}
+
+
+

In the following the disclosure list is given:

+

Claim iat:

+
    +
  • SHA-256 Hash: 7WG4nT6K26_R3975zcwnVwgoHA7b988_3-vJzbZf6Yc

  • +
  • Disclosure: +WyI1N212eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd

  • +
  • Contents: ["57mvycTh5yZCrKLZ5xnfUw", "iat", 1683000000]

  • +
+

Claim document_number:

+
    +
  • SHA-256 Hash: AFRJaRPZTMaNxYu5IIWPifOAXJCnK-_h1eJt7MymcgM

  • +
  • Disclosure: +WyJrdWNyQm1sb19oTWFJRkY1ODVSemFRIiwgImRvY3VtZW50X251bWJlciIs +ICJYWFhYWFhYWFhYIl0

  • +
  • Contents: +["kucrBmlo_hMaIFF585RzaQ", "document_number", "XXXXXXXXXX"]

  • +
+

Claim given_name:

+
    +
  • SHA-256 Hash: wyfxVqq9BosPT7tN4SHOI4E48P19aVA1ktW5Zf0E-fc

  • +
  • Disclosure: +WyJOVE5Sb09pdVZWUnRGNkNFenRkOVp3IiwgImdpdmVuX25hbWUiLCAiTWFy +aW8iXQ

  • +
  • Contents: ["NTNRoOiuVVRtF6CEztd9Zw", "given_name", "Mario"]

  • +
+

Claim family_name:

+
    +
  • SHA-256 Hash: UHChpGtNF2bj1FvAfBby1rnf7WXkxelFJ5a4vSj2FO4

  • +
  • Disclosure: +WyJGRFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgImZhbWlseV9uYW1lIiwgIlJv +c3NpIl0

  • +
  • Contents: ["FDSSPggzGBUwQLHDSE6wQQ", "family_name", "Rossi"]

  • +
+

Claim birth_date:

+
    +
  • SHA-256 Hash: TK2RguPYoXzCx0vv5hbN9u5M2mHlWBt41qGWlLXCNu8

  • +
  • Disclosure: +WyJLWjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImJpcnRoX2RhdGUiLCAiMTk4 +MC0wMS0xMCJd

  • +
  • Contents: ["KZ8e5wVEtDvb1ziSPA4DzA", "birth_date", "1980-01-10"]

  • +
+

Claim expiry_date:

+
    +
  • SHA-256 Hash: i9XHLePHyV8OM35l3nf1MKqfpWuD7OFpRamSAsX0-5g

  • +
  • Disclosure: +WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgImV4cGlyeV9kYXRlIiwgIjIw +MjQtMDEtMDEiXQ

  • +
  • Contents: ["pZ5MRyOxpVWZuHLoJ-yjRg", "expiry_date", "2024-01-01"]

  • +
+

Claim tax_id_code:

+
    +
  • SHA-256 Hash: -LLA7MCh-YWWYNzFfwZsJBGGiE096fN8d60a-ml3sgo

  • +
  • Disclosure: +WyJqdFZ1S0NwbjdiVGNIckFnX3NlVWJRIiwgInRheF9pZF9jb2RlIiwgIlRJ +TklULVhYWFhYWFhYWFhYWFhYWFgiXQ

  • +
  • Contents: ["jtVuKCpn7bTcHrAg_seUbQ", "tax_id_code", +"TINIT-XXXXXXXXXXXXXXXX"]

  • +
+

Claim constant_attendance_allowance:

+
    +
  • SHA-256 Hash: rhPkItz7BGGpjnWX2SGVH_OV9VhRjz9Hx_INXwBbz6o

  • +
  • Disclosure: +WyJXRGtkNkpzTmhERnZMUDRzMWhRZHlBIiwgImNvbnN0YW50X2F0dGVuZGFu +Y2VfYWxsb3dhbmNlIiwgdHJ1ZV0

  • +
  • Contents: +["WDkd6JsNhDFvLP4s1hQdyA", "constant_attendance_allowance", +true]

  • +
+

The combined format for the PID issuance is represented below:

+
eyJhbGciOiAiRVMyNTYiLCAidHlwIjogImV4YW1wbGUrc2Qtand0In0.eyJfc2QiOiBb
+Ii1MTEE3TUNoLVlXV1lOekZmd1pzSkJHR2lFMDk2Zk44ZDYwYS1tbDNzZ28iLCAiN1dH
+NG5UNksyNl9SMzk3NXpjd25Wd2dvSEE3Yjk4OF8zLXZKemJaZjZZYyIsICJBRlJKYVJQ
+WlRNYU54WXU1SUlXUGlmT0FYSkNuSy1faDFlSnQ3TXltY2dNIiwgIlRLMlJndVBZb1h6
+Q3gwdnY1aGJOOXU1TTJtSGxXQnQ0MXFHV2xMWENOdTgiLCAiVUhDaHBHdE5GMmJqMUZ2
+QWZCYnkxcm5mN1dYa3hlbEZKNWE0dlNqMkZPNCIsICJpOVhITGVQSHlWOE9NMzVsM25m
+MU1LcWZwV3VEN09GcFJhbVNBc1gwLTVnIiwgInJoUGtJdHo3QkdHcGpuV1gyU0dWSF9P
+VjlWaFJqejlIeF9JTlh3QmJ6Nm8iLCAid3lmeFZxcTlCb3NQVDd0TjRTSE9JNEU0OFAx
+OWFWQTFrdFc1WmYwRS1mYyJdLCAiZXhwIjogMTg4MzAwMDAwMCwgImlzcyI6ICJodHRw
+czovL2lzc3Vlci5leGFtcGxlLm9yZyIsICJzdWIiOiAiTnpiTHNYaDh1RENjZDdub1dY
+RlpBZkhreFpzUkdDOVhzIiwgInN0YXR1cyI6IHsic3RhdHVzX2F0dGVzdGF0aW9uIjog
+eyJjcmVkZW50aWFsX2hhc2hfYWxnIjogInNoYS0yNTYifX0sICJ2Y3QiOiAiRGlzYWJp
+bGl0eUNhcmQiLCAiX3NkX2FsZyI6ICJzaGEtMjU2IiwgImNuZiI6IHsiandrIjogeyJr
+dHkiOiAiRUMiLCAiY3J2IjogIlAtMjU2IiwgIngiOiAiVENBRVIxOVp2dTNPSEY0ajRX
+NHZmU1ZvSElQMUlMaWxEbHM3dkNlR2VtYyIsICJ5IjogIlp4amlXV2JaTVFHSFZXS1ZR
+NGhiU0lpcnNWZnVlY0NFNnQ0alQ5RjJIWlEifX19.1kOe6IgFxgbb_jtaLUhM_bgjmby
+j6B63rm_WjaOwpOBsiPSKJY7hBHd2a83euSI8JqbSkVHJS3wcr0kd9ppZRw~WyI1N212
+eWNUaDV5WkNyS0xaNXhuZlV3IiwgImlhdCIsIDE2ODMwMDAwMDBd~WyJrdWNyQm1sb19
+oTWFJRkY1ODVSemFRIiwgImRvY3VtZW50X251bWJlciIsICJYWFhYWFhYWFhYIl0~WyJ
+OVE5Sb09pdVZWUnRGNkNFenRkOVp3IiwgImdpdmVuX25hbWUiLCAiTWFyaW8iXQ~WyJG
+RFNTUGdnekdCVXdRTEhEU0U2d1FRIiwgImZhbWlseV9uYW1lIiwgIlJvc3NpIl0~WyJL
+WjhlNXdWRXREdmIxemlTUEE0RHpBIiwgImJpcnRoX2RhdGUiLCAiMTk4MC0wMS0xMCJd
+~WyJwWjVNUnlPeHBWV1p1SExvSi15alJnIiwgImV4cGlyeV9kYXRlIiwgIjIwMjQtMDE
+tMDEiXQ~WyJqdFZ1S0NwbjdiVGNIckFnX3NlVWJRIiwgInRheF9pZF9jb2RlIiwgIlRJ
+TklULVhYWFhYWFhYWFhYWFhYWFgiXQ~WyJXRGtkNkpzTmhERnZMUDRzMWhRZHlBIiwgI
+mNvbnN0YW50X2F0dGVuZGFuY2VfYWxsb3dhbmNlIiwgdHJ1ZV0~
+
+
+
+
+
+

MDOC-CBOR

+

The PID/(Q)EAA MDOC-CBOR data model is defined in ISO/IEC 18013-5, the standard born for the the mobile driving license (mDL) use case.

+

The MDOC data elements MUST be encoded as defined in RFC 8949 - Concise Binary Object Representation (CBOR).

+

The PID encoded in MDOC-CBOR format uses the document type set to eu.europa.ec.eudiw.pid.1, according to the reverse domain approach defined in the +EIDAS-ARF and ISO/IEC 18013-5.

+

The document's data elements utilize a consistent namespace for the mandatory Mobile Driving License attributes, while the national PID attributes use the domestic namespace eu.europa.ec.eudiw.pid.it.1, as outlined in this implementation profile.

+

In compliance with ISO/IEC 18013-5, the MDOC data model in the domestic namespace eu.europa.ec.eudiw.pid.it.1, requires the following attributes:

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Attribute name

Description

Reference

version

tstr (text string). Version of the data structure being used. It's a way to track changes and updates to the standard or to a specific implementation profile. This allows for backward compatibility and understanding of the data if the standard or implementation evolves over time.

[ISO 18013-5#8.3.2.1.2]

status

uint (unsigned int). Status code. For example "status":0 means OK (normal processing).

[ISO 18013-5#8.3.2.1.2.3]

documents

bstr (byte string). The collection of digital documents. Each document in this collection represents a specific type of data or information related to the Digital Credential.

[ISO 18013-5#8.3.2.1.2]

+

Each document within the documents collection MUST have the following structure:

+ +++++ + + + + + + + + + + + + + + + + +

Attribute name

Description

Reference

docType

tstr (text string). Document type. For the PID, the value MUST be set to eu.europa.ec.eudiw.pid.1. For an mDL, the value MUST be org.iso.18013-5.1.mDL.

[ISO 18013-5#8.3.2.1.2]

issuerSigned

bstr (byte string). It MUST contain the Mobile Security Object for Issuer data authentication and the data elements protected by Issuer data authentication.

[ISO 18013-5#8.3.2.1.2]

+

The issuerSigned object MUST have the following structure:

+ +++++ + + + + + + + + + + + + + + + + +

Attribute name

Description

Reference

nameSpaces

bstr (byte string) with tag 24 and major type 6. Returned data elements for the namespaces. It MAY be possible to have one or more namespaces. The nameSpaces MUST use the same value for the document type. However, it MAY have a domestic namespace to include attributes defined in this implementation profile. The value MUST be set to eu.europa.ec.eudiw.pid.it.1.

[ISO 18013-5#8.3.2.1.2]

issuerAuth

bstr (byte string). Contains Mobile Security Object (MSO), a COSE Sign1 Document, issued by the Credential Issuer.

[ISO 18013-5#9.1.2.4]

+

During the presentation of the MDOC-CBOR credential, in addition to the objects in the table above, a deviceSigned object MUST also be added. deviceSigned MUST NOT be included in the issued credential provided by the PID/(Q)EAA Issuer.

+ +++++ + + + + + + + + + + + + +

Attribute name

Description

Reference

deviceSigned

bstr (byte string). Data elements signed by the Wallet Instance during the presentation phase.

[ISO 18013-5#8.3.2.1.2]

+

Where the deviceSigned MUST have the following structure:

+ +++++ + + + + + + + + + + + + + + + + +

Attribute name

Description

Reference

nameSpaces

tstr (text string). Returned data elements for the namespaces. It MAY be possible to have one or more namespaces. It MAY be used for self-attested claims.

[ISO 18013-5#8.3.2.1.2]

deviceAuth

bstr (byte string). It MUST contain either the DeviceSignature or the DeviceMac element.

[ISO 18013-5#8.3.2.1.2]

+
+

Note

+

A deviceSigned object given during the presentation phase has two purposes:

+
+
    +
  1. It provides optional self-attested attributes in the nameSpaces object. If no self-attested attributes are provided by the Wallet Instance, the nameSpaces object MUST be included with an empty structure.

  2. +
  3. Provide a cryptographic proof attesting that the Holder is the legitimate owner of the Credential, by means of a deviceAuth object.

  4. +
+
+
+
+

Note

+

The issuerSigned and the deviceSigned objects contain the nameSpaces object and the Mobile Security Object. The latter is the only signed object, while the nameSpaces object is not signed.

+
+
+

nameSpaces

+

The nameSpaces object contains one or more IssuerSignedItemBytes that are encoded using CBOR bitsring 24 tag (#6.24(bstr .cbor), marked with the CBOR Tag 24(<<... >>) and represented in the example using the diagnostic format). It represents the disclosure information for each digest within the Mobile Security Object and MUST contain the following attributes:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Encoding

Description

digestID

integer

Reference value to one of the ValueDigests provided in the Mobile Security Object (issuerAuth).

random

bstr (byte string)

Random byte value used as salt for the hash function. This value SHALL be different for each IssuerSignedItem and it SHALL have a minimum length of 16 bytes.

elementIdentifier

tstr (text string)

Data element identifier.

elementValue

depends by the value, see the next table.

Data element value.

+

The elementIdentifier data that MUST be included in a PID/(Q)EAA are:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Namespace

Element identifier

Description

eu.europa.ec.eudiw.pid.1

issue_date

full-date (CBORTag 1004). Date when the PID/(Q)EAA was issued.

eu.europa.ec.eudiw.pid.1

expiry_date

full-date (CBORTag 1004). Date when the PID/(Q)EAA will expire.

eu.europa.ec.eudiw.pid.1

issuing_authority

tstr (text string). Name of administrative authority that has issued the PID/(Q)EAA.

eu.europa.ec.eudiw.pid.1

issuing_country

tstr (text string). Alpha-2 country code as defined in [ISO 3166].

+

Depending on the Digital Credential type, additional elementIdentifier data MAY be added. The PID MUST support the following data:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Namespace

Element identifier

Description

eu.europa.ec.eudiw.pid.1

given_name

tstr (text string). See PID Claims fields Section.

eu.europa.ec.eudiw.pid.1

family_name

tstr (text string). See PID Claims fields Section.

eu.europa.ec.eudiw.pid.1

birth_date

full-date (CBORTag 1004). See PID Claims fields Section.

eu.europa.ec.eudiw.pid.1

unique_id

tstr (text string). See PID Claims fields Section.

eu.europa.ec.eudiw.pid.it.1

tax_id_code

tstr (text string). See PID Claims fields Section.

+
+
+

Mobile Security Object

+

The issuerAuth represents the Mobile Security Object which is a COSE Sign1 Document defined in RFC 9052 - CBOR Object Signing and Encryption (COSE): Structures and Process. It has the following data structure:

+
    +
  • protected header

  • +
  • unprotected header

  • +
  • payload

  • +
  • signature.

  • +
+

The protected header MUST contain the following parameter encoded in CBOR format:

+ +++++ + + + + + + + + + + + + +

Element

Description

Reference

Signature algorithm

-7 means ES256, SHA-256.

RFC8152

+
+

Note

+

Only the Signature Algorithm MUST be present in the protected headers, other elements SHOULD not be present in the protected header.

+
+

The unprotected header MUST contain the following parameter:

+ +++++ + + + + + + + + + + + + +

Element

Description

Reference

x5chain

Identified with the label 33

RFC 9360 CBOR Object Signing and Encryption (COSE) - Header Parameters for Carrying and Referencing X.509 Certificates.

+
+

Note

+

The x5chain is included in the unprotected header with the aim to make the Holder able to update the X.509 certificate chain, related to the Mobile Security Object issuer, without invalidating the signature.

+
+

The payload MUST contain the MobileSecurityObject, without the content-type COSE Sign header parameter and encoded as a byte string (bstr) using the CBOR Tag 24.

+

The MobileSecurityObjectBytes MUST have the following attributes:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Element

Description

Reference

docType

See Table.

[ISO 18013-5#9.1.2.4]

version

See Table.

[ISO 18013-5#9.1.2.4]

validityInfo.

Object containing issuance and expiration datetimes. It MUST contain the following sub-value:

+
+
    +
  • signed

  • +
  • validFrom

  • +
  • validUntil

  • +
+
+

[ISO 18013-5#9.1.2.4]

digestAlgorithm

According to the algorithm defined in the protected header.

[ISO 18013-5#9.1.2.4]

valueDigests

Mapped digest by unique id, grouped by namespace.

[ISO 18013-5#9.1.2.4]

deviceKeyInfo

It MUST contain the Wallet Instance's public key containing the following sub-values.

+
+
    +
  • deviceKey (REQUIRED).

  • +
  • keyAuthorizations (OPTIONAL).

  • +
  • keyInfo (OPTIONAL).

  • +
+
+

[ISO 18013-5#9.1.2.4]

+
+

Note

+

The private key related to the public key stored in the deviceKey object is used to sign the DeviceSignedItems object and proof the possession of the PID during the presentation phase (see the presentation phase with MDOC-CBOR).

+
+
+
+

MDOC-CBOR Examples

+

A non-normative example of a PID in MDOC-CBOR format is represented below using the AF Binary encoding:

+
a366737461747573006776657273696f6e63312e3069646f63756d656e747381a267646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316c6973737565725369676e6564a26a697373756572417574688443a10126a1182159021930820215308201bca003020102021404ad06a30c1a6dc6e93be0e2e8f78dcafa7907c2300a06082a8648ce3d040302305b310b3009060355040613025a45312e302c060355040a0c25465053204d6f62696c69747920616e64205472616e73706f7274206f66205a65746f706961311c301a06035504030c1349414341205a65746573436f6e666964656e73301e170d3231303932393033333034355a170d3232313130333033333034345a3050311a301806035504030c114453205a65746573436f6e666964656e7331253023060355040a0c1c5a65746f70696120436974792044657074206f662054726166666963310b3009060355040613025a453059301306072a8648ce3d020106082a8648ce3d030107034200047c5545e9a0b15f4ff3ce5015121e8ad3257c28d541c1cd0d604fc9d1e352ccc38adef5f7902d44b7a6fc1f99f06eedf7b0018fd9da716aec2f1ffac173356c7da3693067301f0603551d23041830168014bba2a53201700d3c97542ef42889556d15b7ac4630150603551d250101ff040b3009060728818c5d050102301d0603551d0e04160414ce5fd758a8e88563e625cf056bfe9f692f4296fd300e0603551d0f0101ff040403020780300a06082a8648ce3d0403020347003044022012b06a3813ffec5679f3b8cddb51eaa4b95b0cbb1786b09405e2000e9c46618c02202c1f778ad252285ed05d9b55469f1cb78d773671f30fe7ab815371942328317c59032ad818590325a667646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316776657273696f6e63312e306c76616c6964697479496e666fa3667369676e6564c074323032332d30322d32325430363a32333a35365a6976616c696446726f6dc074323032332d30322d32325430363a32333a35365a6a76616c6964556e74696cc074323032342d30322d32325430303a30303a30305a6c76616c756544696765737473a2781865752e6575726f70612e65632e65756469772e7069642e31ac015820a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a025820cd372fb85148700fa88095e3492d3f9f5beb43e555e5ff26d95f5a6adc36f8e6035820e67e72111b363d80c8124d28193926000980e1211c7986cacbd26aacc5528d48045820f7d062d662826ed95869851db06bb539b402047baee53a00e0aa35bfbe98265d0658202a132dbfe4784627b86aa3807cd19cfeff487aab3dd7a60d0ab119a72e736936075820bdca9e8dbca354e824e67bfe1533fa4a238b9ea832f23fb4271ebeb3a5a8f7200858202c0eaec2f05b6c7fe7982683e3773b5d8d7a01e33d04dfcb162add8bd99bee9a095820bfe220d85657ccec3c67e7db1df747e9148a152334bb6d4b65b273279bcc36ec0a582018e38144f5044301d6a0b4ec9d5f98d4cd950e6ea2c29b849cbd457da29b6ad30b58203c71d2f0efa09d9e3fbbdffd29204f6b292c9f79570aef72dd86c91f7a3aa5c50c582065743d58d89d45e52044758f546034fd13a4f994bc270cdfa7844f74eb3f4b6e0d5820b4a8eb5d523bffa17b41bda12ddc7da32ae1e5f7ff3dcc394a35401f16919bbf781b65752e6575726f70612e65632e65756469772e7069642e69742e31a10e58209d6c11644651126c94acdaf0803e86d4c71d15d3b2712a14295416734efd514d6d6465766963654b6579496e666fa1696465766963654b6579a401022001215820ba01aea44eee1e338eb2f04e279dbd51b34655783ee185150838c9a7a7c4db7122582025ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96f646967657374416c676f726974686d675348412d32353658400813c28fd62f2602cbc14724e5865733c44a0fca589b55c085ec9d5c725d6cce25ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96a6e616d65537061636573a2781865752e6575726f70612e65632e65756469772e7069642e3188d818586da4686469676573744944016672616e646f6d5820156df9227ad341eaa61aabd301106fd21bdc18820e01dfc16bcf5fecc447111b71656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d30322d3232d818586fa4686469676573744944026672616e646f6d5820a3a1f13f05544d03a5b50b5fdb78465808393bcf3b7953a345fe28f820c7be0d71656c656d656e744964656e7469666965726d69737375616e63655f646174656c656c656d656e7456616c7565d903ec6a323032332d30322d3232d8185866a4686469676573744944036672616e646f6d5820852591f90f2c9ded57a03632e2c1322ab52a082a431e71a4149a6830c8f1ad0c71656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ca4686469676573744944046672616e646f6d5820d1d587b3512acce15c4f6b20944ceb002a464e4a158389788563408873c3fce571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c7565764d696e69737465726f2064656c6c27496e7465726e6fd8185864a4686469676573744944056672616e646f6d582094fdd7609c0e73dc8589b5cab11e1d9058cf8bff8a336da5f81fcba055396a0f71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c7565654d6172696fd8185865a4686469676573744944066672616e646f6d5820660c0a7bf79e0e0261ca1547a4294fb808aa70738f424b13ab1b9440b566ae1371656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756565526f737369d818586ba4686469676573744944076672616e646f6d5820315c53491286488fa07f5c2ce67135ef5c9959c3469c99a14e9b6dc924f9eba571656c656d656e744964656e746966696572696269727468646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3132d818587da4686469676573744944086672616e646f6d5820764ef39c9d01f3aa6a87f441603cfe853fba3cee3bc2c168bcc9e96271d6e06371656c656d656e744964656e74696669657269756e697175655f69646c656c656d656e7456616c7565781e78787878787878782d7878782d787878782d787878787878787878787878781b65752e6575726f70612e65632e65756469772e7069642e69742e3181d8185877a46864696765737449440d6672616e646f6d5820717df3f583b1484366c33a1f869f2b5d201d466a8b589c79ab1a2d85e595432571656c656d656e744964656e7469666965726d7461785f69645f6e756d6265726c656c656d656e7456616c75657554494e49542d585858585858585858585858585858
+
+
+

The Diagnostic Notation of the above MDOC-CBOR is given below:

+
{
+  "status": 0,
+  "version": "1.0",
+  "documents": [
+  {
+    "docType": "eu.europa.ec.eudiw.pid.1",
+    "issuerSigned": {
+        "issuerAuth": [
+        << {1: -7} >>, % protected header with the value alg:ES256
+        {
+            33: h'30820215308201BCA003020102021404AD30C…'% 33->X5chain:COSE X_509
+        },
+        <<
+            24(<<
+                {
+                "docType": "eu.europa.ec.eudiw.pid.1",
+                "version": "1.0",
+                "validityInfo": {
+                    "signed": 0("2023-02-22T06:23:56Z"),
+                    "validFrom": 0("2023-02-22T06:23:56Z"),
+                    "validUntil": 0("2024-02-22T00:00:00Z")
+                },
+                "valueDigests": {
+                    "eu.europa.ec.eudiw.pid.1": {
+                        1: h'0F1571A97FFB799CC8FCDF2BA4FC2909929…',
+                        2: h'0CDFE077400432C055A2B69596C90…',
+                        3: h'E2382149255AE8E955AF9B8984395…',
+                        4: h'BBC77E6CCA981A3AD0C3E544EDF86…',
+                        6: h'BB6E6C68D1B4B4EC5A2AE9206F5t4…',
+                        7: h'F8A5966E6DAC9970E0334D8F75E25…',
+                        8: h'DEFDF1AA746718016EF1B94BFE5R6…'
+                    },
+                    "eu.europa.ec.eudiw.pid.it.1": {
+                        9: h'F9EE4D36F67DBD75E23311AC1C29…'
+                    }
+                },
+                "deviceKeyInfo": {
+                    "deviceKey": {
+                        1: 2, % kty:EC2 (Eliptic curves with x and y coordinate pairs)
+                        -1: 1, % crv:p256
+                        -2: h'B820963964E53AF064686DD9218303494A…', % x-coordiantes
+                        -3: h'0A6DA0AF437E2943F1836F31C678D89298E9…'% y-ccordiantes
+                    }
+                },
+                "digestAlgorithm": "SHA-256"
+                }
+            >>)
+        >>,
+        h'1AD0D6A7313EFDC38FCD765852FA2BD43DEBF48BF5A580D'
+        ],
+        "nameSpaces": {
+            "eu.europa.ec.eudiw.pid.1": [
+            24(<<
+                {
+                "digestID": 1,
+                "random": h'E0B70BCEFBD43686F345C9ED429343AA',
+                "elementIdentifier": "expiry_date",
+                "elementValue": 1004("2024-02-22")
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 2,
+                "random": h'AE84834F389EE69888665B90A3E4FCCE',
+                "elementIdentifier": "issue_date",
+                "elementValue": 1004("2023-02-22")
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 3,
+                "random": h'960CB15A2EA9B68E5233CE902807AA95',
+                "elementIdentifier": "issuing_country",
+                "elementValue": "IT"
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 4,
+                "random": h'9D3774BD5994CCFED248674B32A4F76A',
+                "elementIdentifier": "issuing_authority",
+                "elementValue": "Ministero dell'Interno"
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 5,
+                "random": h'EB12193DC66C6174530CDC29B274381F',
+                "elementIdentifier": "given_name",
+                "elementValue": "Mario"
+                }
+            >>)),
+            24(<<
+                {
+                "digestID": 6,
+                "random": h'DB143143538F3C8D41DC024F9CB25C9D',
+                "elementIdentifier": "family_name",
+                "elementValue": "Rossi"
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 7,
+                "random": h'6059FF1CE27B4997B4ADE1DE7B01DC60',
+                "elementIdentifier": "birth_date",
+                "elementValue": 1004("1956-01-12")% the tag 1004 defines the value
+                                                    is a full date
+                }
+            >>),
+            24(<<
+                {
+                "digestID": 8,
+                "random": h'53C15C57B3B076E788795829190220B4',
+                "elementIdentifier": "unique_id",
+                "elementValue": "xxxxxxxx-xxx-xxxx-xxxxxxxxxxxx"
+                }
+            >>)
+            ],
+            "eu.europa.ec.eudiw.pid.it.1": [
+                24(<<
+                    {
+                    "digestID": 9,
+                    "random": h'11aa7273a2d2daa973f5951f0c34c2fbae',
+                    "elementIdentifier": "tax_id_number",
+                    "elementValue": "TINIT-XXXXXXXXXXXXXXX"
+                    }
+                >>)
+            ]
+        }
+    }
+  }
+  ]
+}
+
+
+
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/pid-eaa-issuance.html b/rp-vp-kid/en/pid-eaa-issuance.html new file mode 100644 index 000000000..6e3e545a8 --- /dev/null +++ b/rp-vp-kid/en/pid-eaa-issuance.html @@ -0,0 +1,2788 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | PID/(Q)EAA Issuance + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

PID/(Q)EAA Issuance

+

This section describes the PID and (Q)EAAs issuance flow with an high level of security. +The relevant entities and interfaces involved in the issuance flow are:

+
+
    +
  • Wallet Provider: The entity responsible for releasing an EUDI Wallet Solution. The Wallet Provider issues the Wallet Attestations to its Wallet Instances through an Attestation Service. The Wallet Attestation certifies the genuinity and authenticity of the Wallet Instance and its compliance with the security and privacy requirements.

  • +
  • Wallet Solution: Entire product and service owned by a Wallet Provider, offered to all the Users and certified as EUDI-compliant by a Conformity Assessment Body (CAB).

  • +
  • Wallet Instance: Instance of a Wallet Solution, installed on the User device. The Wallet Instance provides graphical interfaces for User interaction with Relying Parties, PID, (Q)EAA Providers and the Wallet Provider.

  • +
  • PID Provider: The entity that issues the eIDAS Person Identification Data (PID). It is composed of:

    +
    +
      +
    • OpenID4VCI Component: based on the "OpenID for Verifiable Credential Issuance" specification ` [OIDC4VCI. Draft 13] <https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html>`_ to release the PID.

    • +
    • National eID Relying Party: The component to authenticate the User with the national Digital Identity Providers, based on OpenID Connect Core 1.0 or SAML2.

    • +
    • National Identity Provider: It represents preexisting identity systems based on SAML2 or OpenID Connect Core 1.0, already in production in each Member State (eg: the Italian SPID and CIE id schemes notified eIDAS with LoA High, see SPID/CIE OpenID Connect Specifications).

    • +
    +
    +
  • +
  • (Q)EAA Provider: It represents the Issuer of (Q)EAAs. It is composed of:

    +
      +
    • OpenID4VCI Component: based on the "OpenID for Verifiable Credential Issuance" specification to release (Q)EAAs.

    • +
    • Relying Party: Component to authenticate the User with the PID. The (Q)EAA Provider acts as a Verifier by sending a presentation request to the Wallet Instance, according to [OpenID4VP]. The Wallet Instance MUST have a valid PID, obtained in a previous time, to get authenticated with the (Q)EAA Provider.

    • +
    +
  • +
+
+
+

High-Level PID flow

+

The Fig. 2 shows a general architecture and highlights the main operations involved in the issuance of a PID.

+
+_images/High-Level-Flow-ITWallet-PID-Issuance.svg
+

Fig. 2 PID Issuance - General architecture and high level flow.

+
+
+

Below the description of the steps represented in the previous picture:

+
+
    +
  1. Wallet Instance Setup: the first time the Wallet Instance is started a preliminary setup phase is carried out. It consists of the release of the Wallet Attestation issued by Wallet Attestation Service asserting the genuineness and the compliance of the Wallet Instance with the shared trust framework. The Wallet Attestation binds the public key provided by the Wallet Instance, related to one of the private keys generated by the Wallet Instance.

  2. +
  3. PID/(Q)EAA Provider Discovery: the Wallet Instance discovers the trusted Digital Credential Issuers using the Federation API (e.g.: using the Subordinate Listing Endpoint of the Trust Anchor and its Intermediates), inspecting the Credential Issuer metadata and Trust Marks for filtering the PID Provider.

  4. +
  5. PID Provider Metadata: the Wallet Instance establishes the trust to the PID Provider according to the Trust Model and obtains the Metadata that discloses the formats of the PID, the algorithms supported, and any other parameter required for interoperability needs.

  6. +
  7. PID Request: using the Authorization Code Flow defined in [OIDC4VCI. Draft 13] the Wallet Instance requests the PID to the PID Provider.

  8. +
  9. User Authentication: the PID Provider authenticates the User with LoA High, acting as an Identity and Access Management Proxy to the National eID system.

  10. +
  11. PID Issuance: the User is authenticated with LoA High and the PID Provider releases a PID bound to the key material held by the requesting Wallet Instance.

  12. +
+
+

In the following sections the steps from 1 to 5 are further expanded into more technical details.

+
+
+

High-Level (Q)EAA flow

+

The Fig. 3 shows a general architecture and highlights the main operations involved in the issuance of a (Q)EAA, following the assumptions listed below:

+
+
    +
  • the User has a valid PID stored in their own Wallet Instance;

  • +
  • the (Q)EAA requires a high security implementation profile.

  • +
+
+
+_images/High-Level-Flow-ITWallet-QEAA-Issuance.svg
+

Fig. 3 (Q)EAA Issuance - General architecture and high level flow

+
+
+

Below the description of the most relevant operations involved in the (Q)EAA issuance:

+
+
    +
  1. Discovery of the trusted (Q)EAA Provider: the Wallet Instance obtains the list of the trusted (Q)EAA Provider using the Federation API (e.g.: using the Subordinate Listing Endpoint of the Trust Anchor and its Intermediates), then inspects the metadata and Trust Mark looking for the Digital Credential capabilities of each (Q)EAA Provider.

  2. +
  3. (Q)EAA Provider Metadata: the Wallet Instance establishes the trust to the (Q)EAA Provider according to the Trust Model, obtaining the Metadata that discloses the formats of the (Q)EAA, the algorithms supported, and any other parameter required for interoperability needs.

  4. +
  5. (Q)EAA Request: using the Authorization Code Flow , defined in [OIDC4VCI. Draft 13], the Wallet Instance requests a (Q)EAA to the (Q)EAA Provider.

  6. +
  7. User Authentication: the (Q)EAA Provider, acting as a Verifier (Relying Party), authenticates the User evaluating the presentation of the PID.

  8. +
  9. (Q)EAA Issuance: the User is authenticated with a valid PID and the (Q)EAA Provider releases a (Q)EAA bound to the key material held by the requesting Wallet Instance.

  10. +
+
+
+
+

Detailed Flow

+

The PID/(Q)EAA Issuance phase uses the Authorization Code Flow with the following specifications:

+ +

In this section a Wallet Initiated Flow is outlined, where the User receives the PID/(Q)EAA directly in response to the Credential Request.

+
+

Warning

+

All the non-normative examples are referred to the PID Provider issuance flow.

+
+
+_images/Low-Level-Flow-ITWallet-PID-QEAA-Issuance.svg +
+

Fig. 4 PID/(Q)EAA Issuance - Detailed flow

+
+
+

Steps 1-4 (Discovery): The User selects the PID/(Q)EAA Provider using the Wallet Instance, the Metadata for the selected PID/(Q)EAA Provider are processed by the Wallet Instance.

+
+

Note

+

Federation Check: The Wallet Instance needs to check if the PID/(Q)EAA Provider is part of the Federation, obtaining its protocol specific Metadata. A non-normative example of a response from the endpoint .well-known/openid-federation with the Entity Configuration and the Metadata of the PID/(Q)EAA Provider is represented within the section Entity Configuration Credential Issuer.

+
+

Steps 5-6 (PAR Request): The Wallet Instance:

+
+
    +
  • creates a fresh PKCE code verifier, Wallet Attestation Proof of Possession, and state parameter for the Pushed Authorization Request.

  • +
  • provides to the PID/(Q)EAA Provider PAR endpoint the parameters previously listed above, using the request parameter (hereafter Request Object) according to RFC 9126 Section 3 to prevent Request URI swapping attack.

  • +
  • MUST create the code_verifier with enough entropy random string using the unreserved characters with a minimum length of 43 characters and a maximum length of 128 characters, making it impractical for an attacker to guess its value. The value MUST be generated following the recommendation in Section 4.1 of RFC 7636.

  • +
  • signs this request using the private key that is created during the setup phase to obtain the Wallet Attestation. The related public key that is attested by the Wallet Provider is provided within the Wallet Attestation cnf claim.

  • +
  • MUST create the value of the client_assertion parameter according to OAuth 2.0 Attestation-based Client Authentication [oauth-attestation-draft], since in this flow the Pushed Authorization Endpoint is a protected endpoint. The client_assertion value MUST NOT contain more or less than precisely two JWTs separated with the ~ character. The first JWT MUST be the Wallet Attestation JWT and the second JWT MUST be the Wallet Attestation Proof of Possession.

  • +
  • specifies the types of the requested credentials using the authorization_details [RAR RFC 9396] parameter.

  • +
+
+

The PID/(Q)EAA Provider performs the following checks upon the receipt of the PAR request:

+
+
    +
  1. It MUST validate the signature of the Request Object using the algorithm specified in the alg header parameter (RFC 9126, RFC 9101) and the public key retrieved from the Wallet Attestation (cnf.jwk) referenced in the Request Object, using the kid JWS header parameter.

  2. +
  3. It MUST check that the used algorithm for signing the request in the alg header is one of the listed within the Section Cryptographic Algorithms.

  4. +
  5. It MUST check that the client_id in the request body of the PAR request matches the client_id claim included in the Request Object.

  6. +
  7. It MUST check that the iss claim in the Request Object matches the client_id claim in the Request Object (RFC 9126, RFC 9101).

  8. +
  9. It MUST check that the aud claim in the Request Object is equal to the PID/(Q)EAA Provider authorization endpoint uri (RFC 9126, RFC 9101).

  10. +
  11. It MUST reject the PAR request, if it contains the request_uri parameter (RFC 9126).

  12. +
  13. It MUST check that the Request Object contains all the mandatory parameters which values are validated according to Table of the HTTP parameters [derived from RFC 9126].

  14. +
  15. It MUST check that the Request Object is not expired, checking the exp claim (RFC 9126).

  16. +
  17. It MUST check that the Request Object was issued in a previous time than the value exposed in the iat claim. It SHOULD reject the request if the iat claim is far from the current time (RFC 9126) of more than 5 minutes.

  18. +
  19. It MUST check that the jti claim in the Request Object has not been used before by the Wallet Instance identified by the client_id. This allows the PID/(Q)EAA Provider to mitigate replay attacks (RFC 7519).

  20. +
  21. It MUST validate the client_assertion parameter based on Sections 4.1 and 4.2 of [oauth-attestation-draft].

  22. +
+
+

Below a non-normative example of the PAR.

+
POST /as/par HTTP/1.1
+Host: pid-provider.example.org
+Content-Type: application/x-www-form-urlencoded
+
+response_type=code
+&client_id=$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$
+&code_challenge=E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM
+&code_challenge_method=S256
+&request=$SIGNED-JWT
+&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation
+&client_assertion=$WIA~WIA-PoP
+
+
+

Below an non-normative example of the Wallet Attestation Proof of Possession without encoding and signature applied:

+
{
+  "alg": "ES256",
+  "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "typ": "jwt-client-attestation-pop",
+}
+.
+{
+  "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "aud": "https://pid-provider.example.org/par-endpoint",
+  "jti": "ad25868c-8377-479b-8094-46fb1e797625",
+  "iat": 1686645115,
+  "exp": 1686652315
+}
+
+
+

Below an non-normative example of the signed Request Object without encoding and signature applied:

+
{
+  "alg": "ES256",
+  "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc",
+}
+.
+{
+"iss":"$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$",
+"aud":"https://pid-provider.example.org",
+"exp":1672422065,
+"iat": 1672418465,
+"jti":"ac80df576e7109686717bf50b869e882",
+"response_type":"code",
+"client_id":"$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$",
+"state":"fyZiOL9Lf2CeKuNT2JzxiLRDink0uPcd",
+"code_challenge":"E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM",
+"code_challenge_method":"S256",
+"authorization_details":[
+  {
+    "type": "openid_credential",
+    "credential_configuration_id": "PersonIdentificationData"
+  }
+],
+"redirect_uri":"eudiw://start.wallet.example.org",
+}
+
+
+
+

Note

+

Federation Check: The PID/(Q)EAA Provider MUST check that the Wallet Provider is part of the federation.

+
+
+

Note

+

The PID/(Q)EAA Provider MUST validate the signature of the the Wallet Attestation and that it is not expired.

+
+

Step 7 (PAR Response): The PID/(Q)EAA Provider provides a one-time use request_uri value. The issued request_uri value must be bound to the client identifier (client_id) that was provided in the Request Object.

+
+

Note

+

The entropy of the request_uri MUST be sufficiently large. The adequate shortness of the validity and the entropy of the request_uri depends on the risk calculation based on the value of the resource being protected. The validity time SHOULD be less than a minute, and the request_uri MUST include a cryptographic random value of 128 bits or more (RFC 9101). The entire request_uri SHOULD NOT exceed 512 ASCII characters due to the following two main reasons (RFC 9101):

+
+
    +
  1. Many phones on the market still do not accept large payloads. The restriction is typically either 512 or 1024 ASCII characters.

  2. +
  3. On a slow connection such as a 2G mobile connection, a large URL would cause a slow response; therefore, the use of such is not advisable from the user-experience point of view.

  4. +
+
+
+

The PID/(Q)EAA Provider returns the issued request_uri to the Wallet Instance. A non-normative example of the response is shown below.

+
HTTP/1.1 201 Created
+Cache-Control: no-cache, no-store
+Content-Type: application/json
+
+{
+    "request_uri":"urn:ietf:params:oauth:request_uri:bwc4JK-ESC0w8acc191e-Y1LTC2",
+    "expires_in": 60
+}
+
+
+

Steps 8-9 (Authorization Request): The Wallet Instance sends an authorization request to the PID/(Q)EAA Provider Authorization Endpoint. Since parts of this Authorization Request content, e.g., the code_challenge parameter value, are unique to a particular Authorization Request, the Wallet Instance MUST only use a request_uri value once (RFC 9126); The PID/(Q)EAA Provider performs the following checks upon the receipt of the Authorization Request:

+
+
    +
  1. It MUST treat request_uri values as one-time use and MUST reject an expired request. However, it MAY allow for duplicate requests due to a user reloading/refreshing their user-agent (derived from RFC 9126).

  2. +
  3. It MUST identify the request as a result of the submitted PAR (derived from RFC 9126).

  4. +
  5. It MUST reject all the Authorization Requests that do not contain the request_uri parameter as the PAR is the only way to pass the Authorization Request from the Wallet Instance (derived from RFC 9126).

  6. +
+
+
GET /authorize?client_id=$thumprint-of-the-jwk-in-the-cnf-wallet-attestation$&request_uri=urn%3Aietf%3Aparams%3Aoauth%3Arequest_uri%3Abwc4JK-ESC0w8acc191e-Y1LTC2 HTTP/1.1
+Host: pid-provider.example.org
+
+
+
+

Note

+

User Authentication and Consent: The PID Provider performs the User authentication based on the requirements of eIDAS LoA High by means of national notified eIDAS scheme and requires the User consent for the PID issuance. +The (Q)EAA Provider performs the User authentication requesting a valid PID to the Wallet Instance. The (Q)EAA Provider MUST use [OpenID4VP] to dynamically request the presentation of the PID. From a protocol perspective, the (Q)EAA Provider acts as a Relying Party, providing the presentation request to the Wallet Instance. The Wallet Instance MUST have a valid PID obtained prior to start the transaction with the (Q)EAA Provider.

+
+

Steps 10-11 (Authorization Response): The PID/(Q)EAA Provider sends an authorization code together with state and iss parameters to the Wallet Instance. The Wallet Instance performs the following checks on the Authorization Response:

+
+
    +
  1. It MUST check the Authorization Response contains all the defined parameters according to Table of the HTTP Response parameters.

  2. +
  3. It MUST check the returned value by the PID/(Q)EAA Provider for state parameter is equal to the value sent by Wallet Instance in the Request Object (RFC 6749).

  4. +
  5. It MUST check that the URL of PID/(Q)EAA Provider in iss parameter is equal to the URL identifier of intended PID/(Q)EAA Provider that the Wallet Instance start the communication with (RFC 9027).

  6. +
+
+
+

Note

+

The Wallet Instance redirect URI is a universal or app link registered with the local operating system, so this latter will resolve it and pass the response to the Wallet Instance.

+
+
HTTP/1.1 302 Found
+Location: https://start.wallet.example.org?code=SplxlOBeZQQYbYS6WxSbIA&state=fyZiOL9Lf2CeKuNT2JzxiLRDink0uPcd&iss=https%3A%2F%2Fpid-provider.example.org
+
+
+

Steps 12-13 (DPoP Proof for Token Endpoint): The Wallet Instance MUST create a new key pair for the DPoP and a fresh DPoP Proof JWT following the instruction provided in Section 4 of (RFC 9449) for the token request to the PID/(Q)EAA Provider. The DPoP Proof JWT is signed using the private key for DPoP created by Wallet Instance for this scope. DPoP binds the Access Token to a certain Wallet Instance (RFC 9449) and mitigates the misuse of leaked or stolen Access Tokens at the Credential Endpoint.

+

Step 14 (Token Request): The Wallet Instance sends a token request to the PID/(Q)EAA Provider Token Endpoint with a DPoP Proof JWT and the parameters: code, code_verifier, and OAuth 2.0 Attestation based Client Authentication (client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation and client_assertion=WIA~WIA-PoP). +The client_assertion is signed using the private key that is created during the setup phase to obtain the Wallet Attestation. The related public key that is attested by the Wallet Provider is provided within the Wallet Attestation (cnf claim). The PID/(Q)EAA Provider performs the following checks on the Token Request:

+
+
    +
  1. It MUST ensure that the Authorization code is issued to the authenticated Wallet Instance (RFC 6749) and was not replied.

  2. +
  3. It MUST ensure the Authorization code is valid and has not been previously used (RFC 6749).

  4. +
  5. It MUST ensure the redirect_uri matches the value included in the previous Request Object OpenID.Core#TokenRequest.

  6. +
  7. It MUST validate the DPoP Proof JWT, according to (RFC 9449) Section 4.3.

  8. +
+
+
POST /token HTTP/1.1
+Host: pid-provider.example.org
+Content-Type: application/x-www-form-urlencoded
+DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik
+    VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR
+    nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R1JE
+    QSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiItQndDM0VTYzZhY2MybFRjIiwiaHRtIj
+    oiUE9TVCIsImh0dSI6Imh0dHBzOi8vc2VydmVyLmV4YW1wbGUuY29tL3Rva2VuIiwia
+    WF0IjoxNTYyMjYyNjE2fQ.2-GxA6T8lP4vfrg8v-FdWP0A0zdrj8igiMLvqRMUvwnQg
+    4PtFLbdLXiOSsX0x7NVY-FNyJK70nfbV37xRZT3Lg
+
+grant_type=authorization_code
+&code=SplxlOBeZQQYbYS6WxSbIA
+&code_verifier=dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
+&redirect_uri=https://start.wallet.example.org/cb
+&client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation
+&client_assertion=$WIA~WIA-PoP
+
+
+

Step 15 (Token Response): The PID/(Q)EAA Provider validates the request, if successful an Access Token (bound to the DPoP key) and a fresh c_nonce are provided by the Issuer to the Wallet Instance. The parameter c_nonce is a string value, which MUST be unpredictable and is used later by the Wallet Instance in Step 18 to create the proof of possession of the key (proof claim) and it is the primary countermeasure against key proof replay attack. Note that, the received c_nonce value can be used to create the proof as long as the Issuer provides the Wallet Instance with a new c_nonce value.

+
HTTP/1.1 200 OK
+Content-Type: application/json
+Cache-Control: no-store
+
+{
+    "access_token": "Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU ...",
+    "token_type": "DPoP",
+    "expires_in": 2677,
+    "c_nonce": "tZign[...]snFbp",
+    "c_nonce_expires_in": 86400,
+    "authorization_details": [
+      {
+          "type": "openid_credential",
+          "credential_configuration_id: "PersonIdentificationData"
+          }
+      }
+    ]
+}
+
+
+

Steps 16-17 (DPoP Proof for Credential Endpoint): The Wallet Instance for requesting the Digital Credential creates a proof of possession with c_nonce obtained in Step 15 and using the private key used for the DPoP, signing a DPoP Proof JWT according to (RFC 9449) Section 4. The jwk value in the proof parameter MUST be equal to the public key referenced in the DPoP.

+

Step 18 (Credential Request): The Wallet Instance sends a request for the Digital Credential to the PID/(Q)EAA Credential endpoint. This request MUST include the Access Token, DPoP Proof JWT, credential type, proof (which demonstrates possession of the key), and format parameters. The proof parameter MUST be an object that contains evidence of possession of the cryptographic key material to which the issued PID/(Q)EAA Digital Credential will be bound. To verify the proof, the PID/(Q)EAA Provider conducts the following checks at the Credential endpoint:

+
+
    +
  1. the JWT proof MUST include all required claims as specified in the table of Section Token Request;

  2. +
  3. The key proof MUST be explicitly typed using header parameters as defined for the respective proof type;

  4. +
  5. The header parameter alg MUST indicate a registered asymmetric digital signature algorithm, and MUST NOT be set to none;

  6. +
  7. The signature on the key proof MUST be verified using the public key specified in the header parameter.

  8. +
  9. The header parameter MUST NOT contain a private key.

  10. +
  11. If a c_nonce value was previously provided by the server, the nonce claim in the JWT MUST match this c_nonce value. Furthermore, the creation time of the JWT, as indicated by the iat claim or a server-managed timestamp via the nonce claim, MUST be within an acceptable window of time as determined by the server.

  12. +
+
+
+

Note

+

PID/(Q)EAA Credential Schema and Status registration: The PID/(Q)EAA Provider MUST register all the issued Credentials for their later revocation, if needed.

+
+
+

Note

+

It is RECOMMENDED that the public key contained in the jwt_proof be specifically generated for the requested Credential (fresh cryptographic key) to ensure that different issued Credentials do not share the same public key, thereby remaining unlinkable to each other.

+
+
POST /credential HTTP/1.1
+Host: pid-provider.example.org
+Content-Type: application/json
+Authorization: DPoP Kz~8mXK1EalYznwH-LC-1fBAo.4Ljp~zsPE_NeO.gxU
+DPoP: eyJ0eXAiOiJkcG9wK2p3dCIsImFsZyI6IkVTMjU2IiwiandrIjp7Imt0eSI6Ik
+    VDIiwieCI6Imw4dEZyaHgtMzR0VjNoUklDUkRZOXpDa0RscEJoRjQyVVFVZldWQVdCR
+    nMiLCJ5IjoiOVZFNGpmX09rX282NHpiVFRsY3VOSmFqSG10NnY5VERWclUwQ2R2R
+    1JEQSIsImNydiI6IlAtMjU2In19.eyJqdGkiOiJlMWozVl9iS2ljOC1MQUVCIiwiaHRtIj
+    oiR0VUIiwiaHR1IjoiaHR0cHM6Ly9yZXNvdXJjZS5leGFtcGxlLm9yZy9wcm90ZWN0Z
+    WRyZXNvdXJjZSIsImlhdCI6MTU2MjI2MjYxOCwiYXRoIjoiZlVIeU8ycjJaM0RaNTNF
+    c05yV0JiMHhXWG9hTnk1OUlpS0NBcWtzbVFFbyJ9.2oW9RP35yRqzhrtNP86L-Ey71E
+    OptxRimPPToA1plemAgR6pxHF8y6-yqyVnmcw6Fy1dqd-jfxSYoMxhAJpLjA
+{
+  "format": "vc+sd-jwt"
+  "credential_definition":{
+    "type": ["PersonIdentificationData"]
+  },
+  "proof": {
+    "proof_type": "jwt",
+    "jwt": "eyJraWQiOiJkaWQ6ZXhhbXBsZTplYm"
+  }
+}
+
+
+

Where a non-normative example of the decoded content of the jwt parameter is represented below, +without encoding and signature. The JWS header:

+
{
+  "alg": "ES256",
+  "typ": "openid4vci-proof+jwt",
+  "jwk": {
+    "kty": "EC",
+    "x": "l8tFrhx-34tV3hRICRDY9zCkDlpBhF42UQUfWVAWBFs",
+    "y": "9VE4jf_Ok_o64zbTTlcuNJajHmt6v9TDVrU0CdvGRDA",
+    "crv": "P-256"
+  }
+
+}
+
+
+

And the JWS payload:

+
{
+    "iss": "0b434530-e151-4c40-98b7-74c75a5ef760",
+    "aud": "https://pid-provider.example.org/credential",
+    "iat": 1504699136,
+    "nonce": "tZign...snFbp"
+}
+
+
+

Steps 19-21 (Credential Response): The PID/(Q)EAA Provider MUST validate the DPoP JWT Proof based on the steps defined in Section 4.3 of (RFC 9449) and whether the Access Token is valid and suitable for the requested PID/(Q)EAA. It also MUST validate the proof of possession for the key material the new credential SHALL be bound to, according to OPENID4VCI Section 7.2.2. If all checks succeed, the PID/(Q)EAA Provider creates a new Credential bound to the key material and provide it to the Wallet Instance. The Wallet Instance MUST perform the following checks before proceeding with the secure storage of the PID/(Q)EAA:

+
+
    +
  1. It MUST check that the PID Credential Response contains all the mandatory parameters and values are validated according to Table of the credential response parameters.

  2. +
  3. It MUST check the PID integrity by verifying the signature using the algorithm specified in the alg header parameter of SD-JWT (PID/(Q)EAA Data Model) and the public key that is identified using using the kid header of the SD-JWT.

  4. +
  5. It MUST check that the received PID (in credential claim) matches the schema defined in PID/(Q)EAA Data Model.

  6. +
  7. It MUST process and verify the PID in SD-JWT VC format (according to SD.JWT#Verification Section 6.) or MDOC CBOR format.

  8. +
  9. It MUST verify the Trust Chain in the header of SD-JWT VC to verify that the PID Provider is trusted.

  10. +
+
+

If the checks defined above are successful the Wallet Instance proceeds with the secure storage of the PID/(Q)EAA.

+
HTTP/1.1 200 OK
+Content-Type: application/json
+Cache-Control: no-store
+Pragma: no-cache
+
+{
+    "format": "vc+sd-jwt"
+    "credential" : "LUpixVCWJk0eOt4CXQe1NXK[...]WZwmhmn9OQp6YxX0a2L",
+    "c_nonce": "fGFF7[...]UkhLa",
+    "c_nonce_expires_in": 86400
+}
+
+
+
+
+

Pushed Authorization Request Endpoint

+
+

Pushed Authorization Request (PAR) Request

+

The requests to the PID/(Q)EAA authorization endpoint MUST use the HTTP POST method with the parameters in the message body encoded in application/x-www-form-urlencoded format. The Pushed Authorization Endpoint is protected with OAuth 2.0 Attestation-based Client Authentication [oauth-attestation-draft] and the following parameters MUST be provided:

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1 PAR http request parameters

Claim

Description

Reference

response_type

MUST be set to code.

RFC 6749

client_id

MUST be set to the thumbprint of the jwk value in the cnf parameter inside the Wallet Attestation.

RFC 6749

code_challenge

A challenge derived from the code verifier that is sent in the authorization request.

RFC 7636#section-4.2.

code_challenge_method

A method that was used to derive code challenge. It MUST be set to S256.

RFC 7636#section-4.3.

request

It MUST be a signed JWT. The private key corresponding to the public one in the cnf parameter inside the Wallet Attestation MUST be used for signing the Request Object.

OpenID Connect Core. Section 6

client_assertion_type

It MUST be set to urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation.

oauth-attestation-draft.

client_assertion

It MUST be set to a value containing the Wallet Attestation JWT and the Proof of Possession, separated with the ~ character.

oauth-attestation-draft.

+

The JWT Request Object has the following JOSE header parameters:

+ +++++ + + + + + + + + + + + + + + + + +

JOSE header

Description

Reference

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section Cryptographic Algorithms and MUST NOT be set to none or any symmetric algorithm (MAC) identifier.

RFC 7516#section-4.1.1.

kid

Unique identifier of the jwk inside the cnf claim of Wallet Attestation as base64url-encoded JWK Thumbprint value.

RFC 7638#section_3.

+
+

Note

+

The parameter typ, if omitted, assumes the implicit value JWT.

+
+

The JWT payload is given by the following parameters:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

It MUST be set to the client_id.

RFC 9126 and RFC 7519.

aud

It MUST be set to the identifier of the PID/(Q)EAA Provider.

RFC 9126 and RFC 7519.

exp

UNIX Timestamp with the expiry time of the JWT.

RFC 9126 and RFC 7519.

iat

UNIX Timestamp with the time of JWT issuance.

RFC 9126 and RFC 7519.

response_type

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

client_id

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

state

Unique session identifier at the client side. This value will be returned to the client in the response, at the end of the authentication. It MUST be a random string composed by alphanumeric characters and with a minimum length of 32 digits.

See OpenID.Core#AuthRequest.

code_challenge

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

code_challenge_method

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

authorization_details

Array of JSON Objects. Each JSON Object MUST include the following claims:

+
+
    +
  • type: it MUST be set to openid_credential,

  • +
  • credential_configuration_id: JSON String. String specifying a unique identifier of the Credential being described in the credential_configurations_supported map in the Credential Issuer Metadata. For example, in the case of the PID, it MUST be set to PersonIdentificationData.

  • +
+
+

See [RAR RFC 9396] and [OIDC4VCI. Draft 13].

redirect_uri

Redirection URI to which the response is intended to be sent. It MUST be an universal or app link registered with the local operating system, so this latter will provide the response to the Wallet Instance.

See OpenID.Core#AuthRequest.

client_assertion_type

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

client_assertion

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

jti

Unique identifier of the JWT that, together with the value contained in the iss claim, prevents the reuse of the JWT (replay attack). Since the jti value alone is not collision resistant, it MUST be identified uniquely together with its issuer.

[RFC 7519].

+

The JOSE header of the Wallet Attestation proof of possession MUST contain:

+ +++++ + + + + + + + + + + + + + + + + + + + + +

JOSE header

Description

Reference

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section Cryptographic Algorithms and MUST NOT be set to none or any symmetric algorithm (MAC) identifier.

RFC 7516#section-4.1.1.

kid

Unique identifier of the jwk inside the cnf claim of Wallet Attestation as base64url-encoded JWK Thumbprint value.

RFC 7638#section_3.

typ

It MUST be set to jwt-client-attestation-pop

Currently under discussion in [oauth-attestation-draft].

+

The body of the Wallet Attestation proof of possession JWT MUST contain:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

Thumbprint of the JWK in the cnf parameter.

RFC 9126 and RFC 7519.

aud

It MUST be set to the identifier of the PID/(Q)EAA Provider.

RFC 9126 and RFC 7519.

exp

UNIX Timestamp with the expiry time of the JWT.

RFC 9126 and RFC 7519.

iat

UNIX Timestamp with the time of JWT issuance.

RFC 9126 and RFC 7519.

jti

Unique identifier for the DPoP proof JWT. The value SHOULD be set using a UUID v4 value according to [RFC 4122].

[RFC 7519. Section 4.1.7].

+
+
+

Pushed Authorization Request (PAR) Response

+

If the verification is successful, the PID/(Q)EAA Issuer MUST provide the response with a 201 HTTP status code. The following parameters are included as top-level members in the HTTP response message body, using the application/json media type as defined in [RFC 8259].

+ +++++ + + + + + + + + + + + + + + + + +

Claim

Description

Reference

request_uri

The request URI corresponding to the authorization request posted. This URI MUST be a single-use reference to the respective authorization request. It MUST contain some part generated using a cryptographically strong pseudorandom algorithm. The value format MUST be urn:ietf:params:oauth:request_uri:<reference-value> with <reference-value> as the random part of the URI that references the respective authorization request data.

[RFC 9126].

expires_in

A JSON number that represents the lifetime of the request URI in seconds as a positive integer.

[RFC 9126].

+

If any errors occur during the PAR Request, the Authorization Server MUST return an error response as defined in RFC 9126#section-2.3. The response MUST use application/json as the content type and MUST include the following parameters:

+
+
    +
  • error. The error code.

  • +
  • error_description. Text in human-readable form providing further details to clarify the nature of the error encountered.

  • +
+
+

Below is a non-normative example of an error response.

+
HTTP/1.1 400 Bad Request
+Content-Type: application/json
+
+{
+  "error": "invalid_request",
+  "error_description":
+    "The redirect_uri is not valid for the given client"
+}
+
+
+
+
+
+

Authorization endpoint

+

The authorization endpoint is used to interact with the PID/(Q)EAA Issuer and obtain an authorization grant. +The authorization server MUST first verify the identity of the User that own the credential.

+
+

Authorization Request

+

The Authorization request is issued by the Web Browser in use by the Wallet Instance, the HTTP methods POST or GET are used. When the method POST is used, the parameters MUST be sent using the Form Serialization. When the method GET is used, the parameters MUST be sent using the Query String Serialization. For more details see OpenID.Core#Serializations.

+

The mandatory parameters in the HTTP authentication request are specified in the following table.

+ +++++ + + + + + + + + + + + + + + + + +

Claim

Description

Reference

client_id

It MUST be set as in the Table of the HTTP parameters.

See Table of the HTTP parameters.

request_uri

It MUST be set to the same value as obtained by PAR Response. See Table of the HTTP PAR Response parameters.

[RFC 9126].

+
+
+

Authorization Response

+

The authentication response is returned by the PID/(Q)EAA authorization endpoint at the end of the authentication flow.

+

If the authentication is successful the PID/(Q)EAA Issuer redirects the User by adding the following query parameters as required to the redirect_uri. The redirect URI MUST be an universal or app link registered with the local operating system, so this latter is able to provide the response to the Wallet Instance.

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

code

Unique Authorization Code that the Wallet Instance submits to the Token Endpoint.

[RFC 6749#section-4.1.2], Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants

state

The Wallet Instance MUST check the correspondence with the state parameter value in the Request Object. It is defined as in the Table of the JWT Request parameters.

[RFC 6749#section-4.1.2].

iss

Unique identifier of the PID/(Q)EAA Issuer who created the Authentication Response. The Wallet Instance MUST validate this parameter.

OAuth 2.0 Authorization Server Issuer Identifier in Authorization Response, [RFC7519, Section 4.1.1].

+

If any errors occur during the Authorization Request, the Authorization Server MUST return an error response as defined in RFC 6749#section-4.1.2.1. The response MUST use application/json as the content type and MUST include the following parameters:

+
+
    +
  • error. The error code.

  • +
  • error_description. Text in human-readable form providing further details to clarify the nature of the error encountered.

  • +
+
+
+
+
+

Token endpoint

+

The token endpoint is used by the Wallet Instance to obtain an Access Token by presenting an authorization grant, as +defined in RFC 6749. The Token Endpoint is a protected endpoint with a client authentication based on the model defined in OAuth 2.0 Attestation-based Client Authentication [oauth-attestation-draft].

+
+

Token Request

+

The request to the PID/(Q)EAA Token endpoint MUST be an HTTP request with method POST, with the body message encoded in application/x-www-form-urlencoded format. The Wallet Instance sends the Token endpoint request with client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation and client_assertion=WIA~WIA-PoP.

+

The Token endpoint MUST accept and validate the DPoP proof sent in the DPoP HTTP header. The Token endpoint MUST validate the DPoP proof according to Section 4.3 of the DPoP specifications (RFC 9449). This mitigates the misuse of leaked or stolen Access Tokens at the credential endpoint. If the DPoP proof is invalid, the Token endpoint returns an error response, according to Section 5.2 of [RFC 6749] with invalid_dpop_proof as the value of the error parameter.

+

All the parameters listed below are REQUIRED:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

grant_type

It MUST be set to authorization_code.

Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants.

code

Authorization code returned in the Authentication Response.

Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants.

redirect_uri

It MUST be set as in the Request Object Table of the JWT Request parameters.

Assertion Framework for OAuth 2.0 Client Authentication and Authorization Grants.

code_verifier

Verification code of the code_challenge.

Proof Key for Code Exchange by OAuth Public Clients.

client_assertion_type

It MUST be set to urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation.

oauth-attestation-draft.

client_assertion

It MUST be set to a value containing the Wallet Attestation JWT and the Proof of Possession JWT, separated with the ~ character (WIA~WIA-PoP). The Wallet Attestation Proof of Possession MUST contain the claims as defined in Table of the JWT Wallet Attestation PoP, Section Pushed Authorization Request (PAR) Response.

oauth-attestation-draft.

+

A DPoP Proof JWT is included in the HTTP request using the DPoP header parameter containing a DPoP JWS.

+

The JOSE header of a DPoP JWT MUST contain at least the following parameters:

+ +++++ + + + + + + + + + + + + + + + + + + + + +

JOSE header

Description

Reference

typ

It MUST be equal to dpop+jwt.

[RFC 7515] and [RFC 8725. Section 3.11].

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to none or with a symmetric algorithm (MAC) identifier.

[RFC 7515].

jwk

It represents the public key chosen by the Wallet Instance, in JSON Web Key (JWK) [RFC 7517] format that the Access Token MUST be bound to, as defined in [RFC 7515] Section 4.1.3. It MUST NOT contain a private key.

[RFC 7517] and [RFC 7515].

+

The payload of a DPoP JWT Proof MUST contain at least the following claims:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

jti

Unique identifier for the DPoP proof JWT. The value SHOULD be set using a UUID v4 value according to [RFC 4122].

[RFC 7519. Section 4.1.7].

htm

The value of the HTTP method of the request to which the JWT is attached.

[RFC 9110. Section 9.1].

htu

The HTTP target URI, without query and fragment parts, of the request to which the JWT is attached.

[RFC 9110. Section 7.1].

iat

UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519.

[RFC 7519. Section 4.1.6].

+
+
+

Token Response

+

If the Token Request is successfully validated, the Authorization Server provides an HTTP Token Response with a 200 (OK) status code. The Token Response MUST contain the following mandatory claims.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

access_token

The DPoP-bound Access Token, in signed JWT format, allows accessing the PID/(Q)EAA Credential Endpoint for obtaining the credential.

RFC 6749.

token_type

Type of Access Token returned. It MUST be equal to DPoP.

RFC 6749.

expires_in

Expiry time of the Access Token in seconds.

RFC 6749.

c_nonce

JSON string containing a nonce value to be used to create a proof of possession of key material when requesting a Credential.

[OIDC4VCI. Draft 13].

c_nonce_expires_in

JSON integer, it represents the lifetime in seconds of the c_nonce.

[OIDC4VCI. Draft 13].

authorization_details

JSON object, used to identify Credentials with the same metadata but different claimset/claim values and/or simplify the Credential request even when only one Credential is being issued.

[OIDC4VCI. Draft 13].

+

If any errors occur during the validation of the Token Request, the Authorization Server MUST return an error response as defined in RFC 6749#section-5.2.

+
HTTP/1.1 400 Bad Request
+Content-Type: application/json;charset=UTF-8
+Cache-Control: no-store
+Pragma: no-cache
+
+{
+  "error":"invalid_client"
+  "error_description":"Client authentication failed"
+}
+
+
+
+
+

Access Token

+

A DPoP-bound Access Token is provided by the PID/(Q)EAA Token endpoint as a result of a successful token request. The Access Token is encoded in JWT format, according to [RFC 7519]. The Access Token MUST have at least the following mandatory claims and it MUST be bound to the public key that is provided by the DPoP proof. This binding can be accomplished based on the methodology defined in Section 6 of (RFC 9449).

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

It MUST be an HTTPS URL that uniquely identifies the PID/(Q)EAA Issuer. The Wallet Instance MUST verify that this value matches the PID/(Q)EAA Issuer where it has requested the credential.

[RFC 9068], [RFC7519, Section 4.1.1].

sub

It identifies the subject of the JWT. It MUST be set to the value of the sub field in the PID/(Q)EAA SD-JWT-VC.

[RFC 9068], [RFC 7519] and [OpenID.Core#SubjectIDTypes].

aud

It MUST be set to the URL of Credential Endpoint of the PID/(Q)EAA Provider.

[RFC 9068].

iat

UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519.

[RFC 9068], [RFC 7519. Section 4.1.6].

exp

UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated in RFC 7519.

[RFC 9068], [RFC 7519].

jti

It MUST be a String in uuid4 format. Unique Token ID identifier that the RP SHOULD use to prevent reuse by rejecting the Token ID if already processed.

[RFC 9068], [RFC 7519].

jkt

JWK SHA-256 Thumbprint Confirmation Method. The value of the jkt member MUST be the base64url encoding (as defined in [RFC7515]) of the JWK SHA-256 Thumbprint of the DPoP public key (in JWK format) to which the Access Token is bound.

[RFC 9449. Section 6.1] and [RFC 7638].

+
+
+
+

Credential endpoint

+

The Credential Endpoint issues a Credential upon the presentation of a valid Access Token, as defined in OPENID4VCI.

+
+

Credential Request

+

The Wallet Instance when requests the PID/(Q)EAA to the PID/(Q)EAA Credential endpoint, MUST use the following parameters in the message body of the HTTP POST request, using the application/json media type.

+

The Credential endpoint MUST accept and validate the DPoP proof sent in the DPoP HTTP Header parameter, according to the steps defined in (RFC 9449) Section 4.3. The DPoP proof in addition to the values that are defined in the Token Endpoint section MUST contain the following claim:

+
+
    +
  • ath: hash value of the Access Token encoded in ASCII. The value MUST use the base64url encoding (as defined in Section 2 of RFC 7515) with the SHA-256 algorithm.

  • +
+
+

If the DPoP proof is invalid, the Credential endpoint returns an error response per Section 5.2 of [RFC 6749] with invalid_dpop_proof as the value of the error parameter.

+
+

Warning

+

The Wallet Instance MUST create a new DPoP proof for the Credential request and MUST NOT use the previously created proof for the Token Endpoint.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

credential_definition

JSON object containing the detailed description of the Credential type. It MUST have at least the type sub claims which is a JSON array containing the type values the Wallet SHALL request in the Credential Request. It MUST be set in accordance to the type of the requested PID/(Q)EAA that is obtained from the PID/(Q)EAA Issuer metadata. In the case of the PID it MUST be set to PersonIdentificationData.

[OIDC4VCI. Draft 13].

format

Format of the Credential to be issued. This MUST be vc+sd-jwt.

[OIDC4VCI. Draft 13].

proof

JSON object containing proof of possession of the key material the issued credential shall be bound to. The proof object MUST contain the following mandatory claims:

+
    +
  • proof_type: JSON string denoting the proof type. It MUST be jwt.

  • +
  • jwt: the JWT used as proof of possession.

  • +
+

[OIDC4VCI. Draft 13].

+
+

Note

+

If the format value is mso_mdoc, the credential request MUST contain the doctype claim which is a JSON string identifying the credential type according to EIDAS-ARF . See Appendix E.2. of [OIDC4VCI. Draft 13] for more details.

+
+

The JWT proof type MUST contain the following parameters for the JOSE header and the JWT body:

+ +++++ + + + + + + + + + + + + + + + + + + + + +

JOSE Header

Description

Reference

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to none or to a symmetric algorithm (MAC) identifier.

[OIDC4VCI. Draft 13], [RFC 7515], [RFC 7517].

typ

It MUST be set to openid4vci-proof+jwt.

[OIDC4VCI. Draft 13], [RFC 7515], [RFC 7517].

jwk

Representing the public key chosen by the Wallet Instance, in JSON Web Key (JWK) [RFC 7517] format that the PID/(Q)EAA shall be bound to, as defined in Section 4.1.3 of [RFC 7515].

[OIDC4VCI. Draft 13], [RFC 7515], [RFC 7517].

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

The value of this claim MUST be the client_id of the Wallet Instance.

[OIDC4VCI. Draft 13], [RFC7519, Section 4.1.1].

aud

The value of this claim MUST be the identifier URL of the PID/(Q)EAA Issuer.

[OIDC4VCI. Draft 13].

iat

UNIX Timestamp with the time of JWT issuance, coded as NumericDate as indicated in RFC 7519.

[OIDC4VCI. Draft 13], [RFC 7519. Section 4.1.6].

nonce

The value type of this claim MUST be a string, where the value is a c_nonce provided by the PID/(Q)EAA Issuer in the Token response.

[OIDC4VCI. Draft 13].

+
+
+

Credential Response

+

Credential Response to the Wallet Instance MUST be sent using application/json media type. If the Credential Request is successfully validated, the PID/(Q)EAA Provider MUST return HTTP response with a 200 (OK) status code and MUST contain the following mandatory claims:

+ + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2 Credential http response parameters

Claim

Description

Reference

format

Format of the Credential to be issued. This MUST be set to vc+sd-jwt when the credential type is SD-JWT.

[OIDC4VCI. Draft 13].

credential

Contains the issued PID/(Q)EAA. When the credential type is SD-JWT, it MUST be an SD-JWT JSON Object (see Section PID/(Q)EAA Data Model).

Appendix E in [OIDC4VCI. Draft 13].

c_nonce

JSON string containing a nonce value to be used to create a proof of possession of the key material when requesting a further Credential or for the renewal of a credential.

[OIDC4VCI. Draft 13].

c_nonce_expires_in

JSON integer corresponding to the c_nonce lifetime in seconds.

[OIDC4VCI. Draft 13].

+
+

Note

+

If the format value is mso_mdoc, the credential value MUST be a base64url-encoded JSON string according to Appendix E of [OIDC4VCI. Draft 13].

+
+

If the Credential Request is invalid, the PID/(Q)EAA Provider MUST return an error response as defined in [OIDC4VCI. Draft 13] <https://openid.net/specs/openid-4-verifiable-credential-issuance-1_0.html#section-7.3.1.2>. The response MUST use the content type application/json and MUST include the following parameters:

+
+
    +
  • error. The error code.

  • +
  • error_description. Text in human-readable form providing further details to clarify the nature of the error encountered.

  • +
+
+
HTTP/1.1 400 Bad Request
+Content-Type: application/json
+Cache-Control: no-store
+
+{
+  "error": "invalid_proof"
+  "error_description":"The proof field is not present or the provided key proof is invalid or not bound to a nonce provided by the Credential Issuer."
+}
+
+
+
+
+

Entity Configuration Credential Issuer

+

Below is a non-normative example of an Entity Configuration of a PID Provider containing a metadata for

+
+
    +
  • federation_entity

  • +
  • oauth_authorization_server

  • +
  • openid_credential_issuer

  • +
  • openid_relying_party

  • +
+
+
HTTP/1.1 200 OK
+Content-Type: application/entity-statement+jwt
+
+{
+
+  "alg": "ES256",
+  "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+  "typ": "entity-statement+jwt"
+
+}
+.
+{
+  "exp": "1649610249",
+  "iat": "1649437449",
+  "iss": "https://pid-provider.example.org",
+  "sub": "https://pid-provider.example.org",
+  "jwks": {
+    "keys": [{
+      "kty": "RSA",
+      "use": "sig",
+      "n": "1Ta-sE ...",
+      "e": "AQAB",
+      "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs"
+    }]
+  },
+  "authority_hints": ["https://superior-entity.example.org/federation"],
+  "metadata": {
+    "federation_entity": {
+      "organization_name": "PID Provider Organization Example",
+      "homepage_uri": "https://pid-provider.example.org",
+      "policy_uri": "https://pid-provider.example.org/privacy_policy",
+      "tos_uri": "https://pid-provider.example.org/info_policy",
+      "logo_uri": "https://pid-provider.example.org/logo.svg",
+      "contacts": ["ops@pid-provider.example.org"],
+      "federation_resolve_endpoint": "https://pid-provider.example.org/resolve"
+    },
+    "oauth_authorization_server": {
+      "authorization_endpoint": "https://pid-provider.example.org/authorization",
+      "pushed_authorization_request_endpoint": "https://pid-provider.example.org/connect/par",
+      "dpop_signing_alg_values_supported": ["ES256", "ES512"],
+      "token_endpoint": "https://pid-provider.example.org/token",
+      "introspection_endpoint": "https://pid-provider.example.org/introspection",
+      "client_registration_types_supported": ["automatic"],
+      "code_challenge_methods_supported": ["S256"],
+      "authorization_details_types_supported":[
+        "openid_credential",
+      ],
+      "acr_values_supported": [
+          "https://www.spid.gov.it/SpidL2",
+          "https://www.spid.gov.it/SpidL3"
+      ],
+      "grant_types_supported": ["authorization_code"],
+      "issuer": "https://pid-provider.example.org",
+      "jwks": {
+          "keys": [
+              {
+                  "kty": "EC",
+                  "kid": "FANFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs"
+                  // other claims ...
+              }
+          ]
+      },
+      "scopes_supported": [
+          "PersonIdentificationData"
+      ],
+      "request_parameter_supported":true,
+      "request_uri_parameter_supported":false,
+      "response_types_supported": ["code"],
+      "subject_types_supported": [
+          "pairwise",
+      ],
+      "token_endpoint_auth_methods_supported": [
+          "attest_jwt_client_auth"
+      ],
+      "token_endpoint_auth_signing_alg_values_supported": [
+          "ES256",
+          "ES384",
+          "ES512"
+      ],
+      "request_object_signing_alg_values_supported": [
+          "ES256",
+          "ES384",
+          "ES512"
+      ]
+    },
+    "openid_credential_issuer": {
+      "credential_issuer": "https://pid-provider.example.org",
+      "credential_endpoint": "https://pid-provider.example.org/credential",
+      "revocation_endpoint": "https://pid-provider.example.org/revoke",
+      "status_attestation_endpoint": "https://pid-provider.example.org/status",
+      "display": [
+        {
+          "name": "PID Provider Italiano di esempio",
+          "locale": "it-IT"
+        },
+        {
+          "name": "Example PID Provider",
+          "locale": "en-US",
+          "logo": {
+             "uri": "https://pid-provider.example.org/public/logo.svg",
+             "alt_text": "logo di questo PID Provider"
+          },
+        }
+      ],
+      "jwks": {
+         "keys": [
+           {
+            "crv": "P-256",
+            "kty": "EC",
+            "x": "newK5qDYMekrCPPO-yEYTdJVWJMTzasMavt2vm1Mb-A",
+            "y": "VizXaLO6dzeesZPxfpGZabTK3cTXtBUbIiQpmiYRtSE",
+            "kid": "ff0bded045fe63fe5d1d64dd83b567e0"
+           }
+         ]
+      },
+      "credential_configurations_supported": [
+        {
+          "format": "vc+sd-jwt",
+          "cryptographic_binding_methods_supported": ["jwk"],
+          "credential_signing_alg_values_supported": ["ES256", "ES384", "ES512"],
+          "proof_types_supported": {
+            "jwt": {
+                "proof_signing_alg_values_supported": [
+                    "ES256"
+                ]
+            }
+          },
+          "display": [{
+              "name": "PID Italiano di esempio",
+              "locale": "it-IT",
+              "logo": {
+                "uri": "https://pid-provider example.org/public/logo.svg",
+                "alt_text": "logo di questa Credenziale"
+              },
+              "background_color": "#12107c",
+              "text_color": "#FFFFFF"
+            },
+            {
+              "name": "Example Italian PID",
+              "locale": "en-US",
+              "logo": {
+                "uri": "https://pid-provider.example.org/public/logo.svg",
+                "alt_text": "The logo of this credential"
+              },
+              "background_color": "#12107c",
+              "text_color": "#FFFFFF"
+            }
+          ],
+          "credential_definition": {
+            "type": ["PersonIdentificationData"],
+            "verification": {
+              "trust_framework": "eidas",
+              "assurance_level": "high",
+              "evidence": [
+                {
+                  "type": "electronic_record",
+                  "record": {
+                    "type": "https://eudi.wallet.cie.gov.it",
+                    "source": {
+                      "organization_name": "Ministero dell'Interno",
+                      "organization_id": "urn:eudi:it:organization_id:ipa_code:m_it",
+                      "country_code": "IT"
+                    }
+                  }
+                }
+              ]
+            },
+            "credentialSubject": {
+              "given_name": {
+                "mandatory": true,
+                "display": [{
+                    "name": "Current First Name",
+                    "locale": "en-US"
+                  },
+                  {
+                    "name": "Nome",
+                    "locale": "it-IT"
+                  }
+                ]
+              },
+              "family_name": {
+                "mandatory": true,
+                "display": [{
+                    "name": "Current Family Name",
+                    "locale": "en-US"
+                  },
+                  {
+                    "name": "Cognome",
+                    "locale": "it-IT"
+                  }
+                ]
+              },
+              "birth_date": {
+                "mandatory": true,
+                "display": [{
+                    "name": "Date of Birth",
+                    "locale": "en-US"
+                  },
+                  {
+                    "name": "Data di Nascita",
+                    "locale": "it-IT"
+                  }
+                ]
+              },
+              "unique_id": {
+                "mandatory": true,
+                "display": [{
+                    "name": "Unique Identifier",
+                    "locale": "en-US"
+                  },
+                  {
+                    "name": "Identificativo univoco",
+                    "locale": "it-IT"
+                  }
+                ]
+              },
+              "tax_id_code": {
+                "mandatory": true,
+                "display": [{
+                    "name": "Tax Id Number",
+                    "locale": "en-US"
+                  },
+                  {
+                    "name": "Codice Fiscale",
+                    "locale": "it-IT"
+                  }
+                ]
+              }
+            }
+          }
+        }
+      }
+    },
+    "openid_relying_party": {
+      <This is the metadata of the PID/EAA Provider acting as a Relying Party in the national digital identity systems (CIE/SPID). See spid-cie-oidc-docs for details.>
+    }
+  }
+}
+
+
+
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/proximity-flow.html b/rp-vp-kid/en/proximity-flow.html new file mode 100644 index 000000000..0989672b7 --- /dev/null +++ b/rp-vp-kid/en/proximity-flow.html @@ -0,0 +1,1840 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Proximity Flow + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + +
+

Proximity Flow

+

This section describes how a Verifier requests the presentation of an mDoc-CBOR Credential to a Wallet Instance according to the ISO 18013-5 Specification. Only Supervised Device Retrieval flow is supported in this technical implementation profile.

+

The presentation phase is divided into three sub-phases:

+
+

1. Device Engagement: This subphase begins when the User is prompted to disclose certain attributes from the mDoc(s). The objective of this subphase is to establish a secure communication channel between the Wallet Instance and the Verifier App, so that the mDoc requests and responses can be exchanged during the communication subphase. +The messages exchanged in this subphase are transmitted through short-range technologies to limit the possibility of interception and eavesdropping. +This technical implementation profile exclusively supports QR code for Device Engagement.

+

2. Session establishment: During the session establishment phase, the Verifier App sets up a secure connection. All data transmitted over this connection is encrypted using a session key, which is known to both the Wallet Instance and the Verifier at this stage. +The established session MAY be terminated based on the conditions as detailed in [ISO18013-5#9.1.1.4].

+

3. Communication - Device Retrieval: The Verifier App encrypts the mDoc request with the appropriate session key and sends it to the Wallet Instance together with its public key in a session establishment message. The mDoc uses the data from the session establishment message to derive the session key and decrypt the mDoc request. +During the communication subphase, the Verifier App has the option to request information from the Wallet using mDoc requests and responses. The primary mode of communication is the secure channel established during the session setup. The Wallet Instance encrypts the mDoc response using the session key and transmits it to the Verifier App via a session data message. This technical implementation profile only supports Bluetooth Low Energy (BLE) for the communication sub-phase.

+
+

The following figure illustrates the flow diagram compliant with ISO 18013-5 for proximity flow.

+
+_images/High-Level-Flow-ITWallet-Presentation-ISO.svg +
+

High-Level Proximity Flow

+
+
+

Step 1-3: The Verifier requests the User to reveal certain attributes from their mDoc(s) stored in the Wallet Instance. The User initiates the Wallet Instance. The Wallet Instance MUST create a new temporary key pair (EDeviceKey.Priv, EDeviceKey.Pub), and incorporate the cipher suite identifier, the identifier of the elliptic curve for key agreement, and the EDeviceKey public point into the device engagement structure (refer to [ISO18013-5#9.1.1.4]). This key pair is temporary and MUST be invalidated immediately after the secure channel is established. Finally, the Wallet Instance displays the QR Code for Device Engagement.

+

Below an example of a device engagement structure that utilizes QR for device engagement and Bluetooth Low Energy (BLE) for data retrieval.

+

CBOR data:

+
a30063312e30018201d818584ba4010220012158205a88d182bce5f42efa59943f33359d2e8a968ff289d93e5fa444b624343167fe225820b16e8cf858ddc7690407ba61d4c338237a8cfcf3de6aa672fc60a557aa32fc670281830201a300f401f50b5045efef742b2c4837a9a3b0e1d05a6917
+
+
+

In diagnostic notation:

+
{
+  0: "1.0", % Version
+
+  1:        % Security
+  [
+      1,     % defines the cipher suite 1 which contains only EC curves
+      24(<<  % embedded CBOR data item
+        {
+          1: 2, % kty:EC2 (Elliptic curves with x and y coordinate pairs)
+        -1: 1, % crv:p256
+-2:h'5A88D182BCE5F42EFA59943F33359D2E8A968FF289D93E5FA444B624343  167FE',% x-coordinate
+-3:h'B16E8CF858DDC7690407BA61D4C338237A8CFCF3DE6AA672FC60A557AA32FC67' % y-coordinate
+        }
+      >>)
+    ],
+
+    2: %DeviceRetrievalMethods(Device engagement using QR code)
+    [
+      [
+        2, %BLE
+        1, % Version
+      {    %BLE options
+          0: false, % no support for mdoc peripheral server mode
+          1: true, % support mdoc central client mode
+          11: h'45EFEF742B2C4837A9A3B0E1D05A6917' % UUID of mdoc client central mode
+        }
+      ]
+    ]
+}
+
+
+

Step 4-6: The Verifier App scans the QR Code and generates its own ephemeral key pair (EReaderKey.Priv, EReaderKey.Pub). It then calculates the session key, using the public key received in the Engagement Structure and its newly-generated private key, as outlined in [ISO18013-5#9.1.1.5]. Finally, it generates its session key, which must be independently derived by both the Wallet Instance and the Verifier App.

+

Step 7: The Verifier App creates an mDoc request that MUST be encrypted using the relevant session key, and transmits it to the Wallet Instance along with EReaderKey.Pub within a session establishment message. The mDoc request MUST be encoded in CBOR, as demonstrated in the following non-normative example.

+

CBOR data: +.. code-block:

+
a26776657273696f6e63312e306b646f63526571756573747381a26c6974656d7352657175657374d818590152a267646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e4954a375766572696669636174696f6e2e65766964656e6365f4781c766572696669636174696f6e2e6173737572616e63655f6c6576656cf4781c766572696669636174696f6e2e74727573745f6672616d65776f726bf4716f72672e69736f2e31383031332e352e31ab76756e5f64697374696e6775697368696e675f7369676ef47264726976696e675f70726976696c65676573f46f646f63756d656e745f6e756d626572f46a69737375655f64617465f46f69737375696e675f636f756e747279f47169737375696e675f617574686f72697479f46a62697274685f64617465f46b6578706972795f64617465f46a676976656e5f6e616d65f468706f727472616974f46b66616d696c795f6e616d65f46a726561646572417574688443a10126a11821590129308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97bf6584058a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9
+
+
+

The above CBOR data is represented in diagnostic notation as follows: +.. code-block:

+
{
+  "version": "1.0",
+  "docRequests": [
+  {
+    "itemsRequest": 24(<< {
+      "docType": "org.iso.18013.5.1.mDL",
+      "nameSpaces": {
+        "org.iso.18013.5.1.IT": {
+          "verification.evidence": false,
+          "verification.assurance_level": false,
+          "verification.trust_framework": false
+        },
+        "org.iso.18013.5.1": {
+          "un_distinguishing_sign": false,
+          "driving_privileges": false,
+          "document_number": false,
+          "issue_date": false,
+          "issuing_country": false,
+          "issuing_authority": false,
+          "birth_date": false,
+          "expiry_date": false,
+          "given_name": false,
+          "portrait": false,
+          "family_name": false
+        }
+      }
+    } >>),
+    "readerAuth": [
+      h'a10126',
+      {
+        33: h'308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97b'
+      },
+      null,
+      h'58a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9'
+    ]
+  }
+  ]
+}
+
+
+

Step 8: The Wallet Instance uses the session establishment message to derive the session keys and decrypt the mDoc request. It computes the session key using the public key received from the Verifier App and its private key.

+

Step 9-10: When the Wallet Instance receives the mDoc request, it locates the documents that contain the requested attributes and asks the User for permission to provide this information to the Verifier. If the User agrees, the Wallet generates an mDoc response and transmits it to the Verifier App through the secure channel.

+

Step 11-12: If the User gives consent, the Wallet Instance creates an mDoc response and transmits it to the Verifier App via the secure channel. The mDoc response MUST be encoded in CBOR, with its structure outlined in [ISO18013-5#8.3.2.1.2.2]. Below is a non-normative example of an mDoc response.

+

CBOR Data: +.. code-block:

+
a36776657273696f6e63312e3069646f63756d656e747381a367646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c6973737565725369676e6564a26a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e495483d81858f7a46864696765737449440b6672616e646f6d506d44f21ee875f2c1d502b43198e5a15271656c656d656e744964656e74696669657275766572696669636174696f6e2e65766964656e63656c656c656d656e7456616c756581a2647479706571656c656374726f6e69635f7265636f7264667265636f7264bf6474797065781f68747470733a2f2f657564692e77616c6c65742e70646e642e676f762e697466736f75726365bf716f7267616e697a6174696f6e5f6e616d65754d6f746f72697a7a617a696f6e6520436976696c656f6f7267616e697a6174696f6e5f6964656d5f696e666c636f756e7472795f636f6465626974ffffd8185866a4686469676573744944046672616e646f6d50185d84dfb71ce9b173010ddd62174fbe71656c656d656e744964656e746966696572781c766572696669636174696f6e2e74727573745f6672616d65776f726b6c656c656d656e7456616c7565656569646173d8185865a4686469676573744944006672616e646f6d50137f903174253c4585358267aae2ea4e71656c656d656e744964656e746966696572781c766572696669636174696f6e2e6173737572616e63655f6c6576656c6c656c656d656e7456616c75656468696768716f72672e69736f2e31383031332e352e318bd8185852a46864696765737449440c6672616e646f6d5053e29d0ddbbc7d2306a32bdbe2e56e5171656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756563446f65d8185855a4686469676573744944036672616e646f6d50990cba2069fa1b33b8d6ae910b6549dc71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c756567416e746f6e696fd818585ba46864696765737449440a6672616e646f6d504086c1379975f805f1b1f4975e6a126571656c656d656e744964656e7469666965726a69737375655f646174656c656c656d656e7456616c7565d903ec6a323031392d31302d3230d818585ca4686469676573744944016672616e646f6d50ab4ca30c918dd2fd0bf35242c15fa2d871656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d31302d3230d8185855a4686469676573744944076672616e646f6d508d9066f6c8da16619867cd4e2fab0c8871656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ea4686469676573744944056672616e646f6d5059fe68db795dee4c20976380ea24770571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c75657828497374697475746f20506f6c696772616669636f2065205a656363612064656c6c6f20537461746fd818585ba4686469676573744944026672616e646f6d5008b3f1ca5517019767be3dee3bb0614571656c656d656e744964656e7469666965726a62697274685f646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3230d818585ca4686469676573744944096672616e646f6d50a2395ec214350c26066306e23279b3ae71656c656d656e744964656e7469666965726f646f63756d656e745f6e756d6265726c656c656d656e7456616c756569393837363534333231d8185850a4686469676573744944066672616e646f6d50a25e1a5b915d2d6eafee9674e023293971656c656d656e744964656e74696669657268706f7274726169746c656c656d656e7456616c75654420212223d81858eea46864696765737449440d6672616e646f6d50eeed6a3b856563627589a360939d12f771656c656d656e744964656e7469666965727264726976696e675f70726976696c656765736c656c656d656e7456616c756582a37576656869636c655f63617465676f72795f636f646561416a69737375655f64617465d903ec6a323031382d30382d30396b6578706972795f64617465d903ec6a323032342d31302d3230a37576656869636c655f63617465676f72795f636f646561426a69737375655f64617465d903ec6a323031372d30322d32336b6578706972795f64617465d903ec6a323032342d31302d3230d818585ba4686469676573744944086672616e646f6d50c0ef486b2a194ed3cbf7f354fd40092171656c656d656e744964656e74696669657276756e5f64697374696e6775697368696e675f7369676e6c656c656d656e7456616c756561496a697373756572417574688443a10126a118215901423082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb
+
+
+

In diagnostic notation: +.. code-block:

+
{
+  "version": "1.0",
+  "documents": [
+  {
+    "docType": "org.iso.18013.5.1.mDL",
+    "issuerSigned": {
+      "nameSpaces": {
+        "org.iso.18013.5.1.IT": [
+          24(<< {
+            "digestID": 11,
+            "random": h'6d44f21ee875f2c1d502b43198e5a152',
+            "elementIdentifier": "verification.evidence",
+            "elementValue": [
+              {
+                "type": "electronic_record",
+                "record": {
+                  "type": "https://eudi.wallet.pdnd.gov.it",
+                  "source": {
+                    "organization_name": "Motorizzazione Civile",
+                    "organization_id": "m_inf",
+                    "country_code": "it"
+                  }
+                }
+              }
+            ]
+          } >>),
+          24(<< {
+            "digestID": 4,
+            "random": h'185d84dfb71ce9b173010ddd62174fbe',
+            "elementIdentifier": "verification.trust_framework",
+            "elementValue": "eidas"
+          } >>),
+          24(<< {
+            "digestID": 0,
+            "random": h'137f903174253c4585358267aae2ea4e',
+            "elementIdentifier": "verification.assurance_level",
+            "elementValue": "high"
+          } >>)
+        ],
+        "org.iso.18013.5.1": [
+          24(<< {
+            "digestID": 12,
+            "random": h'53e29d0ddbbc7d2306a32bdbe2e56e51',
+            "elementIdentifier": "family_name",
+            "elementValue": "Doe"
+          } >>),
+          24(<< {
+            "digestID": 3,
+            "random": h'990cba2069fa1b33b8d6ae910b6549dc',
+            "elementIdentifier": "given_name",
+            "elementValue": "Antonio"
+          } >>),
+          24(<< {
+            "digestID": 10,
+            "random": h'4086c1379975f805f1b1f4975e6a1265',
+            "elementIdentifier": "issue_date",
+            "elementValue": 1004("2019-10-20")
+          } >>),
+          24(<< {
+            "digestID": 1,
+            "random": h'ab4ca30c918dd2fd0bf35242c15fa2d8',
+            "elementIdentifier": "expiry_date",
+            "elementValue": 1004("2024-10-20")
+          } >>),
+          24(<< {
+            "digestID": 7,
+            "random": h'8d9066f6c8da16619867cd4e2fab0c88',
+            "elementIdentifier": "issuing_country",
+            "elementValue": "IT"
+          } >>),
+          24(<< {
+            "digestID": 5,
+            "random": h'59fe68db795dee4c20976380ea247705',
+            "elementIdentifier": "issuing_authority",
+            "elementValue": "Istituto Poligrafico e Zecca dello Stato"
+          } >>),
+          24(<< {
+            "digestID": 2,
+            "random": h'08b3f1ca5517019767be3dee3bb06145',
+            "elementIdentifier": "birth_date",
+            "elementValue": 1004("1956-01-20")
+          } >>),
+          24(<< {
+            "digestID": 9,
+            "random": h'a2395ec214350c26066306e23279b3ae',
+            "elementIdentifier": "document_number",
+            "elementValue": "987654321"
+          } >>),
+          24(<< {
+            "digestID": 6,
+            "random": h'a25e1a5b915d2d6eafee9674e0232939',
+            "elementIdentifier": "portrait",
+            "elementValue": h'20212223'
+          } >>),
+          24(<< {
+            "digestID": 13,
+            "random": h'eeed6a3b856563627589a360939d12f7',
+            "elementIdentifier": "driving_privileges",
+            "elementValue": [
+              {
+                "vehicle_category_code": "A",
+                "issue_date": 1004("2018-08-09"),
+                "expiry_date": 1004("2024-10-20")
+              },
+              {
+                "vehicle_category_code": "B",
+                "issue_date": 1004("2017-02-23"),
+                "expiry_date": 1004("2024-10-20")
+              }
+            ]
+          } >>),
+          24(<< {
+            "digestID": 8,
+            "random": h'c0ef486b2a194ed3cbf7f354fd400921',
+            "elementIdentifier": "un_distinguishing_sign",
+            "elementValue": "I"
+          } >>)
+        ]
+      },
+      "issuerAuth": [
+        h'a10126',
+        {
+          33: h'3082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb7d518bd9a519583e082d67effff06565804fc09abf0e4a08e699c9dba3796285a15f68e40ac7f9fc7700a15153a4065300a06082a8648ce3d040302034800304502210099b7d62e6bf7b1823db3713df889bf73e70bb4d9c58c21e92c58d2f1beffe932022058d039747a00d70e6d66be4797e6142b3608a014ee09b7b79af2cae2aaf27788'
+        },
+        24(<< {
+      "version": "1.0",
+      "digestAlgorithm": "SHA-256",
+      "docType": "org.iso.18013.5.1.mDL",
+      "valueDigests": {
+        "org.iso.18013.5.1": {
+        1: h'0E5F0B6B33418E508740771E82F893372EAF5B2445BC4C84DCF08B005E9493FC',
+        2: h'DE21BB62FF2897D8B986D2CDA9F9BC5865C02807F7B4D9DD1FA4A79DF4C0D37F',
+        3: h'BC5568239E35CE9FF8798C27FFDCD757B134B679F0FE05729AA3491381912E65',
+        5: h'E6048BDC7FD6454296F1E3F54536107C9C5B24C4064DE46A98121E3630EECCA2',
+        6: h'73690D92DCAA61B0203870F67C6AA9FDFEA889B6F0C720DE757B4B0A8516A206',
+        7: h'E353EA0B0FD92B6BE90C64CC3B2EE1284153A8F0F5066B99AAC599200E6EEEB2',
+        8: h'29227872CEB49923D267B5F4BADE6D387B42AC2DC4B2AE26C9013067FEE7018A',
+        9: h'A6A119F7CACAC0B8C6AACAC747FD3FE7E50B6D9BB8A507FDA79F0DF6646F285D',
+        10: h'6D8025D2F02A5E7E1406FB6AAEB67F9EDE9B07191A53F3E23B77C528223A94E2',
+        12: h'B0D43E4E2EA534E4D5304E64BCF7A0F13E2C8EE8304B9CD23ABA4909652A4647',
+        13: h'FBF4DE318982F2DBAD43C601CAEB22628B301AC18AA8264C5831B2AAAC89C486'
+        },
+        "org.iso.18013.5.1.IT": {
+        0: h'CF57377B675F64F37314739592C1E8A911A7DDAF341CE2902FE877C5A835E4C1',
+        4: h'4A4B4CC64EC9299C1A2501EA449F577005E9F7A60408057C07A7C67FB151E5F5',
+        11: h'78824FBD6FBBA88A2AAB44DF8B6F5E9759126D87D1F4415995E658FD9239E1FE'
+        }
+      },
+      "deviceKeyInfo": {
+        "deviceKey": {
+        1: 2,
+        -1: 1,
+        -2: h'AFD09E720B918CEDC2B8A881950BAB6A1051E18AE16A814D51E609938663D5E1',
+        -3: h'61FBC6C8AD24EC86A78BB4E9AC377DD2B7C711D9F2EB9AFD4AA0963662847AED'}},
+        "validityInfo": {
+          "signed": 0("2023-11-24T14:54:05Z"),
+          "validFrom": 0("2023-11-24T14:54:05Z"),
+          "validUntil": 0("2024-11-24T14:54:05Z")}
+        }  >>),
+        h'f2461e4fab69e9f7bcffe552395424514524d1679440036213173101448d1b1ab4a293859b389ffa8b47aeed10e9b0c1545412ac37c51a76482cd9bbbe110152'
+      ]
+    },
+    "deviceSigned": {
+      "nameSpaces": 24(<< {} >>),
+      "deviceAuth": {
+        "deviceSignature": [
+          h'a10126',
+          {},
+          null,
+          h'1fed7190d2975ab79c072e6f1d9d52436059d1fc959d55baf74f057d89b10fcc0dc77a50d433d4c76ddf26223c5560c4ab123b5cb5eb805a90036aa147493076'
+        ]
+      }
+    }
+  }
+  ],
+  "status": 0
+}
+
+
+

Step 13: The Verifier App is required to validate the signatures in the mDoc's issuerSigned field using the public key of the Credential Issuer specified within the mDoc. Subsequently, the Verifier MUST validate the signature in the deviceSigned field. If these signature checks pass, the Verifier can confidently consider the received information as valid.

+
+

Device Engagement

+

The Device Engagement structure MUST be have at least the following components:

+
+
    +
  • Version: tstr. Version of the data structure being used.

  • +
  • Security: an array that contains two mandatory values

    +
      +
    • the cipher identifier: see Table 22 of [ISO18013-5]

    • +
    • the mDL public ephemeral key generated by the Wallet Instance and required by the Verifier App to derive the Session Key. The mDL public ephemeral key MUST be of a type allowed by the indicated cipher suite.

    • +
    +
  • +
  • transferMethod: an array that contains one or more transferMethod arrays when performing device engagement using the QR code. This array is for offline data retrieval methods. A transferMethod array holds two mandatory values (type and version). Only the BLE option is supported by this technical implementation profile, then the type value MUST be set to 2.

  • +
  • BleOptions: this elements MUST provide options for the BLE connection (support for Peripheral Server or Central Client Mode, and the device UUID).

  • +
+
+
+
+

mDoc Request

+

The messages in the mDoc Request MUST be encoded using CBOR. The resulting CBOR byte string for the mDoc Request MUST be encrypted with the Session Key obtained after the Device Engagement phase and MUST be transmitted using the BLE protocol. +The details on the structure of mDoc Request, including identifier and format of the data elements, are provided below.

+
+
    +
  • version: (tstr). Version of the data structure.

  • +
  • docRequests: Requested DocType, NameSpace and data elements.

    +
      +
    • itemsRequest: #6.24(bstr .cbor ItemsRequest).

      +
        +
      • docType: (tstr). The DocType element contains the type of document requested. See Data Model Section.

      • +
      • nameSpaces: (tstr). See Data Model Section for more details.

        +
          +
        • dataElements: (tstr). Requested data elements with Intent to Retain value for each requested element.

          +
            +
          • IntentToRetain: (bool). It indicates that the Verifier App intends to retain the received data element.

          • +
          +
        • +
        +
      • +
      +
    • +
    • readerAuth: COSE_Sign1. It is required for the Verifier App authentication.

    • +
    +
  • +
+
+
+

Note

+

The domestic data elements MUST not be returned unless specifically requested by the Verifier App.

+
+
+
+

mDoc Response

+

The messages in the mDoc Response MUST be encoded using CBOR and MUST be encrypted with the Session Key obtained after the Device Engagement phase. +The details on the structure of mDoc Response are provided below.

+
+
    +
  • version: (tstr). Version of the data structure.

  • +
  • documents: Returned DocType, and ResponseData.

    +
      +
    • docType: (tstr). The DocType element contains the type of document returned. See Data Model Section.

    • +
    • ResponseData:

      +
        +
      • IssuerSigned: Responded data elements signed by the issuer.

        +
          +
        • nameSpaces: (tstr). See Data Model Section for more details.

          +
            +
          • IssuerSignedItemBytes: #6.24(bstr .cbor).

            +
              +
            • digestID: (uint). Reference value to one of the ValueDigests provided in the Mobile Security Object (issuerAuth).

            • +
            • random: (bstr). Random byte value used as salt for the hash function. This value SHALL be different for each IssuerSignedItem and it SHALL have a minimum length of 16 bytes.

            • +
            • elementIdentifier: (tstr). Identifier of User attribute name contained in the Credential.

            • +
            • elementValue: (any). User attribute value

            • +
            +
          • +
          +
        • +
        +
      • +
      • DeviceSigned: Responded data elements signed by the Wallet Instance.

        +
          +
        • NameSpaces: #6.24(bstr .cbor DeviceNameSpaces). The DeviceNameSpaces structure MAY be an empty structure. DeviceNameSpaces contains the data element identifiers and values. It is returned as part of the corresponding namespace in DeviceNameSpace.

          +
            +
          • DataItemName: (tstr). The identifier of the element.

          • +
          • DataItemValue: (any). The value of the element.

          • +
          +
        • +
        • DeviceAuth: The DeviceAuth structure MUST contain the DeviceSignature elements.

          +
            +
          • DeviceSignature: It MUST contain the device signature for the Wallet Instance authentication.

          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
  • status: It contains a status code. For detailed description and action required refer to to Table 8 (ResponseStatus) of the [ISO18013-5]

  • +
+
+
+
+

Session Termination

+

The session MUST be terminated if at least one of the following conditions occur.

+
+
    +
  • After a time-out of no activity of receiving or sending session establishment or session data messages occurs. The time-out for no activity implemented by the Wallet Instance and the Verifier App SHOULD be no less than 300 seconds.

  • +
  • When the Wallet Instance doesn't accept any more requests.

  • +
  • When the Verifier App does not send any further requests.

  • +
+
+

If the Wallet Instance and the Verifier App does not send or receive any further requests, the session termination MUST be initiated as follows.

+
+
    +
  • Send the status code for session termination, or

  • +
  • dispatch the "End" command as outlined in [ISO18013-5#8.3.3.1.1.5].

  • +
+
+

When a session is terminated, the Wallet Instance and the Verifier App MUST perform at least the following actions:

+
+
    +
  • destruction of session keys and related ephemeral key material;

  • +
  • closure of the communication channel used for data retrieval.

  • +
+
+
+
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/pseudonyms.html b/rp-vp-kid/en/pseudonyms.html new file mode 100644 index 000000000..f232f1b13 --- /dev/null +++ b/rp-vp-kid/en/pseudonyms.html @@ -0,0 +1,1477 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | pseudonyms.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

pseudonyms.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/relying-party-solution.html b/rp-vp-kid/en/relying-party-solution.html new file mode 100644 index 000000000..a061304c7 --- /dev/null +++ b/rp-vp-kid/en/relying-party-solution.html @@ -0,0 +1,2793 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Relying Party Solution + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Relying Party Solution

+

This section describes how a remote Relying Party or a Verifier App requests to a Wallet Instance the presentation of the PID/EAAs.

+

In this section the following flows are described:

+
    +
  • Remote Flow, where the User presents a Credential to a remote Relying Party according to OPENID4VP. In this scenario the user-agent and the Wallet Instance may be used in the same device (Same Device Flow), or in different devices (Cross Device Flow).

  • +
  • Proximity Flow, where the User presents a Credential to a Verifier App according to ISO 18013-5. The User interacts with a Verifier using proximity connection technologies such as QR Code and Bluetooth Low Energy (BLE).

  • +
+
+

Remote Flow

+

In this flow the Relying Party MUST provide the URL where the signed presentation Request Object is available for download.

+

Depending on whether the User is using a mobile device or a workstation, the Relying Party MUST support the following remote flows:

+
    +
  • Same Device, the Relying Party MUST provide a HTTP redirect (302) location to the Wallet Instance;

  • +
  • Cross Device, the Relying Party MUST provide a QR Code which the User frames with the Wallet Instance.

  • +
+

Once the Wallet Instance establishes the trust with the Relying Party and evaluates the request, the User gives the consent for the disclosure of the Digital Credentials, in the form of a Verifiable Presentation.

+

A High-Level description of the remote flow, from the User's perspective, is given below:

+
+
    +
  1. the Wallet Instance obtains an URL in the Same Device flow or a QR Code containing the URL in Cross Device flow;

  2. +
  3. the Wallet Instance extracts from the payload the following parameters: client_id, request_uri, state, request_uri_method and client_id_scheme;

  4. +
  5. If the client_id_scheme is provided and set with the value entity_id, the Wallet Instance MUST collect and validate the OpenID Federation Trust Chain related to the Relying Party. If the client_id_scheme is either not provided or is assigned a value different from entity_id, the Wallet Instance MUST establish the trust by utilizing the client_id or an alternative client_id_scheme value. This alternative value MUST enable the Wallet Instance to establish trust with the Relying Party, ensuring compliance with the assurance levels mandated by the trust framework;

  6. +
  7. If request_uri_method is provided and set with the value post, the Wallet Instance SHOULD transmit its metadata to the Relying Party's request_uri endpoint using the HTTP POST method and obtain the signed Request Object. If request_uri_method is set with the value get or not present, the Wallet Instance MUST fetch the signed Request Object using an HTTP request with method GET to the endpoint provided in the request_uri parameter;

  8. +
  9. the Wallet Instance verifies the signature of the signed Request Object, using the public key obtained with the trust chain, and that its issuer matches the client_id obtained at the step number 2;

  10. +
  11. the Wallet Instance evaluates the requested Digital Credentials and checks the elegibility of the Relying Party in asking these by applying the policies related to that specific Relying Party, obtained with the trust chain;

  12. +
  13. the Wallet Instance asks User disclosure and consent;

  14. +
  15. the Wallet Instance presents the requested information to the Relying Party along with the Wallet Attestation. The Relying Party validates the presented Credentials checking the trust with their Issuers, and validates the Wallet Attestation by also checking that the Wallet Provider is trusted;

  16. +
  17. the Wallet Instance informs the User about the successfull authentication with the Relying Party, the User continues the navigation.

  18. +
+
+

Below a sequence diagram that summarizes the interactions between all the involved parties.

+
+_images/cross_device_auth_seq_diagram.svg +
+

Fig. 5 Remote Protocol Flow

+
+
+

The details of each step shown in the previous picture are described in the table below.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Id

Description

1, 2

The User requests to access to a protected resource of the Relying Party.

3, 4,

The Relying Party provides the Wallet Instance with a URL where the information about the Relying Party are provided, along with the information about where the signed request is available for download.

5, 6, 7, 8, 9

In the Cross Device Flow, the Request URI is presented as a QR Code displayed to the User. The User scans the QR Code using the Wallet Instance, which retrieves a URL with the parameters client_id, request_uri, state, client_id_scheme, and request_uri_method. Conversely, in the Same Device Flow, the Relying Party supplies identical information as in the Cross-Device flow, but directly through a URL.

10,

The Wallet Instance evaluates the trust with the Relying Party.

11, 12

The Wallet Instance checks if the Relying Party has provided the request_uri_method within its signed Request Object. If provided and it is equal to post, the Wallet Instance provides its metadata to the Relying Party. The Relying Party returns a signed Request Object compliant to the Wallet technical capabilities.

13

When the Wallet Instance capabilities discovery is not supported by RP, the Wallet Instance request the signed Request Object using the HTTP method GET.

14

The Wallet Instance obtains the signed Request Object.

15, 16, 17

The Request Object JWS is verified by the Wallet Instance. The Wallet Instance processes the Relying Party metadata and applies the policies related to the Relying Party, attesting whose Digital Credentials and User data the Relying Party is granted to request.

18, 19

The Wallet Instance requests the User's consent for the release of the Credentials. The User authorizes and consents the presentation of the Credentials by selecting/deselecting the personal data to release.

20

The Wallet Instance provides the Authorization Response to the Relying Party using an HTTP request with the method POST (response mode "direct_post.jwt").

21, 22, 23, 24, 25

The Relying Party verifies the Authorization Response, extracts the Wallet Attestation to establish the trust with the Wallet Solution. The Relying Party extracts the Digital Credentials and attests the trust to the Credentials Issuer and the proof of possession of the Wallet Instance about the presented Digital Credentials. Finally, the Relying Party verifies the revocation status of the presented Digital Credentials.

26

The Relying Party provides to the Wallet Instance a redirect URI with a response code to be used by the Wallet Instance to finalize the authentication.

27, 28 and 29

The User is informed by the Wallet Instance that the Autentication succeded, then the protected resource is made available to the User.

+
+

Request URI with HTTP POST

+

The Relying Party SHOULD provide the POST method with its request_uri endpoint +allowing the Wallet Instance to inform the Relying Party about its technical capabilities.

+

This feature can be useful when, for example, the Wallet Instance supports +a restricted set of features, supported algorithms or a specific url for +its authorization_endpoint, and any other information that it deems necessary to +provide to the Relying Party for better interoperability.

+
+

Warning

+

The Wallet Instance, when providing its technical capabilities to the +Relying Party, MUST NOT include any User information or other explicit +information regarding the hardware used or usage preferences of its User.

+
+

If both the Relying Party and the Wallet Instance +support the request_uri_method with HTTP POST, +the Wallet Instance capabilities (metadata) MUST +be provided using an HTTP request to the request_uri endpoint of the Relying Party, +with the method POST and content type set to application/json.

+

A non-normative example of the HTTP request is represented below:

+
POST /request-uri HTTP/1.1
+HOST: relying-party.example.org
+Content-Type: application/json
+
+{
+    "authorization_endpoint": "https://wallet-solution.digital-strategy.europa.eu/authorization",
+    "response_types_supported": [
+      "vp_token"
+    ],
+    "response_modes_supported": [
+      "form_post.jwt"
+    ],
+    "vp_formats_supported": {
+      "vc+sd-jwt": {
+          "sd-jwt_alg_values": [
+              "ES256",
+              "ES384"
+          ]
+      }
+    },
+    "request_object_signing_alg_values_supported": [
+      "ES256"
+    ],
+    "presentation_definition_uri_supported": false
+}
+
+
+

The response of the Relying Party is defined in the section below.

+
+
+

Authorization Request Details

+

The Relying Party MUST create a Request Object in the form of a signed JWT and +MUST provide it to the Wallet Instance through an HTTP URL (request URI). +The HTTP URL points to the web resource where the signed Request Object is +available for download. The URL parameters contained in the Relying Party +response, containing the request URI, are described in the Table below.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

client_id

REQUIRED. Unique identifier of the Relying Party.

request_uri

REQUIRED. The HTTPs URL where the Relying Party provides the signed Request Object to the Wallet Instance.

client_id_scheme

OPTIONAL. The scheme used by the Relying Party for the client_id, detailing the format and structure and the trust evaluation method. It SHOULD be set with entity_id.

state

OPTIONAL. A unique identifier for the current transaction generated by the Relying Party. The value SHOULD be opaque to the Wallet Instance.

request_uri_method

OPTIONAL. The HTTP method MUST be set with get or post. The Wallet Instance should use this method to obtain the signed Request Object from the request_uri. If not provided or equal to get, the Wallet Instance SHOULD use the HTTP method get. Otherwise, the Wallet Instance SHOULD provide its metadata within the HTTP POST body encoded in application/json.

+

Below a non-normative example of the response containing the required parameters previously described.

+
https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=...&request_uri=...&client_id_scheme=entity_id&request_uri_method=post
+
+
+

The value corresponding to the request_uri endpoint SHOULD be randomized, according to RFC 9101, The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR) Section 5.2.1.

+

In the Same Device Flow the Relying Party uses an HTTP response redirect (with status code set to 302) as represented in the following non-normative example:

+
HTTP/1.1 /authorization Found
+Location: https://wallet-solution.digital-strategy.europa.eu?
+client_id=https%3A%2F%2Frelying-party.example.org%2Fcb
+&request_uri=https%3A%2F%2Frelying-party.example.org%2Frequest_uri
+&client_id_scheme=entity_id
+&request_uri_method=post
+
+
+

In the Cross Device Flow, a QR Code is shown by the Relying Party to the User in order to provide the Authorization Request. The User frames the QR Code using their Wallet Instance.

+

Below is represented a non-normative example of a QR Code issued by the Relying Party.

+
+_images/verifier_qr_code.svg
+

Below is represented a non-normative example of the QR Code raw payload:

+
https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=https%3A%2F%2Frelying-party.example.org&request_uri=https%3A%2F%2Frelying-party.example.org&client_id_scheme=entity_id&request_uri_method=post
+
+
+
+

Note

+

The error correction level chosen for the QR Code MUST be Q (Quartily - up to 25%), since it offers a good balance between error correction capability and data density/space. This level of quality and error correction allows the QR Code to remain readable even if it is damaged or partially obscured.

+
+
+
+

Cross Device Flow Status Checks and Security

+

When the flow is Cross Device, the user-agent needs to check the session status to the endpoint made available by Relying Party (status endpoint). This check MAY be implemented in the form of JavaScript code, within the page that shows the QRCode, then the user-agent checks the status with a polling strategy in seconds or a push strategy (eg: web socket).

+

Since the QRcode page and the status endpoint are implemented by the Relying Party, it is under the Relying Party responsability the implementation details of this solution, since it is related to the Relying Party's internal API. However, the text below offers an implementation solution.

+

The Relying Party MUST bind the request of the user-agent, with a session cookie marked as Secure and HttpOnly , with the issued request. The request url SHOULD include a parameter with a random value. The HTTP response returned by this specialized endpoint MAY contain the HTTP status codes listed below:

+
    +
  • 201 Created. The signed Request Object was issued by the Relying Party that waits to be downloaded by the Wallet Instance at the request_uri endpoint.

  • +
  • 202 Accepted. This response is given when the signed Request Object was obtained by the Wallet Instance.

  • +
  • 200 OK. The Wallet Instance has provided the presentation to the Relying Party's response_uri endpoint and the User authentication is successful. The Relying Party updates the session cookie allowing the user-agent to access to the protected resource. An URL is provided carrying the location where the user-agent is intended to navigate.

  • +
  • 401 Unauthorized. The Wallet Instance or its User have rejected the request, or the request is expired. The QRCode page SHOULD be updated with an error message.

  • +
+

Below a non-normative example of the HTTP Request to this specialized endpoint, where the parameter id contains an opaque and random value:

+
GET /session-state?id=3be39b69-6ac1-41aa-921b-3e6c07ddcb03
+HTTP/1.1
+HOST: relying-party.example.org
+
+
+
+
+

Request Object Details

+

Below a non-normative example of HTTP request made by the Wallet Instance to the Relying Party.

+
GET /request_uri HTTP/1.1
+HOST: relying-party.example.org
+
+
+
+
+

Request URI Response

+

The Relying Party issues the signed Request Object, where a non-normative example in the form of decoded header and payload is shown below:

+
{
+  "alg": "ES256",
+  "typ": "JWT",
+  "trust_chain": [
+    "MIICajCCAdOgAwIBAgIC...awz",
+    "MIICajCCAdOgAwIBAgIC...2w3",
+    "MIICajCCAdOgAwIBAgIC...sf2"
+  ]
+}
+.
+{
+  "scope": "eu.europa.ec.eudiw.pid.it.1 WalletAttestation",
+  "client_id_scheme": "entity_id",
+  "client_id": "https://relying-party.example.org",
+  "response_mode": "direct_post.jwt",
+  "response_type": "vp_token",
+  "response_uri": "https://relying-party.example.org/response_uri",
+  "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb",
+  "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03",
+  "iss": "https://relying-party.example.org",
+  "iat": 1672418465,
+  "exp": 1672422065,
+  "request_uri_method": "post"
+}
+
+
+

The JWS header parameters are described below:

+ ++++ + + + + + + + + + + + + + + + + + + + +

Name

Description

alg

Algorithm used to sign the JWT, according to [RFC 7516#section-4.1.1]. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to none or to a symmetric algorithm (MAC) identifier.

typ

Media Type of the JWT, as defined in [RFC 7519].

kid

Key ID of the public key needed to verify the JWS signature, as defined in [RFC 7517]. REQUIRED when trust_chain is used.

trust_chain

Sequence of Entity Statements that composes the Trust Chain related to the Relying Party, as defined in OIDC-FED Section 3.2.1. Trust Chain Header Parameter.

+

The JWS payload parameters are described herein:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

scope

Aliases for well-defined Presentation Definitions IDs. It is used to identify which required Credentials and User attributes are requested by the Relying Party, according to the Section "Using scope Parameter to Request Verifiable Credential(s)" of [OID4VP].

client_id_scheme

String identifying the scheme of the value in the client_id. It MUST be set to the value entity_id.

client_id

Unique Identifier of the Relying Party.

response_mode

It MUST be set to direct_post.jwt.

response_type

It MUST be set to vp_token.

response_uri

The Response URI to which the Wallet Instance MUST send the Authorization Response using an HTTP request using the method POST.

nonce

Fresh cryptographically random number with sufficient entropy, which length MUST be at least 32 digits.

state

Unique identifier of the Authorization Request.

iss

The entity that has issued the JWT. It will be populated with the Relying Party client id.

iat

Unix Timestamp, representing the time at which the JWT was issued.

exp

Unix Timestamp, representing the expiration time on or after which the JWT MUST NOT be valid anymore.

request_uri_method

String determining the HTTP method to be used with the request_uri endpoint to provide the Wallet Instance metadata to the Relying Party. The value is case-insensitive and can be set to: get or post. The GET method, as defined in [@RFC9101], involves the Wallet Instance sending a GET request to retrieve a Request Object. The POST method involves the Wallet Instance requesting the creation of a new Request Object by sending an HTTP POST request, with its metadata, to the request URI of the Relying Party.

+
+

Warning

+

Using the parameter scope requires that the Relying Party Metadata MUST contain the presentation_definition, where a non-normative example of it is given below:

+
+
{
+  "presentation_definition": {
+    "id": "presentation definitions",
+    "input_descriptors": [
+      {
+        "id": "eu.europa.ec.eudiw.pid.it.1",
+        "name": "Person Identification Data",
+        "purpose": "User authentication",
+        "format": "vc+sd-jwt",
+        "constraints": {
+          "fields": [
+            {
+              "path": [
+                "$.credentialSubject.unique_id",
+                "$.credentialSubject.given_name",
+                "$.credentialSubject.family_name",
+              ]
+            }
+          ],
+          "limit_disclosure": "preferred"
+        }
+      },
+      {
+        "id": "WalletAttestation",
+        "name": "Wallet Attestation",
+        "purpose": "Wallet Authentication",
+        "format": "jwt",
+        "constraints": {
+          "fields": [
+            {
+              "path": [
+                "$.iss",
+                "$.exp",
+                "$.iat",
+                "$.cnf.jwk",
+                "$.aal",
+              ]
+            }
+          ]
+        }
+      }
+    ]
+  }
+}
+
+
+
+

Note

+

The following parameters, even if defined in [OID4VP], are not mentioned in the previous non-normative example, since their usage is conditional and may change in future release of this documentation.

+
    +
  • presentation_definition: JSON object according to Presentation Exchange. This parameter MUST not be present when presentation_definition_uri or scope are present.

  • +
  • presentation_definition_uri: Not supported. String containing an HTTPS URL pointing to a resource where a Presentation Definition JSON object can be retrieved. This parameter MUST be present when presentation_definition parameter or a scope value representing a Presentation Definition is not present.

  • +
  • client_metadata: A JSON object containing the Relying Party metadata values. The client_metadata parameter MUST NOT be present when client_id_scheme is entity_id. Since the client_metadata is taken from trust_chain, this parameter is intended to not be used.

  • +
  • client_metadata_uri: string containing an HTTPS URL pointing to a resource where a JSON object with the Relying Party metadata can be retrieved. The client_metadata_uri parameter MUST NOT be present when client_id_scheme is entity_id. Since the client_metadata is taken from trust_chain, this parameter is intended to not be used.

  • +
+
+
+

Request URI Endpoint Errors

+

When the Relying Party encounters errors while issuing the Request Object from the request_uri endpoint, the following error responses are applicable:

+
    +
  • invalid_request: The request_uri URL is missing in some part within its webpath or urlparams, therefore it does not point to a valid Request Object and then it cannot be retrieved. This error is returned when the Request Object is not well referenced in the request_uri.

  • +
  • server_error: The server encountered an unexpected condition that prevented it from fulfilling the request. This error is returned when the Relying Party's server is unable to process the Request Object due to a server-side issue, such as a malfunction or maintenance. The Wallet Instance should advise the User to try again later.

  • +
+

The following is an example of an error response from request_uri endpoint:

+
HTTP/1.1 400 Bad Request
+Content-Type: application/json
+
+{
+ "error": "invalid_request",
+ "error_description": "The request_uri is malformed or does not point to a valid Request Object."
+}
+
+
+

Another example:

+
HTTP/1.1 500 Internal Server Error
+Content-Type: application/json
+
+{
+ "error": "server_error",
+ "error_description": "The request_uri cannot be retrieved due to an internal server error."
+}
+
+
+

There are cases where the Wallet Instance cannot validate the Request Object or the Request Object results invalid. This error occurs if the Request Object is successfully fetched from the request_uri but fails validation checks by the Wallet Instance. This could be due to incorrect signatures, malformed claims, or other validation failures, such as the revocation of its issuer (Relying Party).

+

Upon receiving an error response, the Wallet Instance SHOULD inform the User of the error condition in an appropriate manner. Additionally, the Wallet Instance SHOULD log the error and MAY attempt to recover from certain errors if feasible. For example, if the error is server_error, the Wallet Instance MAY prompt the User to re-enter or scan a new QR code, if applicable.

+

It is crucial for Wallet Instances to implement robust error handling to maintain a secure and user-friendly experience. Adhering to the specified error responses ensures interoperability and helps in diagnosing issues during the interaction with the Relying Party's endpoints.

+
+

Warning

+

The current OpenID4VP specification outlines various error responses that a Wallet Instance may return to the Relying Party (Verifier) in case of faulty requests (OpenID4VP, Section 6.4. Error Response). For privacy enhancement, Wallet Instances SHOULD NOT notify the Relying Party of faulty requests in certain scenarios. This is to prevent any potential misuse of error responses that could lead to gather informations that could be exploited.

+
+
+
+
+

Authorization Response Details

+

After getting the User authorization and consent for the presentation of the Credentials, the Wallet Instance sends the Authorization Response to the Relying Party response_uri endpoint, the content SHOULD be encrypted according OPENID4VP Section 6.3, using the Relying Party public key.

+
+

Note

+

Why the response is encrypted?

+

The response sent from the Wallet Instance to the Relying Party is encrypted to prevent a malicious agent from gaining access to the plaintext information transmitted within the Relying Party's network. This is only possible if the network environment of the Relying Party employs TLS termination. Such technique employs a termination proxy that acts as an intermediary between the client and the webserver and handles all TLS-related operations. In this manner, the proxy deciphers the transmission's content and either forwards it in plaintext or by negotiates an internal TLS session with the actual webserver's intended target. In the first scenario, any malicious actor within the network segment could intercept the transmitted data and obtain sensitive information, such as an unencrypted response, by sniffing the transmitted data.

+
+

Below a non-normative example of the request:

+
POST /response_uri HTTP/1.1
+HOST: relying-party.example.org
+Content-Type: application/x-www-form-urlencoded
+
+response=eyJhbGciOiJFUzI1NiIs...9t2LQ
+
+
+

Below is a non-normative example of the decrypted JSON response content:

+
{
+  "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03",
+  "vp_token": [
+      "eyJhbGciOiJFUzI1NiIs...PT0iXX0",
+      $WalletAttestation-JWT
+  ],
+  "presentation_submission": {
+      "definition_id": "32f54163-7166-48f1-93d8-ff217bdb0653",
+      "id": "04a98be3-7fb0-4cf5-af9a-31579c8b0e7d",
+      "descriptor_map": [
+          {
+              "id": "eu.europa.ec.eudiw.pid.it.1",
+              "path": "$.vp_token.verified_claims.claims._sd[0]",
+              "format": "vc+sd-jwt"
+          },
+          {
+              "id": "WalletAttestation",
+              "path": "$",
+              "format": "jwt"
+          }
+      ]
+  }
+}
+
+
+

Where the following parameters are used:

+ ++++ + + + + + + + + + + + + + + + + +

Name

Description

vp_token

JSON Array containing the Verifiable Presentation(s). There MUST be at least two signed presentations in this Array: +- The requested Digital Credential (one or more, in format of SD-JWT VC or MDOC CBOR) +- The Wallet Attestation

presentation_submission

JSON Object containing the mappings between the requested Verifiable Credentials and where to find them within the returned Verifiable Presentation Token, according to the Presentation Exchange.

state

Unique identifier provided by the Relying Party within the Authorization Request.

+

Below is a non-normative example of the vp_token decoded content, represented in the form of JWS header and payload, separated by a period:

+
{
+  "alg": "ES256",
+  "typ": "JWT"
+}
+.
+{
+  "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "jti": "3978344f-8596-4c3a-a978-8fcaba3903c5",
+  "aud": "https://relying-party.example.org/response_uri",
+  "iat": 1541493724,
+  "exp": 1573029723,
+  "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb",
+  "vp": "<Issuer-Signed-JWT>~<Disclosure 1>~<Disclosure 2>~...~<Disclosure N>"
+}
+
+
+

Where the following parameters are used:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

vp

The Digital Credential in its original state. The public key contained in the Digital Credential MUST be used to verify the entire VP JWS as Proof of Possession of the private key which the public key is included in the Digital Credential. Eg: for SD-JWT VC the public key is provided within the cnf.jwk claim.

jti

JWS unique identifier.

iat

Unix timestamp of the time of issuance of this presentation.

exp

Unix timestamp beyond which this presentation will no longer be considered valid.

aud

Audience of the VP, corresponding to the response_uri within the Authorization request issued by the Relying Party.

nonce

The nonce value provided by the Relying Party within the Authorization Request.

+
+

Authorization Response Errors

+

When the Wallet sends a response using direct_post.jwt to the Relying Party, several errors may occur, including:

+
+
    +
  • Invalid Credential: This error occurs when one or more Credentials or VPs, included in the vp_token, fail validation because they are malformed. The correct HTTP status code for this error is 400 (Bad Request). The error should be set to invalid_request, and the error_description SHOULD identify the malformed Credentials.

  • +
  • Issuer Credential Trust Failure: This error arises when the Relying Party cannot establish trust with the issuer of a presented Credential, included in the vp_token. The appropriate HTTP status code for this error is 403 (Forbidden). The error should be labeled as invalid_request, and the error_description SHOULD specify the issuer for which trust could not be established.

  • +
  • Invalid Nonce: This error happens when the nonce provided in the request is incorrect. The HTTP status code for this error should be 403 (Forbidden). The error SHOULD be labeled as invalid_request, with an error_description indicating that the nonce is incorrect.

  • +
  • Invalid Wallet Attestation: This error occours when it's not possible to establish trust with the Wallet Attestation's issuer (Wallet Provider), or if the Wallet Attestation is invalid or does not meet the Relying Party's minimum security criteria. The correct HTTP status code for this error is 403 (Forbidden). The error SHOULD be marked as invalid_request, and the error_description should clarify that the issue stems from the Wallet Attestation's failure to establish trust with its issuer or its non-compliance with required security standards.

  • +
  • Invalid Presentation Submission: This error occurs when the presentation submission is not valid. The appropriate HTTP status code for this error is 400 Bad Request. The error should be labeled as invalid_request, and the error_description should specify the invalid aspects of the presentation submission.

  • +
+

To enhance clarity and ensure proper error handling, it's crucial to provide detailed error responses. Below are two examples of HTTP responses using application/json that include both the error and error_description members:

+
+
HTTP/1.1 403 Forbidden
+Content-Type: application/json
+
+{
+  "error": "invalid_request",
+  "error_description": "Trust cannot be established with the issuer: https://issuer.example.com"
+}
+
+
+
HTTP/1.1 400 Bad Request
+Content-Type: application/json
+
+{
+  "error": "invalid_request",
+  "error_description": "The following Credentials/VP are malformed: [CredentialX, vp_token[2]]"
+}
+
+
+
+
+
+

Redirect URI

+

When the Relying Party provides the redirect URI, the Wallet Instance MUST send the user-agent to this redirect URI. The redirect URI allows the Relying Party to continue the interaction with the End-User on the device where the Wallet Instance resides after the Wallet Instance has sent the Authorization Response to the response URI.

+

The Relying Party MUST include a response code within the redirect URI. The response code is a fresh, cryptographically random number used to ensure only the receiver of the redirect can fetch and process the Authorization Response. The number could be added as a path component, as a parameter or as a fragment to the URL. It is RECOMMENDED to use a cryptographic random value of 128 bits or more at the time of the writing of this specification.

+

The following is a non-normative example of the response from the Relying Party to the Wallet Instance upon receiving the Authorization Response at the Response Endpoint.

+
HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+
+{
+  "redirect_uri": "https://relying-party.example.org/cb#response_code=091535f699ea575c7937fa5f0f454aee"
+}
+
+
+

The redirect_uri value MUST be used with an HTTP method GET by either the Wallet Instance or the user-agent to redirect the User to the Relying Party in order to complete the process. The specific entity that performs this action depends on whether the flow is Same device or Cross device.

+
+
+

Redirect URI Errors

+

When the Wallet Instance sends the user-agent to the Redirect URI provided by the Relying Party, several errors may occur that prevent the successful completion of the process. These errors are critical as they directly impact the User experience by hindering the seamless flow of information between the Wallet Instance and the Relying Party. Below are potential errors related to the Redirect URI and their implications:

+
    +
  • Mismatched Redirect URI: This error occurs when the Redirect URI provided by the Relying Party does not match any of the URIs linked with the User session. This mismatch can lead to a HTTP status error code set to 403 (Forbidden), indicating that the request cannot be processed due session/URI mismatch.

  • +
  • Redirect URI Security Issues: If the Relying Party incurs in security issues when evaluating the User session with the provided URI, the Relying Party MUST raise an error. In such cases, an HTTP status code set to 403 (Forbidden) MUST be returned, indicating that the request is valid but the server is refusing action due to security precautions.

  • +
+

Handling these errors requires clear communication to the User within the returned navigation web page. It is crucial for the Relying Party to implement robust error handling and validation mechanisms for Redirect URIs to ensure a secure implementation.

+
+
+

Relying Party Entity Configuration

+

According to the Trust Model section, the Relying Party is a Federation Entity and MUST expose a well-known endpoint containing its Entity Configuration.

+

Below a non-normative example of the request made by the Wallet Instance to the openid-federation well-known endpoint to obtain the Relying Party Entity Configuration:

+
GET /.well-known/openid-federation HTTP/1.1
+HOST: relying-party.example.org
+
+
+

Below is a non-normative response example:

+
{
+    "alg": "ES256",
+    "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+    "typ": "entity-statement+jwt"
+}
+.
+{
+    "exp": 1649590602,
+    "iat": 1649417862,
+    "iss": "https://rp.example.it",
+    "sub": "https://rp.example.it",
+    "jwks": {
+        "keys": [
+            {
+                "kty": "EC",
+                "crv": "P-256",
+                "x": "5s4qi ...",
+                "y": "AQAB",
+                "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+            }
+        ]
+    },
+    "metadata": {
+        "wallet_relying_party": {
+            "application_type": "web",
+            "client_id": "https://rp.example.it",
+            "client_name": "Name of an example organization",
+            "jwks": {
+                "keys": [
+                    {
+                        "kty": "EC",
+                        "crv": "P-256",
+                        "x": "5s4qi ...",
+                        "y": "AQAB",
+                        "kid": "9tjiCaivhWLVUJ3AxwGGz_9",
+                    }
+                ]
+            },
+
+            "contacts": [
+                "ops@relying-party.example.org"
+            ],
+
+            "request_uris": [
+                "https://relying-party.example.org/request_uri"
+            ],
+            "response_uris": [
+                "https://relying-party.example.org/response_uri"
+            ],
+            "default_acr_values": [
+                "https://www.spid.gov.it/SpidL2",
+                "https://www.spid.gov.it/SpidL3"
+            ],
+            "vp_formats": {
+                "vc+sd-jwt": {
+                    "sd-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ],
+                    "kb-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ]
+                }
+            },
+              "presentation_definitions": [
+                  {
+                    "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
+                    "input_descriptors": [
+                        {
+                            "id": "IdentityCredential",
+                            "format": {
+                                "vc+sd-jwt": {}
+                            },
+                            "constraints": {
+                                "limit_disclosure": "required",
+                                "fields": [
+                                    {
+                                        "path": [
+                                            "$.type"
+                                        ],
+                                        "filter": {
+                                            "type": "string",
+                                            "const": "IdentityCredential"
+                                        }
+                                    },
+                                    {
+                                        "path": [
+                                            "$.family_name"
+                                        ]
+                                    },
+                                    {
+                                        "path": [
+                                            "$.given_name"
+                                        ]
+                                    },
+                                    {
+                                        "path": [
+                                            "$.unique_id"
+                                        ],
+                                        "intent_to_retain": "true"
+                                    }
+                                ]
+                            }
+                        },
+                    {
+                        "id": "WalletAttestation",
+                        "format": {
+                            "jwt": {}
+                        },
+                        "constraints": {
+                            "fields": [
+                                {
+                                    "path": [
+                                        "$.iss"
+                                    ],
+                                    "filter": {
+                                        "type": "string",
+                                        "enum": [
+                                            "https://issuer.example.org",
+                                            "https://issuer2.example.org",
+                                            "https://issuer3.example.org"
+                                        ]
+                                    }
+                                },
+                                {
+                                    "path": [
+                                        "$.iat"
+                                    ],
+                                    "filter": {
+                                        "type": "number",
+                                        "minimum": 1504699136
+                                    }
+                                },
+                                {
+                                    "path": [
+                                        "$.exp"
+                                    ],
+                                    "filter": {
+                                        "type": "number",
+                                        "minimum": 1504700136
+                                    }
+                                },
+                                {
+                                    "path": [
+                                        "$.cnf.jwk"
+                                    ],
+                                    "filter": {
+                                        "type": "object"
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                    ]
+                },
+                  {
+                    "id": "mDL-sample-req",
+                    "input_descriptors": [
+                        {
+                            "id": "mDL",
+                            "format": {
+                                "mso_mdoc": {
+                                    "alg": [
+                                        "EdDSA",
+                                        "ES256"
+                                    ]
+                                },
+                                "constraints": {
+                                    "limit_disclosure": "required",
+                                    "fields": [
+                                        {
+                                            "path": [
+                                                "$.mdoc.doctype"
+                                            ],
+                                            "filter": {
+                                                "type": "string",
+                                                "const": "org.iso.18013.5.1.mDL"
+                                            }
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.namespace"
+                                            ],
+                                            "filter": {
+                                                "type": "string",
+                                                "const": "org.iso.18013.5.1"
+                                            }
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.family_name"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.portrait"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.driving_privileges"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        }
+                                    ]
+                                }
+                            }
+                        }
+                    ]
+                }
+            ],
+
+            "default_max_age": 1111,
+
+            // JARM related
+            "authorization_signed_response_alg": [[
+                "ES256"
+            ],
+            "authorization_encrypted_response_alg": [
+                "RSA-OAEP",
+                "RSA-OAEP-256"
+            ],
+            "authorization_encrypted_response_enc": [
+                "A128CBC-HS256",
+                "A192CBC-HS384",
+                "A256CBC-HS512",
+                "A128GCM",
+                "A192GCM",
+                "A256GCM"
+            ],
+
+            // SIOPv2 related
+            "subject_type": "pairwise",
+            "require_auth_time": true,
+            "id_token_signed_response_alg": [
+                "ES256"
+            ],
+            "id_token_encrypted_response_alg": [
+                "RSA-OAEP",
+                "RSA-OAEP-256"
+            ],
+            "id_token_encrypted_response_enc": [
+                "A128CBC-HS256",
+                "A192CBC-HS384",
+                "A256CBC-HS512",
+                "A128GCM",
+                "A192GCM",
+                "A256GCM"
+            ],
+        },
+        "federation_entity": {
+            "organization_name": "OpenID Wallet Relying Party example",
+            "homepage_uri": "https://relying-party.example.org/home",
+            "policy_uri": "https://relying-party.example.org/policy",
+            "logo_uri": "https://relying-party.example.org/static/logo.svg",
+            "contacts": [
+               "tech@relying-party.example.org"
+             ]
+        }
+    },
+    "authority_hints": [
+        "https://registry.eudi-wallet.example.it"
+    ]
+  }
+}
+
+
+

The Entity Configuration is a JWS, where its header and payload parameters are defined below, based on the provided OpenID Federation Entity Configuration example:

+

JWT Header Parameters

+ ++++ + + + + + + + + + + + + + + + + +

Name

Description

alg

The digital signature algorithm used to sign the JWT. For example, "ES256" for ECDSA using P-256 and SHA-256.

typ

The Media Type of the JWT, it MUST be set to "entity-statement+jwt".

kid

The Key ID used for identifying the key used to sign the JWS.

+

JWT Payload Parameters

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

iss

The issuer of the Entity Configuration, identifying the entity that issued the Entity Configuration.

sub

The subject of the Entity Configuration, identifying the principal that is the subject of the Entity Configuration.

jwks

JSON Web Key Set representing the cryptographic keys used for trust evaluation operations and for signing this Entity Configuration.

metadata

Metadata describing the entity, including information about the wallet relying party, client ID, client name, contacts, request URIs, response URIs, default ACR values, and VP formats.

authority_hints

URLs hinting at the authority or authorities that the entity trusts and which the public keys for verifieng this Entity Confgiuration are intended to be available within a Subordinate Statement.

exp

Unix Timestamp representing the expiration time of the Entity Configuration, after which the Entity Configuration MUST NOT be accepted for processing.

iat

Unix Timestamp representing the issued at time of the Entity Configuration, representing the time at which the Entity Configuration was issued.

+
+
+
+

Proximity Flow

+

This section describes how a Verifier requests the presentation of an mDoc-CBOR Credential to a Wallet Instance according to the ISO 18013-5 Specification. Only Supervised Device Retrieval flow is supported in this technical implementation profile.

+

The presentation phase is divided into three sub-phases:

+
+

1. Device Engagement: This subphase begins when the User is prompted to disclose certain attributes from the mDoc(s). The objective of this subphase is to establish a secure communication channel between the Wallet Instance and the Verifier App, so that the mDoc requests and responses can be exchanged during the communication subphase. +The messages exchanged in this subphase are transmitted through short-range technologies to limit the possibility of interception and eavesdropping. +This technical implementation profile exclusively supports QR code for Device Engagement.

+

2. Session establishment: During the session establishment phase, the Verifier App sets up a secure connection. All data transmitted over this connection is encrypted using a session key, which is known to both the Wallet Instance and the Verifier at this stage. +The established session MAY be terminated based on the conditions as detailed in [ISO18013-5#9.1.1.4].

+

3. Communication - Device Retrieval: The Verifier App encrypts the mDoc request with the appropriate session key and sends it to the Wallet Instance together with its public key in a session establishment message. The mDoc uses the data from the session establishment message to derive the session key and decrypt the mDoc request. +During the communication subphase, the Verifier App has the option to request information from the Wallet using mDoc requests and responses. The primary mode of communication is the secure channel established during the session setup. The Wallet Instance encrypts the mDoc response using the session key and transmits it to the Verifier App via a session data message. This technical implementation profile only supports Bluetooth Low Energy (BLE) for the communication sub-phase.

+
+

The following figure illustrates the flow diagram compliant with ISO 18013-5 for proximity flow.

+
+_images/High-Level-Flow-ITWallet-Presentation-ISO.svg +
+

Fig. 6 High-Level Proximity Flow

+
+
+

Step 1-3: The Verifier requests the User to reveal certain attributes from their mDoc(s) stored in the Wallet Instance. The User initiates the Wallet Instance. The Wallet Instance MUST create a new temporary key pair (EDeviceKey.Priv, EDeviceKey.Pub), and incorporate the cipher suite identifier, the identifier of the elliptic curve for key agreement, and the EDeviceKey public point into the device engagement structure (refer to [ISO18013-5#9.1.1.4]). This key pair is temporary and MUST be invalidated immediately after the secure channel is established. Finally, the Wallet Instance displays the QR Code for Device Engagement.

+

Below an example of a device engagement structure that utilizes QR for device engagement and Bluetooth Low Energy (BLE) for data retrieval.

+

CBOR data:

+
a30063312e30018201d818584ba4010220012158205a88d182bce5f42efa59943f33359d2e8a968ff289d93e5fa444b624343167fe225820b16e8cf858ddc7690407ba61d4c338237a8cfcf3de6aa672fc60a557aa32fc670281830201a300f401f50b5045efef742b2c4837a9a3b0e1d05a6917
+
+
+

In diagnostic notation:

+
{
+  0: "1.0", % Version
+
+  1:        % Security
+  [
+      1,     % defines the cipher suite 1 which contains only EC curves
+      24(<<  % embedded CBOR data item
+        {
+          1: 2, % kty:EC2 (Elliptic curves with x and y coordinate pairs)
+        -1: 1, % crv:p256
+-2:h'5A88D182BCE5F42EFA59943F33359D2E8A968FF289D93E5FA444B624343  167FE',% x-coordinate
+-3:h'B16E8CF858DDC7690407BA61D4C338237A8CFCF3DE6AA672FC60A557AA32FC67' % y-coordinate
+        }
+      >>)
+    ],
+
+    2: %DeviceRetrievalMethods(Device engagement using QR code)
+    [
+      [
+        2, %BLE
+        1, % Version
+      {    %BLE options
+          0: false, % no support for mdoc peripheral server mode
+          1: true, % support mdoc central client mode
+          11: h'45EFEF742B2C4837A9A3B0E1D05A6917' % UUID of mdoc client central mode
+        }
+      ]
+    ]
+}
+
+
+

Step 4-6: The Verifier App scans the QR Code and generates its own ephemeral key pair (EReaderKey.Priv, EReaderKey.Pub). It then calculates the session key, using the public key received in the Engagement Structure and its newly-generated private key, as outlined in [ISO18013-5#9.1.1.5]. Finally, it generates its session key, which must be independently derived by both the Wallet Instance and the Verifier App.

+

Step 7: The Verifier App creates an mDoc request that MUST be encrypted using the relevant session key, and transmits it to the Wallet Instance along with EReaderKey.Pub within a session establishment message. The mDoc request MUST be encoded in CBOR, as demonstrated in the following non-normative example.

+

CBOR data: +.. code-block:

+
a26776657273696f6e63312e306b646f63526571756573747381a26c6974656d7352657175657374d818590152a267646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e4954a375766572696669636174696f6e2e65766964656e6365f4781c766572696669636174696f6e2e6173737572616e63655f6c6576656cf4781c766572696669636174696f6e2e74727573745f6672616d65776f726bf4716f72672e69736f2e31383031332e352e31ab76756e5f64697374696e6775697368696e675f7369676ef47264726976696e675f70726976696c65676573f46f646f63756d656e745f6e756d626572f46a69737375655f64617465f46f69737375696e675f636f756e747279f47169737375696e675f617574686f72697479f46a62697274685f64617465f46b6578706972795f64617465f46a676976656e5f6e616d65f468706f727472616974f46b66616d696c795f6e616d65f46a726561646572417574688443a10126a11821590129308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97bf6584058a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9
+
+
+

The above CBOR data is represented in diagnostic notation as follows: +.. code-block:

+
{
+  "version": "1.0",
+  "docRequests": [
+  {
+    "itemsRequest": 24(<< {
+      "docType": "org.iso.18013.5.1.mDL",
+      "nameSpaces": {
+        "org.iso.18013.5.1.IT": {
+          "verification.evidence": false,
+          "verification.assurance_level": false,
+          "verification.trust_framework": false
+        },
+        "org.iso.18013.5.1": {
+          "un_distinguishing_sign": false,
+          "driving_privileges": false,
+          "document_number": false,
+          "issue_date": false,
+          "issuing_country": false,
+          "issuing_authority": false,
+          "birth_date": false,
+          "expiry_date": false,
+          "given_name": false,
+          "portrait": false,
+          "family_name": false
+        }
+      }
+    } >>),
+    "readerAuth": [
+      h'a10126',
+      {
+        33: h'308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97b'
+      },
+      null,
+      h'58a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9'
+    ]
+  }
+  ]
+}
+
+
+

Step 8: The Wallet Instance uses the session establishment message to derive the session keys and decrypt the mDoc request. It computes the session key using the public key received from the Verifier App and its private key.

+

Step 9-10: When the Wallet Instance receives the mDoc request, it locates the documents that contain the requested attributes and asks the User for permission to provide this information to the Verifier. If the User agrees, the Wallet generates an mDoc response and transmits it to the Verifier App through the secure channel.

+

Step 11-12: If the User gives consent, the Wallet Instance creates an mDoc response and transmits it to the Verifier App via the secure channel. The mDoc response MUST be encoded in CBOR, with its structure outlined in [ISO18013-5#8.3.2.1.2.2]. Below is a non-normative example of an mDoc response.

+

CBOR Data: +.. code-block:

+
a36776657273696f6e63312e3069646f63756d656e747381a367646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c6973737565725369676e6564a26a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e495483d81858f7a46864696765737449440b6672616e646f6d506d44f21ee875f2c1d502b43198e5a15271656c656d656e744964656e74696669657275766572696669636174696f6e2e65766964656e63656c656c656d656e7456616c756581a2647479706571656c656374726f6e69635f7265636f7264667265636f7264bf6474797065781f68747470733a2f2f657564692e77616c6c65742e70646e642e676f762e697466736f75726365bf716f7267616e697a6174696f6e5f6e616d65754d6f746f72697a7a617a696f6e6520436976696c656f6f7267616e697a6174696f6e5f6964656d5f696e666c636f756e7472795f636f6465626974ffffd8185866a4686469676573744944046672616e646f6d50185d84dfb71ce9b173010ddd62174fbe71656c656d656e744964656e746966696572781c766572696669636174696f6e2e74727573745f6672616d65776f726b6c656c656d656e7456616c7565656569646173d8185865a4686469676573744944006672616e646f6d50137f903174253c4585358267aae2ea4e71656c656d656e744964656e746966696572781c766572696669636174696f6e2e6173737572616e63655f6c6576656c6c656c656d656e7456616c75656468696768716f72672e69736f2e31383031332e352e318bd8185852a46864696765737449440c6672616e646f6d5053e29d0ddbbc7d2306a32bdbe2e56e5171656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756563446f65d8185855a4686469676573744944036672616e646f6d50990cba2069fa1b33b8d6ae910b6549dc71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c756567416e746f6e696fd818585ba46864696765737449440a6672616e646f6d504086c1379975f805f1b1f4975e6a126571656c656d656e744964656e7469666965726a69737375655f646174656c656c656d656e7456616c7565d903ec6a323031392d31302d3230d818585ca4686469676573744944016672616e646f6d50ab4ca30c918dd2fd0bf35242c15fa2d871656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d31302d3230d8185855a4686469676573744944076672616e646f6d508d9066f6c8da16619867cd4e2fab0c8871656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ea4686469676573744944056672616e646f6d5059fe68db795dee4c20976380ea24770571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c75657828497374697475746f20506f6c696772616669636f2065205a656363612064656c6c6f20537461746fd818585ba4686469676573744944026672616e646f6d5008b3f1ca5517019767be3dee3bb0614571656c656d656e744964656e7469666965726a62697274685f646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3230d818585ca4686469676573744944096672616e646f6d50a2395ec214350c26066306e23279b3ae71656c656d656e744964656e7469666965726f646f63756d656e745f6e756d6265726c656c656d656e7456616c756569393837363534333231d8185850a4686469676573744944066672616e646f6d50a25e1a5b915d2d6eafee9674e023293971656c656d656e744964656e74696669657268706f7274726169746c656c656d656e7456616c75654420212223d81858eea46864696765737449440d6672616e646f6d50eeed6a3b856563627589a360939d12f771656c656d656e744964656e7469666965727264726976696e675f70726976696c656765736c656c656d656e7456616c756582a37576656869636c655f63617465676f72795f636f646561416a69737375655f64617465d903ec6a323031382d30382d30396b6578706972795f64617465d903ec6a323032342d31302d3230a37576656869636c655f63617465676f72795f636f646561426a69737375655f64617465d903ec6a323031372d30322d32336b6578706972795f64617465d903ec6a323032342d31302d3230d818585ba4686469676573744944086672616e646f6d50c0ef486b2a194ed3cbf7f354fd40092171656c656d656e744964656e74696669657276756e5f64697374696e6775697368696e675f7369676e6c656c656d656e7456616c756561496a697373756572417574688443a10126a118215901423082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb
+
+
+

In diagnostic notation: +.. code-block:

+
{
+  "version": "1.0",
+  "documents": [
+  {
+    "docType": "org.iso.18013.5.1.mDL",
+    "issuerSigned": {
+      "nameSpaces": {
+        "org.iso.18013.5.1.IT": [
+          24(<< {
+            "digestID": 11,
+            "random": h'6d44f21ee875f2c1d502b43198e5a152',
+            "elementIdentifier": "verification.evidence",
+            "elementValue": [
+              {
+                "type": "electronic_record",
+                "record": {
+                  "type": "https://eudi.wallet.pdnd.gov.it",
+                  "source": {
+                    "organization_name": "Motorizzazione Civile",
+                    "organization_id": "m_inf",
+                    "country_code": "it"
+                  }
+                }
+              }
+            ]
+          } >>),
+          24(<< {
+            "digestID": 4,
+            "random": h'185d84dfb71ce9b173010ddd62174fbe',
+            "elementIdentifier": "verification.trust_framework",
+            "elementValue": "eidas"
+          } >>),
+          24(<< {
+            "digestID": 0,
+            "random": h'137f903174253c4585358267aae2ea4e',
+            "elementIdentifier": "verification.assurance_level",
+            "elementValue": "high"
+          } >>)
+        ],
+        "org.iso.18013.5.1": [
+          24(<< {
+            "digestID": 12,
+            "random": h'53e29d0ddbbc7d2306a32bdbe2e56e51',
+            "elementIdentifier": "family_name",
+            "elementValue": "Doe"
+          } >>),
+          24(<< {
+            "digestID": 3,
+            "random": h'990cba2069fa1b33b8d6ae910b6549dc',
+            "elementIdentifier": "given_name",
+            "elementValue": "Antonio"
+          } >>),
+          24(<< {
+            "digestID": 10,
+            "random": h'4086c1379975f805f1b1f4975e6a1265',
+            "elementIdentifier": "issue_date",
+            "elementValue": 1004("2019-10-20")
+          } >>),
+          24(<< {
+            "digestID": 1,
+            "random": h'ab4ca30c918dd2fd0bf35242c15fa2d8',
+            "elementIdentifier": "expiry_date",
+            "elementValue": 1004("2024-10-20")
+          } >>),
+          24(<< {
+            "digestID": 7,
+            "random": h'8d9066f6c8da16619867cd4e2fab0c88',
+            "elementIdentifier": "issuing_country",
+            "elementValue": "IT"
+          } >>),
+          24(<< {
+            "digestID": 5,
+            "random": h'59fe68db795dee4c20976380ea247705',
+            "elementIdentifier": "issuing_authority",
+            "elementValue": "Istituto Poligrafico e Zecca dello Stato"
+          } >>),
+          24(<< {
+            "digestID": 2,
+            "random": h'08b3f1ca5517019767be3dee3bb06145',
+            "elementIdentifier": "birth_date",
+            "elementValue": 1004("1956-01-20")
+          } >>),
+          24(<< {
+            "digestID": 9,
+            "random": h'a2395ec214350c26066306e23279b3ae',
+            "elementIdentifier": "document_number",
+            "elementValue": "987654321"
+          } >>),
+          24(<< {
+            "digestID": 6,
+            "random": h'a25e1a5b915d2d6eafee9674e0232939',
+            "elementIdentifier": "portrait",
+            "elementValue": h'20212223'
+          } >>),
+          24(<< {
+            "digestID": 13,
+            "random": h'eeed6a3b856563627589a360939d12f7',
+            "elementIdentifier": "driving_privileges",
+            "elementValue": [
+              {
+                "vehicle_category_code": "A",
+                "issue_date": 1004("2018-08-09"),
+                "expiry_date": 1004("2024-10-20")
+              },
+              {
+                "vehicle_category_code": "B",
+                "issue_date": 1004("2017-02-23"),
+                "expiry_date": 1004("2024-10-20")
+              }
+            ]
+          } >>),
+          24(<< {
+            "digestID": 8,
+            "random": h'c0ef486b2a194ed3cbf7f354fd400921',
+            "elementIdentifier": "un_distinguishing_sign",
+            "elementValue": "I"
+          } >>)
+        ]
+      },
+      "issuerAuth": [
+        h'a10126',
+        {
+          33: h'3082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb7d518bd9a519583e082d67effff06565804fc09abf0e4a08e699c9dba3796285a15f68e40ac7f9fc7700a15153a4065300a06082a8648ce3d040302034800304502210099b7d62e6bf7b1823db3713df889bf73e70bb4d9c58c21e92c58d2f1beffe932022058d039747a00d70e6d66be4797e6142b3608a014ee09b7b79af2cae2aaf27788'
+        },
+        24(<< {
+      "version": "1.0",
+      "digestAlgorithm": "SHA-256",
+      "docType": "org.iso.18013.5.1.mDL",
+      "valueDigests": {
+        "org.iso.18013.5.1": {
+        1: h'0E5F0B6B33418E508740771E82F893372EAF5B2445BC4C84DCF08B005E9493FC',
+        2: h'DE21BB62FF2897D8B986D2CDA9F9BC5865C02807F7B4D9DD1FA4A79DF4C0D37F',
+        3: h'BC5568239E35CE9FF8798C27FFDCD757B134B679F0FE05729AA3491381912E65',
+        5: h'E6048BDC7FD6454296F1E3F54536107C9C5B24C4064DE46A98121E3630EECCA2',
+        6: h'73690D92DCAA61B0203870F67C6AA9FDFEA889B6F0C720DE757B4B0A8516A206',
+        7: h'E353EA0B0FD92B6BE90C64CC3B2EE1284153A8F0F5066B99AAC599200E6EEEB2',
+        8: h'29227872CEB49923D267B5F4BADE6D387B42AC2DC4B2AE26C9013067FEE7018A',
+        9: h'A6A119F7CACAC0B8C6AACAC747FD3FE7E50B6D9BB8A507FDA79F0DF6646F285D',
+        10: h'6D8025D2F02A5E7E1406FB6AAEB67F9EDE9B07191A53F3E23B77C528223A94E2',
+        12: h'B0D43E4E2EA534E4D5304E64BCF7A0F13E2C8EE8304B9CD23ABA4909652A4647',
+        13: h'FBF4DE318982F2DBAD43C601CAEB22628B301AC18AA8264C5831B2AAAC89C486'
+        },
+        "org.iso.18013.5.1.IT": {
+        0: h'CF57377B675F64F37314739592C1E8A911A7DDAF341CE2902FE877C5A835E4C1',
+        4: h'4A4B4CC64EC9299C1A2501EA449F577005E9F7A60408057C07A7C67FB151E5F5',
+        11: h'78824FBD6FBBA88A2AAB44DF8B6F5E9759126D87D1F4415995E658FD9239E1FE'
+        }
+      },
+      "deviceKeyInfo": {
+        "deviceKey": {
+        1: 2,
+        -1: 1,
+        -2: h'AFD09E720B918CEDC2B8A881950BAB6A1051E18AE16A814D51E609938663D5E1',
+        -3: h'61FBC6C8AD24EC86A78BB4E9AC377DD2B7C711D9F2EB9AFD4AA0963662847AED'}},
+        "validityInfo": {
+          "signed": 0("2023-11-24T14:54:05Z"),
+          "validFrom": 0("2023-11-24T14:54:05Z"),
+          "validUntil": 0("2024-11-24T14:54:05Z")}
+        }  >>),
+        h'f2461e4fab69e9f7bcffe552395424514524d1679440036213173101448d1b1ab4a293859b389ffa8b47aeed10e9b0c1545412ac37c51a76482cd9bbbe110152'
+      ]
+    },
+    "deviceSigned": {
+      "nameSpaces": 24(<< {} >>),
+      "deviceAuth": {
+        "deviceSignature": [
+          h'a10126',
+          {},
+          null,
+          h'1fed7190d2975ab79c072e6f1d9d52436059d1fc959d55baf74f057d89b10fcc0dc77a50d433d4c76ddf26223c5560c4ab123b5cb5eb805a90036aa147493076'
+        ]
+      }
+    }
+  }
+  ],
+  "status": 0
+}
+
+
+

Step 13: The Verifier App is required to validate the signatures in the mDoc's issuerSigned field using the public key of the Credential Issuer specified within the mDoc. Subsequently, the Verifier MUST validate the signature in the deviceSigned field. If these signature checks pass, the Verifier can confidently consider the received information as valid.

+
+

Device Engagement

+

The Device Engagement structure MUST be have at least the following components:

+
+
    +
  • Version: tstr. Version of the data structure being used.

  • +
  • Security: an array that contains two mandatory values

    +
      +
    • the cipher identifier: see Table 22 of [ISO18013-5]

    • +
    • the mDL public ephemeral key generated by the Wallet Instance and required by the Verifier App to derive the Session Key. The mDL public ephemeral key MUST be of a type allowed by the indicated cipher suite.

    • +
    +
  • +
  • transferMethod: an array that contains one or more transferMethod arrays when performing device engagement using the QR code. This array is for offline data retrieval methods. A transferMethod array holds two mandatory values (type and version). Only the BLE option is supported by this technical implementation profile, then the type value MUST be set to 2.

  • +
  • BleOptions: this elements MUST provide options for the BLE connection (support for Peripheral Server or Central Client Mode, and the device UUID).

  • +
+
+
+
+

mDoc Request

+

The messages in the mDoc Request MUST be encoded using CBOR. The resulting CBOR byte string for the mDoc Request MUST be encrypted with the Session Key obtained after the Device Engagement phase and MUST be transmitted using the BLE protocol. +The details on the structure of mDoc Request, including identifier and format of the data elements, are provided below.

+
+
    +
  • version: (tstr). Version of the data structure.

  • +
  • docRequests: Requested DocType, NameSpace and data elements.

    +
      +
    • itemsRequest: #6.24(bstr .cbor ItemsRequest).

      +
        +
      • docType: (tstr). The DocType element contains the type of document requested. See Data Model Section.

      • +
      • nameSpaces: (tstr). See Data Model Section for more details.

        +
          +
        • dataElements: (tstr). Requested data elements with Intent to Retain value for each requested element.

          +
            +
          • IntentToRetain: (bool). It indicates that the Verifier App intends to retain the received data element.

          • +
          +
        • +
        +
      • +
      +
    • +
    • readerAuth: COSE_Sign1. It is required for the Verifier App authentication.

    • +
    +
  • +
+
+
+

Note

+

The domestic data elements MUST not be returned unless specifically requested by the Verifier App.

+
+
+
+

mDoc Response

+

The messages in the mDoc Response MUST be encoded using CBOR and MUST be encrypted with the Session Key obtained after the Device Engagement phase. +The details on the structure of mDoc Response are provided below.

+
+
    +
  • version: (tstr). Version of the data structure.

  • +
  • documents: Returned DocType, and ResponseData.

    +
      +
    • docType: (tstr). The DocType element contains the type of document returned. See Data Model Section.

    • +
    • ResponseData:

      +
        +
      • IssuerSigned: Responded data elements signed by the issuer.

        +
          +
        • nameSpaces: (tstr). See Data Model Section for more details.

          +
            +
          • IssuerSignedItemBytes: #6.24(bstr .cbor).

            +
              +
            • digestID: (uint). Reference value to one of the ValueDigests provided in the Mobile Security Object (issuerAuth).

            • +
            • random: (bstr). Random byte value used as salt for the hash function. This value SHALL be different for each IssuerSignedItem and it SHALL have a minimum length of 16 bytes.

            • +
            • elementIdentifier: (tstr). Identifier of User attribute name contained in the Credential.

            • +
            • elementValue: (any). User attribute value

            • +
            +
          • +
          +
        • +
        +
      • +
      • DeviceSigned: Responded data elements signed by the Wallet Instance.

        +
          +
        • NameSpaces: #6.24(bstr .cbor DeviceNameSpaces). The DeviceNameSpaces structure MAY be an empty structure. DeviceNameSpaces contains the data element identifiers and values. It is returned as part of the corresponding namespace in DeviceNameSpace.

          +
            +
          • DataItemName: (tstr). The identifier of the element.

          • +
          • DataItemValue: (any). The value of the element.

          • +
          +
        • +
        • DeviceAuth: The DeviceAuth structure MUST contain the DeviceSignature elements.

          +
            +
          • DeviceSignature: It MUST contain the device signature for the Wallet Instance authentication.

          • +
          +
        • +
        +
      • +
      +
    • +
    +
  • +
  • status: It contains a status code. For detailed description and action required refer to to Table 8 (ResponseStatus) of the [ISO18013-5]

  • +
+
+
+
+

Session Termination

+

The session MUST be terminated if at least one of the following conditions occur.

+
+
    +
  • After a time-out of no activity of receiving or sending session establishment or session data messages occurs. The time-out for no activity implemented by the Wallet Instance and the Verifier App SHOULD be no less than 300 seconds.

  • +
  • When the Wallet Instance doesn't accept any more requests.

  • +
  • When the Verifier App does not send any further requests.

  • +
+
+

If the Wallet Instance and the Verifier App does not send or receive any further requests, the session termination MUST be initiated as follows.

+
+
    +
  • Send the status code for session termination, or

  • +
  • dispatch the "End" command as outlined in [ISO18013-5#8.3.3.1.1.5].

  • +
+
+

When a session is terminated, the Wallet Instance and the Verifier App MUST perform at least the following actions:

+
+
    +
  • destruction of session keys and related ephemeral key material;

  • +
  • closure of the communication channel used for data retrieval.

  • +
+
+
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/remote-flow.html b/rp-vp-kid/en/remote-flow.html new file mode 100644 index 000000000..797ad070b --- /dev/null +++ b/rp-vp-kid/en/remote-flow.html @@ -0,0 +1,2350 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Remote Flow + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + +
+

Remote Flow

+

In this flow the Relying Party MUST provide the URL where the signed presentation Request Object is available for download.

+

Depending on whether the User is using a mobile device or a workstation, the Relying Party MUST support the following remote flows:

+
    +
  • Same Device, the Relying Party MUST provide a HTTP redirect (302) location to the Wallet Instance;

  • +
  • Cross Device, the Relying Party MUST provide a QR Code which the User frames with the Wallet Instance.

  • +
+

Once the Wallet Instance establishes the trust with the Relying Party and evaluates the request, the User gives the consent for the disclosure of the Digital Credentials, in the form of a Verifiable Presentation.

+

A High-Level description of the remote flow, from the User's perspective, is given below:

+
+
    +
  1. the Wallet Instance obtains an URL in the Same Device flow or a QR Code containing the URL in Cross Device flow;

  2. +
  3. the Wallet Instance extracts from the payload the following parameters: client_id, request_uri, state, request_uri_method and client_id_scheme;

  4. +
  5. If the client_id_scheme is provided and set with the value entity_id, the Wallet Instance MUST collect and validate the OpenID Federation Trust Chain related to the Relying Party. If the client_id_scheme is either not provided or is assigned a value different from entity_id, the Wallet Instance MUST establish the trust by utilizing the client_id or an alternative client_id_scheme value. This alternative value MUST enable the Wallet Instance to establish trust with the Relying Party, ensuring compliance with the assurance levels mandated by the trust framework;

  6. +
  7. If request_uri_method is provided and set with the value post, the Wallet Instance SHOULD transmit its metadata to the Relying Party's request_uri endpoint using the HTTP POST method and obtain the signed Request Object. If request_uri_method is set with the value get or not present, the Wallet Instance MUST fetch the signed Request Object using an HTTP request with method GET to the endpoint provided in the request_uri parameter;

  8. +
  9. the Wallet Instance verifies the signature of the signed Request Object, using the public key obtained with the trust chain, and that its issuer matches the client_id obtained at the step number 2;

  10. +
  11. the Wallet Instance evaluates the requested Digital Credentials and checks the elegibility of the Relying Party in asking these by applying the policies related to that specific Relying Party, obtained with the trust chain;

  12. +
  13. the Wallet Instance asks User disclosure and consent;

  14. +
  15. the Wallet Instance presents the requested information to the Relying Party along with the Wallet Attestation. The Relying Party validates the presented Credentials checking the trust with their Issuers, and validates the Wallet Attestation by also checking that the Wallet Provider is trusted;

  16. +
  17. the Wallet Instance informs the User about the successfull authentication with the Relying Party, the User continues the navigation.

  18. +
+
+

Below a sequence diagram that summarizes the interactions between all the involved parties.

+
+_images/cross_device_auth_seq_diagram.svg +
+

Remote Protocol Flow

+
+
+

The details of each step shown in the previous picture are described in the table below.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Id

Description

1, 2

The User requests to access to a protected resource of the Relying Party.

3, 4,

The Relying Party provides the Wallet Instance with a URL where the information about the Relying Party are provided, along with the information about where the signed request is available for download.

5, 6, 7, 8, 9

In the Cross Device Flow, the Request URI is presented as a QR Code displayed to the User. The User scans the QR Code using the Wallet Instance, which retrieves a URL with the parameters client_id, request_uri, state, client_id_scheme, and request_uri_method. Conversely, in the Same Device Flow, the Relying Party supplies identical information as in the Cross-Device flow, but directly through a URL.

10,

The Wallet Instance evaluates the trust with the Relying Party.

11, 12

The Wallet Instance checks if the Relying Party has provided the request_uri_method within its signed Request Object. If provided and it is equal to post, the Wallet Instance provides its metadata to the Relying Party. The Relying Party returns a signed Request Object compliant to the Wallet technical capabilities.

13

When the Wallet Instance capabilities discovery is not supported by RP, the Wallet Instance request the signed Request Object using the HTTP method GET.

14

The Wallet Instance obtains the signed Request Object.

15, 16, 17

The Request Object JWS is verified by the Wallet Instance. The Wallet Instance processes the Relying Party metadata and applies the policies related to the Relying Party, attesting whose Digital Credentials and User data the Relying Party is granted to request.

18, 19

The Wallet Instance requests the User's consent for the release of the Credentials. The User authorizes and consents the presentation of the Credentials by selecting/deselecting the personal data to release.

20

The Wallet Instance provides the Authorization Response to the Relying Party using an HTTP request with the method POST (response mode "direct_post.jwt").

21, 22, 23, 24, 25

The Relying Party verifies the Authorization Response, extracts the Wallet Attestation to establish the trust with the Wallet Solution. The Relying Party extracts the Digital Credentials and attests the trust to the Credentials Issuer and the proof of possession of the Wallet Instance about the presented Digital Credentials. Finally, the Relying Party verifies the revocation status of the presented Digital Credentials.

26

The Relying Party provides to the Wallet Instance a redirect URI with a response code to be used by the Wallet Instance to finalize the authentication.

27, 28 and 29

The User is informed by the Wallet Instance that the Autentication succeded, then the protected resource is made available to the User.

+
+

Request URI with HTTP POST

+

The Relying Party SHOULD provide the POST method with its request_uri endpoint +allowing the Wallet Instance to inform the Relying Party about its technical capabilities.

+

This feature can be useful when, for example, the Wallet Instance supports +a restricted set of features, supported algorithms or a specific url for +its authorization_endpoint, and any other information that it deems necessary to +provide to the Relying Party for better interoperability.

+
+

Warning

+

The Wallet Instance, when providing its technical capabilities to the +Relying Party, MUST NOT include any User information or other explicit +information regarding the hardware used or usage preferences of its User.

+
+

If both the Relying Party and the Wallet Instance +support the request_uri_method with HTTP POST, +the Wallet Instance capabilities (metadata) MUST +be provided using an HTTP request to the request_uri endpoint of the Relying Party, +with the method POST and content type set to application/json.

+

A non-normative example of the HTTP request is represented below:

+
POST /request-uri HTTP/1.1
+HOST: relying-party.example.org
+Content-Type: application/json
+
+{
+    "authorization_endpoint": "https://wallet-solution.digital-strategy.europa.eu/authorization",
+    "response_types_supported": [
+      "vp_token"
+    ],
+    "response_modes_supported": [
+      "form_post.jwt"
+    ],
+    "vp_formats_supported": {
+      "vc+sd-jwt": {
+          "sd-jwt_alg_values": [
+              "ES256",
+              "ES384"
+          ]
+      }
+    },
+    "request_object_signing_alg_values_supported": [
+      "ES256"
+    ],
+    "presentation_definition_uri_supported": false
+}
+
+
+

The response of the Relying Party is defined in the section below.

+
+
+

Authorization Request Details

+

The Relying Party MUST create a Request Object in the form of a signed JWT and +MUST provide it to the Wallet Instance through an HTTP URL (request URI). +The HTTP URL points to the web resource where the signed Request Object is +available for download. The URL parameters contained in the Relying Party +response, containing the request URI, are described in the Table below.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

client_id

REQUIRED. Unique identifier of the Relying Party.

request_uri

REQUIRED. The HTTPs URL where the Relying Party provides the signed Request Object to the Wallet Instance.

client_id_scheme

OPTIONAL. The scheme used by the Relying Party for the client_id, detailing the format and structure and the trust evaluation method. It SHOULD be set with entity_id.

state

OPTIONAL. A unique identifier for the current transaction generated by the Relying Party. The value SHOULD be opaque to the Wallet Instance.

request_uri_method

OPTIONAL. The HTTP method MUST be set with get or post. The Wallet Instance should use this method to obtain the signed Request Object from the request_uri. If not provided or equal to get, the Wallet Instance SHOULD use the HTTP method get. Otherwise, the Wallet Instance SHOULD provide its metadata within the HTTP POST body encoded in application/json.

+

Below a non-normative example of the response containing the required parameters previously described.

+
https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=...&request_uri=...&client_id_scheme=entity_id&request_uri_method=post
+
+
+

The value corresponding to the request_uri endpoint SHOULD be randomized, according to RFC 9101, The OAuth 2.0 Authorization Framework: JWT-Secured Authorization Request (JAR) Section 5.2.1.

+

In the Same Device Flow the Relying Party uses an HTTP response redirect (with status code set to 302) as represented in the following non-normative example:

+
HTTP/1.1 /authorization Found
+Location: https://wallet-solution.digital-strategy.europa.eu?
+client_id=https%3A%2F%2Frelying-party.example.org%2Fcb
+&request_uri=https%3A%2F%2Frelying-party.example.org%2Frequest_uri
+&client_id_scheme=entity_id
+&request_uri_method=post
+
+
+

In the Cross Device Flow, a QR Code is shown by the Relying Party to the User in order to provide the Authorization Request. The User frames the QR Code using their Wallet Instance.

+

Below is represented a non-normative example of a QR Code issued by the Relying Party.

+
+_images/verifier_qr_code.svg
+

Below is represented a non-normative example of the QR Code raw payload:

+
https://wallet-solution.digital-strategy.europa.eu/authorization?client_id=https%3A%2F%2Frelying-party.example.org&request_uri=https%3A%2F%2Frelying-party.example.org&client_id_scheme=entity_id&request_uri_method=post
+
+
+
+

Note

+

The error correction level chosen for the QR Code MUST be Q (Quartily - up to 25%), since it offers a good balance between error correction capability and data density/space. This level of quality and error correction allows the QR Code to remain readable even if it is damaged or partially obscured.

+
+
+
+

Cross Device Flow Status Checks and Security

+

When the flow is Cross Device, the user-agent needs to check the session status to the endpoint made available by Relying Party (status endpoint). This check MAY be implemented in the form of JavaScript code, within the page that shows the QRCode, then the user-agent checks the status with a polling strategy in seconds or a push strategy (eg: web socket).

+

Since the QRcode page and the status endpoint are implemented by the Relying Party, it is under the Relying Party responsability the implementation details of this solution, since it is related to the Relying Party's internal API. However, the text below offers an implementation solution.

+

The Relying Party MUST bind the request of the user-agent, with a session cookie marked as Secure and HttpOnly , with the issued request. The request url SHOULD include a parameter with a random value. The HTTP response returned by this specialized endpoint MAY contain the HTTP status codes listed below:

+
    +
  • 201 Created. The signed Request Object was issued by the Relying Party that waits to be downloaded by the Wallet Instance at the request_uri endpoint.

  • +
  • 202 Accepted. This response is given when the signed Request Object was obtained by the Wallet Instance.

  • +
  • 200 OK. The Wallet Instance has provided the presentation to the Relying Party's response_uri endpoint and the User authentication is successful. The Relying Party updates the session cookie allowing the user-agent to access to the protected resource. An URL is provided carrying the location where the user-agent is intended to navigate.

  • +
  • 401 Unauthorized. The Wallet Instance or its User have rejected the request, or the request is expired. The QRCode page SHOULD be updated with an error message.

  • +
+

Below a non-normative example of the HTTP Request to this specialized endpoint, where the parameter id contains an opaque and random value:

+
GET /session-state?id=3be39b69-6ac1-41aa-921b-3e6c07ddcb03
+HTTP/1.1
+HOST: relying-party.example.org
+
+
+
+
+

Request Object Details

+

Below a non-normative example of HTTP request made by the Wallet Instance to the Relying Party.

+
GET /request_uri HTTP/1.1
+HOST: relying-party.example.org
+
+
+
+
+

Request URI Response

+

The Relying Party issues the signed Request Object, where a non-normative example in the form of decoded header and payload is shown below:

+
{
+  "alg": "ES256",
+  "typ": "JWT",
+  "trust_chain": [
+    "MIICajCCAdOgAwIBAgIC...awz",
+    "MIICajCCAdOgAwIBAgIC...2w3",
+    "MIICajCCAdOgAwIBAgIC...sf2"
+  ]
+}
+.
+{
+  "scope": "eu.europa.ec.eudiw.pid.it.1 WalletAttestation",
+  "client_id_scheme": "entity_id",
+  "client_id": "https://relying-party.example.org",
+  "response_mode": "direct_post.jwt",
+  "response_type": "vp_token",
+  "response_uri": "https://relying-party.example.org/response_uri",
+  "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb",
+  "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03",
+  "iss": "https://relying-party.example.org",
+  "iat": 1672418465,
+  "exp": 1672422065,
+  "request_uri_method": "post"
+}
+
+
+

The JWS header parameters are described below:

+ ++++ + + + + + + + + + + + + + + + + + + + +

Name

Description

alg

Algorithm used to sign the JWT, according to [RFC 7516#section-4.1.1]. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to none or to a symmetric algorithm (MAC) identifier.

typ

Media Type of the JWT, as defined in [RFC 7519].

kid

Key ID of the public key needed to verify the JWS signature, as defined in [RFC 7517]. REQUIRED when trust_chain is used.

trust_chain

Sequence of Entity Statements that composes the Trust Chain related to the Relying Party, as defined in OIDC-FED Section 3.2.1. Trust Chain Header Parameter.

+

The JWS payload parameters are described herein:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

scope

Aliases for well-defined Presentation Definitions IDs. It is used to identify which required Credentials and User attributes are requested by the Relying Party, according to the Section "Using scope Parameter to Request Verifiable Credential(s)" of [OID4VP].

client_id_scheme

String identifying the scheme of the value in the client_id. It MUST be set to the value entity_id.

client_id

Unique Identifier of the Relying Party.

response_mode

It MUST be set to direct_post.jwt.

response_type

It MUST be set to vp_token.

response_uri

The Response URI to which the Wallet Instance MUST send the Authorization Response using an HTTP request using the method POST.

nonce

Fresh cryptographically random number with sufficient entropy, which length MUST be at least 32 digits.

state

Unique identifier of the Authorization Request.

iss

The entity that has issued the JWT. It will be populated with the Relying Party client id.

iat

Unix Timestamp, representing the time at which the JWT was issued.

exp

Unix Timestamp, representing the expiration time on or after which the JWT MUST NOT be valid anymore.

request_uri_method

String determining the HTTP method to be used with the request_uri endpoint to provide the Wallet Instance metadata to the Relying Party. The value is case-insensitive and can be set to: get or post. The GET method, as defined in [@RFC9101], involves the Wallet Instance sending a GET request to retrieve a Request Object. The POST method involves the Wallet Instance requesting the creation of a new Request Object by sending an HTTP POST request, with its metadata, to the request URI of the Relying Party.

+
+

Warning

+

Using the parameter scope requires that the Relying Party Metadata MUST contain the presentation_definition, where a non-normative example of it is given below:

+
+
{
+  "presentation_definition": {
+    "id": "presentation definitions",
+    "input_descriptors": [
+      {
+        "id": "eu.europa.ec.eudiw.pid.it.1",
+        "name": "Person Identification Data",
+        "purpose": "User authentication",
+        "format": "vc+sd-jwt",
+        "constraints": {
+          "fields": [
+            {
+              "path": [
+                "$.credentialSubject.unique_id",
+                "$.credentialSubject.given_name",
+                "$.credentialSubject.family_name",
+              ]
+            }
+          ],
+          "limit_disclosure": "preferred"
+        }
+      },
+      {
+        "id": "WalletAttestation",
+        "name": "Wallet Attestation",
+        "purpose": "Wallet Authentication",
+        "format": "jwt",
+        "constraints": {
+          "fields": [
+            {
+              "path": [
+                "$.iss",
+                "$.exp",
+                "$.iat",
+                "$.cnf.jwk",
+                "$.aal",
+              ]
+            }
+          ]
+        }
+      }
+    ]
+  }
+}
+
+
+
+

Note

+

The following parameters, even if defined in [OID4VP], are not mentioned in the previous non-normative example, since their usage is conditional and may change in future release of this documentation.

+
    +
  • presentation_definition: JSON object according to Presentation Exchange. This parameter MUST not be present when presentation_definition_uri or scope are present.

  • +
  • presentation_definition_uri: Not supported. String containing an HTTPS URL pointing to a resource where a Presentation Definition JSON object can be retrieved. This parameter MUST be present when presentation_definition parameter or a scope value representing a Presentation Definition is not present.

  • +
  • client_metadata: A JSON object containing the Relying Party metadata values. The client_metadata parameter MUST NOT be present when client_id_scheme is entity_id. Since the client_metadata is taken from trust_chain, this parameter is intended to not be used.

  • +
  • client_metadata_uri: string containing an HTTPS URL pointing to a resource where a JSON object with the Relying Party metadata can be retrieved. The client_metadata_uri parameter MUST NOT be present when client_id_scheme is entity_id. Since the client_metadata is taken from trust_chain, this parameter is intended to not be used.

  • +
+
+
+

Request URI Endpoint Errors

+

When the Relying Party encounters errors while issuing the Request Object from the request_uri endpoint, the following error responses are applicable:

+
    +
  • invalid_request: The request_uri URL is missing in some part within its webpath or urlparams, therefore it does not point to a valid Request Object and then it cannot be retrieved. This error is returned when the Request Object is not well referenced in the request_uri.

  • +
  • server_error: The server encountered an unexpected condition that prevented it from fulfilling the request. This error is returned when the Relying Party's server is unable to process the Request Object due to a server-side issue, such as a malfunction or maintenance. The Wallet Instance should advise the User to try again later.

  • +
+

The following is an example of an error response from request_uri endpoint:

+
HTTP/1.1 400 Bad Request
+Content-Type: application/json
+
+{
+ "error": "invalid_request",
+ "error_description": "The request_uri is malformed or does not point to a valid Request Object."
+}
+
+
+

Another example:

+
HTTP/1.1 500 Internal Server Error
+Content-Type: application/json
+
+{
+ "error": "server_error",
+ "error_description": "The request_uri cannot be retrieved due to an internal server error."
+}
+
+
+

There are cases where the Wallet Instance cannot validate the Request Object or the Request Object results invalid. This error occurs if the Request Object is successfully fetched from the request_uri but fails validation checks by the Wallet Instance. This could be due to incorrect signatures, malformed claims, or other validation failures, such as the revocation of its issuer (Relying Party).

+

Upon receiving an error response, the Wallet Instance SHOULD inform the User of the error condition in an appropriate manner. Additionally, the Wallet Instance SHOULD log the error and MAY attempt to recover from certain errors if feasible. For example, if the error is server_error, the Wallet Instance MAY prompt the User to re-enter or scan a new QR code, if applicable.

+

It is crucial for Wallet Instances to implement robust error handling to maintain a secure and user-friendly experience. Adhering to the specified error responses ensures interoperability and helps in diagnosing issues during the interaction with the Relying Party's endpoints.

+
+

Warning

+

The current OpenID4VP specification outlines various error responses that a Wallet Instance may return to the Relying Party (Verifier) in case of faulty requests (OpenID4VP, Section 6.4. Error Response). For privacy enhancement, Wallet Instances SHOULD NOT notify the Relying Party of faulty requests in certain scenarios. This is to prevent any potential misuse of error responses that could lead to gather informations that could be exploited.

+
+
+
+
+

Authorization Response Details

+

After getting the User authorization and consent for the presentation of the Credentials, the Wallet Instance sends the Authorization Response to the Relying Party response_uri endpoint, the content SHOULD be encrypted according OPENID4VP Section 6.3, using the Relying Party public key.

+
+

Note

+

Why the response is encrypted?

+

The response sent from the Wallet Instance to the Relying Party is encrypted to prevent a malicious agent from gaining access to the plaintext information transmitted within the Relying Party's network. This is only possible if the network environment of the Relying Party employs TLS termination. Such technique employs a termination proxy that acts as an intermediary between the client and the webserver and handles all TLS-related operations. In this manner, the proxy deciphers the transmission's content and either forwards it in plaintext or by negotiates an internal TLS session with the actual webserver's intended target. In the first scenario, any malicious actor within the network segment could intercept the transmitted data and obtain sensitive information, such as an unencrypted response, by sniffing the transmitted data.

+
+

Below a non-normative example of the request:

+
POST /response_uri HTTP/1.1
+HOST: relying-party.example.org
+Content-Type: application/x-www-form-urlencoded
+
+response=eyJhbGciOiJFUzI1NiIs...9t2LQ
+
+
+

Below is a non-normative example of the decrypted JSON response content:

+
{
+  "state": "3be39b69-6ac1-41aa-921b-3e6c07ddcb03",
+  "vp_token": [
+      "eyJhbGciOiJFUzI1NiIs...PT0iXX0",
+      $WalletAttestation-JWT
+  ],
+  "presentation_submission": {
+      "definition_id": "32f54163-7166-48f1-93d8-ff217bdb0653",
+      "id": "04a98be3-7fb0-4cf5-af9a-31579c8b0e7d",
+      "descriptor_map": [
+          {
+              "id": "eu.europa.ec.eudiw.pid.it.1",
+              "path": "$.vp_token.verified_claims.claims._sd[0]",
+              "format": "vc+sd-jwt"
+          },
+          {
+              "id": "WalletAttestation",
+              "path": "$",
+              "format": "jwt"
+          }
+      ]
+  }
+}
+
+
+

Where the following parameters are used:

+ ++++ + + + + + + + + + + + + + + + + +

Name

Description

vp_token

JSON Array containing the Verifiable Presentation(s). There MUST be at least two signed presentations in this Array: +- The requested Digital Credential (one or more, in format of SD-JWT VC or MDOC CBOR) +- The Wallet Attestation

presentation_submission

JSON Object containing the mappings between the requested Verifiable Credentials and where to find them within the returned Verifiable Presentation Token, according to the Presentation Exchange.

state

Unique identifier provided by the Relying Party within the Authorization Request.

+

Below is a non-normative example of the vp_token decoded content, represented in the form of JWS header and payload, separated by a period:

+
{
+  "alg": "ES256",
+  "typ": "JWT"
+}
+.
+{
+  "iss": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "jti": "3978344f-8596-4c3a-a978-8fcaba3903c5",
+  "aud": "https://relying-party.example.org/response_uri",
+  "iat": 1541493724,
+  "exp": 1573029723,
+  "nonce": "2c128e4d-fc91-4cd3-86b8-18bdea0988cb",
+  "vp": "<Issuer-Signed-JWT>~<Disclosure 1>~<Disclosure 2>~...~<Disclosure N>"
+}
+
+
+

Where the following parameters are used:

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

vp

The Digital Credential in its original state. The public key contained in the Digital Credential MUST be used to verify the entire VP JWS as Proof of Possession of the private key which the public key is included in the Digital Credential. Eg: for SD-JWT VC the public key is provided within the cnf.jwk claim.

jti

JWS unique identifier.

iat

Unix timestamp of the time of issuance of this presentation.

exp

Unix timestamp beyond which this presentation will no longer be considered valid.

aud

Audience of the VP, corresponding to the response_uri within the Authorization request issued by the Relying Party.

nonce

The nonce value provided by the Relying Party within the Authorization Request.

+
+

Authorization Response Errors

+

When the Wallet sends a response using direct_post.jwt to the Relying Party, several errors may occur, including:

+
+
    +
  • Invalid Credential: This error occurs when one or more Credentials or VPs, included in the vp_token, fail validation because they are malformed. The correct HTTP status code for this error is 400 (Bad Request). The error should be set to invalid_request, and the error_description SHOULD identify the malformed Credentials.

  • +
  • Issuer Credential Trust Failure: This error arises when the Relying Party cannot establish trust with the issuer of a presented Credential, included in the vp_token. The appropriate HTTP status code for this error is 403 (Forbidden). The error should be labeled as invalid_request, and the error_description SHOULD specify the issuer for which trust could not be established.

  • +
  • Invalid Nonce: This error happens when the nonce provided in the request is incorrect. The HTTP status code for this error should be 403 (Forbidden). The error SHOULD be labeled as invalid_request, with an error_description indicating that the nonce is incorrect.

  • +
  • Invalid Wallet Attestation: This error occours when it's not possible to establish trust with the Wallet Attestation's issuer (Wallet Provider), or if the Wallet Attestation is invalid or does not meet the Relying Party's minimum security criteria. The correct HTTP status code for this error is 403 (Forbidden). The error SHOULD be marked as invalid_request, and the error_description should clarify that the issue stems from the Wallet Attestation's failure to establish trust with its issuer or its non-compliance with required security standards.

  • +
  • Invalid Presentation Submission: This error occurs when the presentation submission is not valid. The appropriate HTTP status code for this error is 400 Bad Request. The error should be labeled as invalid_request, and the error_description should specify the invalid aspects of the presentation submission.

  • +
+

To enhance clarity and ensure proper error handling, it's crucial to provide detailed error responses. Below are two examples of HTTP responses using application/json that include both the error and error_description members:

+
+
HTTP/1.1 403 Forbidden
+Content-Type: application/json
+
+{
+  "error": "invalid_request",
+  "error_description": "Trust cannot be established with the issuer: https://issuer.example.com"
+}
+
+
+
HTTP/1.1 400 Bad Request
+Content-Type: application/json
+
+{
+  "error": "invalid_request",
+  "error_description": "The following Credentials/VP are malformed: [CredentialX, vp_token[2]]"
+}
+
+
+
+
+
+

Redirect URI

+

When the Relying Party provides the redirect URI, the Wallet Instance MUST send the user-agent to this redirect URI. The redirect URI allows the Relying Party to continue the interaction with the End-User on the device where the Wallet Instance resides after the Wallet Instance has sent the Authorization Response to the response URI.

+

The Relying Party MUST include a response code within the redirect URI. The response code is a fresh, cryptographically random number used to ensure only the receiver of the redirect can fetch and process the Authorization Response. The number could be added as a path component, as a parameter or as a fragment to the URL. It is RECOMMENDED to use a cryptographic random value of 128 bits or more at the time of the writing of this specification.

+

The following is a non-normative example of the response from the Relying Party to the Wallet Instance upon receiving the Authorization Response at the Response Endpoint.

+
HTTP/1.1 200 OK
+Content-Type: application/json;charset=UTF-8
+
+{
+  "redirect_uri": "https://relying-party.example.org/cb#response_code=091535f699ea575c7937fa5f0f454aee"
+}
+
+
+

The redirect_uri value MUST be used with an HTTP method GET by either the Wallet Instance or the user-agent to redirect the User to the Relying Party in order to complete the process. The specific entity that performs this action depends on whether the flow is Same device or Cross device.

+
+
+

Redirect URI Errors

+

When the Wallet Instance sends the user-agent to the Redirect URI provided by the Relying Party, several errors may occur that prevent the successful completion of the process. These errors are critical as they directly impact the User experience by hindering the seamless flow of information between the Wallet Instance and the Relying Party. Below are potential errors related to the Redirect URI and their implications:

+
    +
  • Mismatched Redirect URI: This error occurs when the Redirect URI provided by the Relying Party does not match any of the URIs linked with the User session. This mismatch can lead to a HTTP status error code set to 403 (Forbidden), indicating that the request cannot be processed due session/URI mismatch.

  • +
  • Redirect URI Security Issues: If the Relying Party incurs in security issues when evaluating the User session with the provided URI, the Relying Party MUST raise an error. In such cases, an HTTP status code set to 403 (Forbidden) MUST be returned, indicating that the request is valid but the server is refusing action due to security precautions.

  • +
+

Handling these errors requires clear communication to the User within the returned navigation web page. It is crucial for the Relying Party to implement robust error handling and validation mechanisms for Redirect URIs to ensure a secure implementation.

+
+
+

Relying Party Entity Configuration

+

According to the Trust Model section, the Relying Party is a Federation Entity and MUST expose a well-known endpoint containing its Entity Configuration.

+

Below a non-normative example of the request made by the Wallet Instance to the openid-federation well-known endpoint to obtain the Relying Party Entity Configuration:

+
GET /.well-known/openid-federation HTTP/1.1
+HOST: relying-party.example.org
+
+
+

Below is a non-normative response example:

+
{
+    "alg": "ES256",
+    "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+    "typ": "entity-statement+jwt"
+}
+.
+{
+    "exp": 1649590602,
+    "iat": 1649417862,
+    "iss": "https://rp.example.it",
+    "sub": "https://rp.example.it",
+    "jwks": {
+        "keys": [
+            {
+                "kty": "EC",
+                "crv": "P-256",
+                "x": "5s4qi ...",
+                "y": "AQAB",
+                "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+            }
+        ]
+    },
+    "metadata": {
+        "wallet_relying_party": {
+            "application_type": "web",
+            "client_id": "https://rp.example.it",
+            "client_name": "Name of an example organization",
+            "jwks": {
+                "keys": [
+                    {
+                        "kty": "EC",
+                        "crv": "P-256",
+                        "x": "5s4qi ...",
+                        "y": "AQAB",
+                        "kid": "9tjiCaivhWLVUJ3AxwGGz_9",
+                    }
+                ]
+            },
+
+            "contacts": [
+                "ops@relying-party.example.org"
+            ],
+
+            "request_uris": [
+                "https://relying-party.example.org/request_uri"
+            ],
+            "response_uris": [
+                "https://relying-party.example.org/response_uri"
+            ],
+            "default_acr_values": [
+                "https://www.spid.gov.it/SpidL2",
+                "https://www.spid.gov.it/SpidL3"
+            ],
+            "vp_formats": {
+                "vc+sd-jwt": {
+                    "sd-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ],
+                    "kb-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ]
+                }
+            },
+              "presentation_definitions": [
+                  {
+                    "id": "32f54163-7166-48f1-93d8-ff217bdb0653",
+                    "input_descriptors": [
+                        {
+                            "id": "IdentityCredential",
+                            "format": {
+                                "vc+sd-jwt": {}
+                            },
+                            "constraints": {
+                                "limit_disclosure": "required",
+                                "fields": [
+                                    {
+                                        "path": [
+                                            "$.type"
+                                        ],
+                                        "filter": {
+                                            "type": "string",
+                                            "const": "IdentityCredential"
+                                        }
+                                    },
+                                    {
+                                        "path": [
+                                            "$.family_name"
+                                        ]
+                                    },
+                                    {
+                                        "path": [
+                                            "$.given_name"
+                                        ]
+                                    },
+                                    {
+                                        "path": [
+                                            "$.unique_id"
+                                        ],
+                                        "intent_to_retain": "true"
+                                    }
+                                ]
+                            }
+                        },
+                    {
+                        "id": "WalletAttestation",
+                        "format": {
+                            "jwt": {}
+                        },
+                        "constraints": {
+                            "fields": [
+                                {
+                                    "path": [
+                                        "$.iss"
+                                    ],
+                                    "filter": {
+                                        "type": "string",
+                                        "enum": [
+                                            "https://issuer.example.org",
+                                            "https://issuer2.example.org",
+                                            "https://issuer3.example.org"
+                                        ]
+                                    }
+                                },
+                                {
+                                    "path": [
+                                        "$.iat"
+                                    ],
+                                    "filter": {
+                                        "type": "number",
+                                        "minimum": 1504699136
+                                    }
+                                },
+                                {
+                                    "path": [
+                                        "$.exp"
+                                    ],
+                                    "filter": {
+                                        "type": "number",
+                                        "minimum": 1504700136
+                                    }
+                                },
+                                {
+                                    "path": [
+                                        "$.cnf.jwk"
+                                    ],
+                                    "filter": {
+                                        "type": "object"
+                                    }
+                                }
+                            ]
+                        }
+                    }
+                    ]
+                },
+                  {
+                    "id": "mDL-sample-req",
+                    "input_descriptors": [
+                        {
+                            "id": "mDL",
+                            "format": {
+                                "mso_mdoc": {
+                                    "alg": [
+                                        "EdDSA",
+                                        "ES256"
+                                    ]
+                                },
+                                "constraints": {
+                                    "limit_disclosure": "required",
+                                    "fields": [
+                                        {
+                                            "path": [
+                                                "$.mdoc.doctype"
+                                            ],
+                                            "filter": {
+                                                "type": "string",
+                                                "const": "org.iso.18013.5.1.mDL"
+                                            }
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.namespace"
+                                            ],
+                                            "filter": {
+                                                "type": "string",
+                                                "const": "org.iso.18013.5.1"
+                                            }
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.family_name"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.portrait"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        },
+                                        {
+                                            "path": [
+                                                "$.mdoc.driving_privileges"
+                                            ],
+                                            "intent_to_retain": "false"
+                                        }
+                                    ]
+                                }
+                            }
+                        }
+                    ]
+                }
+            ],
+
+            "default_max_age": 1111,
+
+            // JARM related
+            "authorization_signed_response_alg": [[
+                "ES256"
+            ],
+            "authorization_encrypted_response_alg": [
+                "RSA-OAEP",
+                "RSA-OAEP-256"
+            ],
+            "authorization_encrypted_response_enc": [
+                "A128CBC-HS256",
+                "A192CBC-HS384",
+                "A256CBC-HS512",
+                "A128GCM",
+                "A192GCM",
+                "A256GCM"
+            ],
+
+            // SIOPv2 related
+            "subject_type": "pairwise",
+            "require_auth_time": true,
+            "id_token_signed_response_alg": [
+                "ES256"
+            ],
+            "id_token_encrypted_response_alg": [
+                "RSA-OAEP",
+                "RSA-OAEP-256"
+            ],
+            "id_token_encrypted_response_enc": [
+                "A128CBC-HS256",
+                "A192CBC-HS384",
+                "A256CBC-HS512",
+                "A128GCM",
+                "A192GCM",
+                "A256GCM"
+            ],
+        },
+        "federation_entity": {
+            "organization_name": "OpenID Wallet Relying Party example",
+            "homepage_uri": "https://relying-party.example.org/home",
+            "policy_uri": "https://relying-party.example.org/policy",
+            "logo_uri": "https://relying-party.example.org/static/logo.svg",
+            "contacts": [
+               "tech@relying-party.example.org"
+             ]
+        }
+    },
+    "authority_hints": [
+        "https://registry.eudi-wallet.example.it"
+    ]
+  }
+}
+
+
+

The Entity Configuration is a JWS, where its header and payload parameters are defined below, based on the provided OpenID Federation Entity Configuration example:

+

JWT Header Parameters

+ ++++ + + + + + + + + + + + + + + + + +

Name

Description

alg

The digital signature algorithm used to sign the JWT. For example, "ES256" for ECDSA using P-256 and SHA-256.

typ

The Media Type of the JWT, it MUST be set to "entity-statement+jwt".

kid

The Key ID used for identifying the key used to sign the JWS.

+

JWT Payload Parameters

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Name

Description

iss

The issuer of the Entity Configuration, identifying the entity that issued the Entity Configuration.

sub

The subject of the Entity Configuration, identifying the principal that is the subject of the Entity Configuration.

jwks

JSON Web Key Set representing the cryptographic keys used for trust evaluation operations and for signing this Entity Configuration.

metadata

Metadata describing the entity, including information about the wallet relying party, client ID, client name, contacts, request URIs, response URIs, default ACR values, and VP formats.

authority_hints

URLs hinting at the authority or authorities that the entity trusts and which the public keys for verifieng this Entity Confgiuration are intended to be available within a Subordinate Statement.

exp

Unix Timestamp representing the expiration time of the Entity Configuration, after which the Entity Configuration MUST NOT be accepted for processing.

iat

Unix Timestamp representing the issued at time of the Entity Configuration, representing the time at which the Entity Configuration was issued.

+
+
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/revocation-lists.html b/rp-vp-kid/en/revocation-lists.html new file mode 100644 index 000000000..4ccd4f29b --- /dev/null +++ b/rp-vp-kid/en/revocation-lists.html @@ -0,0 +1,2013 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Credential Lifecycle + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Credential Lifecycle

+

The value of a Digital Credential is conditional on its validity. A Credential that has been revoked, due to legal requirements, inaccuracy or compromise, is valueless and potentially harmful. +For these reasons a robust mechanism for managing the life-cycle and the revocation of a Digital Credential is required.

+

This section outlines the key technical requirements and processes related to the revocation of Digital Credentials. +Furthermore, it provides the technical details that the Verifiers MUST implement to verify, in a secure and reliable manner, the validity of a Digital Credential during the presentation phase.

+

The verification of the validity of a Digital Credential is based on the [OAuth Status Attestation draft 01] specification.

+

A Status Attestation is a signed document serving as proof of a Digital Credential's current validity status. The Issuer provides these attestations to Holders who can present them to Verifiers together with the corresponding Digital Credentials.

+

The Status Attestations have the following features:

+
    +
  • automated issuance, as the User authentication is not required for the provisioning of the Status Attestation;

  • +
  • verification of the Digital Credential validity status in both online and offline scenarios;

  • +
  • privacy-preserving, according to the following evidences:

    +
      +
    1. the Verifier cannot check over time the validity of a given Digital Credential related to the User;

    2. +
    3. the Issuers cannot track when and where a Digital Credential is verified;

    4. +
    5. it doesn't reveal any information about the Users or the content of their Digital Credentials.

    6. +
    +
  • +
+
+

Operational Requirements

+
    +
  • Internet Connection for Status Attestations: Status Attestations can be obtained only when the Wallet Instance is connected to the internet and actively operated by the User.

  • +
  • Role of a Credential Issuer: A Credential Issuer is responsible for creating and issuing Credentials, as well as managing their lifecycle and validity status.

  • +
  • Involvement of Authentic Sources: When one or more Authentic Sources are involved in the issuance of a Digital Credential, the information exchanged between the Authentic Source and the Credential Issuer is crucial for the Digital Credential's issuance. Furthermore, in cases where the Authentic Source initiates a revocation or data changes, revoking the Digital Credential becomes necessary.

  • +
+
+
+

Functional Requirements

+

The Status Attestation MUST:

+
    +
  • be presented in conjunction with the Digital Credential;

  • +
  • be timestamped with the issuance datetime;

  • +
  • contain the expiration datetime after which it SHOULD NOT be considered valid anymore and it MUST NOT be greater than the one contained in the Digital Credential which it refers to;

  • +
  • have a validity period not greater than 24 hours;

  • +
  • provide the proof about the non-revocation of the Digital Credential which is related to and MUST be validated using the cryptographic signature of the Issuer;

  • +
  • not reveal any information about the Relying Party, the User's device or the User's data contained in the Digital Credential the attestation is related to;

  • +
  • be non-repudiable even beyond its expiration time and even in the case of cryptographic keys rotation.

  • +
+

The Issuer MUST:

+
    +
  • ensure that the data contained in a Digital Credential is kept up to date, including the status of validity of the data from the Authentic Source;

  • +
  • revoke a Digital Credential when the following circumstances occur:

    +
      +
    • the Digital Credential requires to be updated, whenever one or more attributes are changed; in this case the User will request a new issuance for that Digital Credential;

    • +
    • the Wallet Instance that holds the Digital Credential was issued is revoked;

    • +
    • the User deletes the Digital Credential from the Wallet Instance;

    • +
    +
  • +
  • provide a web service for allowing a Wallet Instance, with a proof of possession of a specific Digital Credential, to

    +
      +
    • request a revocation of that Digital Credential;

    • +
    • obtain a related Status Attestation;

    • +
    +
  • +
  • provide out-of-band mechanisms through which the User can request the revocation of their Digital Credentials, using a robust procedure for identity proofing and User authentication, in particular when the User is unable to use the personal Wallet Instance.

  • +
+

The Wallet Instance MUST:

+
    +
  • check periodically the validity status of the Digital Credential that is stored in it, requesting a Status Attestation for each Digital Credential;

  • +
  • be able to present a Status Attestation if required by a Verifier, along with the corresponding Digital Credential;

  • +
  • request a revocation of a Digital Credential when the Users delete it from the storage.

  • +
+

The Authentic Sources MUST:

+
    +
  • provide web services for the providing of updated User data and the validity status;

  • +
  • store in local databases only the minimum information required to provide the Issuer with the User data or a change in the validity status.

  • +
+
+
+

Revocation Use Cases

+

The revocation of a Digital Credential MAY be triggered by:

+
    +
  • Users using their personal Wallet Instance or by some out-of-band touchpoints.

  • +
  • Revocation of the Wallet Instance.

  • +
  • Authentic Sources (e.g., for attribute updates) following administrative purposes.

  • +
  • Law-Enforcing Bodies for the fulfillment of their functions and any other judicial reasons (e.g., Police).

  • +
+

Credential Revocation Flows can start under different scenarios, such as:

+
+
    +
  • The User reports the loss or theft of their own physical document to the Law-Enforcement Authorities: this implies that the Credentials, if any, shall be revoked.

  • +
  • The User notifies an Authentic Source that one or more attributes are changed (e.g. the current resident address): in this case the Credentials SHALL be revoked, as they are no longer valid due to the change in attributes.

  • +
  • Users who lose access to their Wallet Instance (e.g., due to theft or loss of the device) can request the Credential Issuer to revoke their Credentials or ask the Wallet Provider to revoke the Wallet Instance. If the Wallet Provider is authorized by the User and is aware of the types of Credentials and their issuers stored in the Wallet, it can then initiate the revocation of all Digital Credentials contained within the Wallet Instance on behalf of the User.

  • +
  • The Law-Enforcing Authorities, for the fulfillment of their functions and any other judicial reasons, may request the Authentic Source to revoke entitlements, licenses, certificates, identification documents, etc., which in turn leads to the revocation of any linked Credentials.

  • +
  • The Authentic Sources that for any administrative reasons update one or more attributes of a User, shall inform the Issuer of related Credentials.

  • +
  • The Issuers, for technical security reasons (e.g. in the case of compromised cryptographic keys, death of the User, etc.), can decide to revoke the Credentials.

  • +
+
+

The revocation scenarios involve two main flows:

+
+
    +
  • The Revocation flows: these flows describe how an Entity requests for a Digital Credential revocation.

  • +
  • The Status Attestation flows: these flows define the technical protocols for requesting and obtaining a Status Attestation and how the Wallet Instance will provide it to a Verifier as a proof of validity of a corresponding Digital Credential.

  • +
+
+
+
+

Revocation Flows

+

Depending on the different scenarios that may involve the revocation of a Digital Credential, different processes and technical flows may be implemented, according to national laws or Regulations of specific domains. +The subsequent sections define the protocol interface between the Wallet Instances and the Issuers during the revocation request. The communication between the Issuers and other Entities is out-of-scope of this technical implementation profile.

+
+

Revocation Request by Wallet Instance

+

A Wallet Instance MUST request the revocation of a Digital Credential as defined below.

+
+_images/Low-Level-Flow-Revocation.svg +
+

Fig. 7 Wallet Instance Initiated Revocation Flow

+
+
+

Step 1 (Credential Revocation Request): The Wallet Instance initiates the process by creating a Credential Revocation Request. This request includes a Digital Credential Proof of Possession as a JWT. It MUST be signed with the private key related to the public key contained within the Credential (such as the Issuer Signed JWT in the case of SD-JWT, or the MSO in the case of Mdoc CBOR). Then, the Wallet Instance sends the request to the Issuer as in the following non-normative example.

+
POST /revoke HTTP/1.1
+Host: pid-provider.example.org
+Content-Type: application/x-www-form-urlencoded
+
+credential_pop=$CredentialPoPJWT
+
+
+

Below, is given a non-normative example of a Credential PoP with decoded JWT headers and payload and without signature for better readability:

+
{
+  "alg": "ES256",
+  "typ": "status-attestation-request+jwt",
+  "kid": $CREDENTIAL-CNF-JWKID
+}
+.
+{
+  "iss": "0b434530-e151-4c40-98b7-74c75a5ef760",
+  "aud": "https://pid-provider.example.org/revoke",
+  "iat": 1698744039,
+  "exp": 1698744139,
+  "jti": "6f204f7e-e453-4dfd-814e-9d155319408c",
+  "credential_hash": $Issuer-Signed-JWT-Hash
+  "credential_hash_alg": "sha-256",
+}
+
+
+

Step 2 (PoP verification): The Issuer verifies the signature of the PoP JWTs using the public key that was attested in the issued Digital Credential. If the verification is successful, it means that the Wallet Instance owns the private keys associated with the Digital Credential, and therefore is entitled to request its revocation.

+

Step 3 (Credential Revocation): The Issuer revokes the Credential provided in the Credential PoP JWT. After the revocation, the Issuer MAY also send a notification to the User (e.g. using a User's email address, telephone number, or any other verified and secure communication channel), with all needed information related to the Credential revocation status update. This communication is out of scope of the current technical implementation profile.

+

Step 4 (Credential Revocation Response): The Issuer sends a response back to the Wallet Instance with the result of the revocation request.

+
.. code-block:: http
+
+HTTP/1.1 204 No Content
+
+
+
+

Credential Revocation HTTP Request

+

The requests to the Issuer Revocation endpoint MUST be HTTP with method POST, using the mandatory parameters listed below within the HTTP request message body. These MUST be encoded in application/x-www-form-urlencoded format.

+ +++++ + + + + + + + + + + + + +

Claim

Description

Reference

credential_pop

It MUST contain a JWT proof of possession of the cryptographic key the Credential to be revoked shall be bound to. See Section Credential Proof of Possession for more details.

[OAuth Status Attestation draft 01]

+

The Revocation Endpoint MUST be provided by the Issuer within its Metadata.

+
+
+

Credential Revocation HTTP Response

+

In case of successful revocation, the Issuer MUST return an HTTP Response with status code 204 No Content. +Otherwise, an HTTP error response MUST be provided by the Issuer using status codes according to the table below.

+

The following HTTP Status Codes MUST be supported:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Status Code

Body

Description

204 No Content

The Digital Credential has been successfully revoked.

400 Bad Request

Error code and description

The issuer cannot fulfill the request because of invalid parameters.

404 Not Found

The Digital Credential to be revoked can not be found by the Issuer.

500 Internal Server Error

The Issuer encountered an internal problem. (RFC 6749#section-5.2).

503 Service Unavailable

The Issuer is temporary unavailable. (RFC 6749#section-5.2).

+

For HTTP error responses that involve a body, the body MUST be encoded in application/json format and MUST contain the following parameters:

+
+
    +
  • error. The error code, as registerd in the table below.

  • +
  • error_description. Text in human-readable form providing further details to clarify the nature of the error encountered.

  • +
+
+

Error codes are meant to provide additional information about the failure so that the User can be informed and take the appropriate action. +The following Error Codes MUST be supported:

+ ++++ + + + + + + + + + + +

Error Code

Description

invalid_request

The request is not valid due to the lack or incorrectness of one or more parameters. (RFC 6749#section-5.2).

+

Below a non-normative example of an HTTP Response with an error.

+
HTTP/1.1 400 Bad Request
+Content-Type: application/json;charset=UTF-8
+
+{
+  "error": "invalid_request"
+  "error_description": "The signature of credential_pop JWT is not valid"
+}
+
+
+
+
+
+
+

Status Attestation Flows

+

The Status Attestation process is divided into the following phases:

+
+
    +
  1. The Status Attestation Request by a Wallet Instance: it involves the Wallet Instance and the Issuer.

  2. +
  3. The Status Attestation Presentation to a Verifier: it involves the Wallet Instance and the Verifier.

  4. +
+
+
+_images/High-Level-Flow-Status-Attestation.svg
+

Fig. 8 High-Level Status Attestation Flows

+
+
+
+

Status Attestation Request by Wallet Instance

+

The presentation of a Credential to a Verifier may occur long after it has been issued by the Issuer. During this time interval, the Credential can be invalidated for any reason and therefore the Verifier also needs to verify its revocation or suspension status. To address this scenario, the Issuer provides the Wallet Instance with a Status Attestation. This Attestation is bound to a Credential so that the Wallet Instance can present it to a Verifier, along with the Credential itself, as proof of non-revocation status of the Credential.

+

The following diagram shows how the Wallet Instance requests a Status Attestation to the Issuer.

+
+_images/Low-Level-Flow-Revocation-Attestation.svg +
+

Fig. 9 Status Attestation Request Flow

+
+
+

Step 1 (Status Attestation Request): The Wallet Instance sends the Status Attestation Request to the Issuer. The request MUST contain the Credential Proof of Possession JWT, signed with the private key related to the public key contained within the Credential.

+
POST /status HTTP/1.1
+Host: pid-provider.example.org
+Content-Type: application/x-www-form-urlencoded
+
+credential_pop=$CredentialPoPJWT
+
+
+

A non-normative example of Credential Proof of Possession is provided in the previous section.

+

Step 2 (PoP verification): The Issuer verifies the signature of the PoP JWTs using the public key that was attested in the Digital Credential, which is proof that the Wallet Instance owns the private keys associated with the Digital Credential. Therefore the Wallet Instance is entitled to request its Status Attestation.

+

Step 3 (Check for validity): The Issuer checks that the User's attributes are not updated by the Authentic Source or that the latter has not revoked them. The technical mechanisms for obtaining this information are out-of-scope of this technical implementation profile.

+

Step 4 (Status Attestation Creation): The Issuer creates the corresponding Status Attestation. A non-normative example of a Status Attestation is given below.

+
{
+    "alg": "ES256",
+    "typ": "status-attestation+jwt,
+    "kid": $ISSUER-JWKID
+}
+.
+{
+    "iss": "https://pid-provider.example.org",
+    "iat": 1504699136,
+    "exp": 1504700136,
+    "credential_hash": $CREDENTIAL-HASH,
+    "credential_hash_alg": "sha-256",
+    "cnf": {
+        "jwk": $CREDENTIAL-CNF-JWK
+        }
+}
+
+
+

Step 4 (Status Attestation Response): The Issuer then returns the Status Attestation to the Wallet Instance, as in the following non-normative example.

+
HTTP/1.1 201 Created
+Content-Type: application/json
+
+{
+    "status_attestation": "eyJhbGciOiJFUzI1NiIsInR5cCI6IndhbGxldC1...",
+}
+
+
+
+

Status Attestation HTTP Request

+

The requests to the Credential status endpoint of the Issuers MUST be HTTP with method POST, using the same mandatory parameters as in the Table of Credential Request parameters. These MUST be encoded in application/x-www-form-urlencoded format.

+ +++++ + + + + + + + + + + + + +

Claim

Description

Reference

credential_pop

It MUST contain a signed JWT as a cryptographic proof of possession of the Digital Credential. See Section Credential Proof of Possession for more details.

[OAuth Status Attestation draft 01]

+

The typ value in the credential_pop JWT MUST be set to status-attestation+jwt

+

The Credential status endpoint MUST be provided by the Issuers within their Metadata. The Issuers MUST include in the issued Digital Credentials the object status with the JSON member status_attestation set to a JSON Object containing the credential_hash_alg claim. It MUST contain the algorithm used for hashing the Digital Credential. Among the hash algorithms, the value sha-256 is RECOMMENDED .

+
+
+

Status Attestation HTTP Response

+

The Credential status endpoint MUST return a HTTP response with status code 201 Created if the Credential is valid at the time of the request. The responses MUST be encoded in application/json format. It MUST contain the following mandatory claims.

+ +++++ + + + + + + + + + + + + +

Claim

Description

Reference

status_attestation

It MUST contain the Status Attestation as a signed JWT.

[OAuth Status Attestation draft 01].

+

The following HTTP Status Codes MUST be supported:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Status Code

Body

Description

201 Created

Status Attestation response

The Status Attestation has been successfully created and it has been returned.

400 Bad Request

Error code and description

The issuer cannot fulfill the request because of invalid parameters.

404 Not Found

The Digital Credential can not be found by the Issuer.

500 Internal Server Error

The Issuer encountered an internal problem. (RFC 6749#section-5.2).

503 Service Unavailable

The Issuer is temporary unavailable. (RFC 6749#section-5.2).

+

For HTTP error responses that involve a body, the body MUST be encoded in application/json format and MUST contain the following parameters:

+
+
    +
  • error. The error code, as registerd in the table below.

  • +
  • error_description. Text in human-readable form providing further details to clarify the nature of the error encountered.

  • +
+
+

Error codes are meant to provide additional information about the failure so that the User can be informed and take the appropriate action. +The following Error Codes MUST be supported:

+ ++++ + + + + + + + + + + + + + + + + +

Error Code

Description

invalid_request

The request is not valid due to the lack or incorrectness of one or more parameters. (RFC 6749#section-5.2).

credential_revoked

The Digital Credential is revoked. The reason of revocation MUST be provided in the error_description field.

credential_updated

One or more attributes contained in the Digital Credential are changed. The error_description field MUST contain a list of updated attributes.

+

Below a non-normative example of an HTTP Response with an error.

+
HTTP/1.1 400 Bad Request
+Content-Type: application/json;charset=UTF-8
+
+{
+  "error": "invalid_request"
+  "error_description": "The signature of credential_pop JWT is not valid"
+}
+
+
+
+
+
+

Status Attestation Presentation to the Verifiers

+

During the presentation phase, a Verifier MAY request the Wallet Instance to provide a Non-Revocation Attestation along with the requested Credential. If a Verifier requests a Status Attestation for a requested Digital Credential, the Wallet Instance MUST provide the Status Attestations in the vp_token JSON array. If the Status Attestation is requested by the Verifier and the Wallet Instance is not able to provide it or it is expired or it is issued far back in time, the Verifier MAY decide to accept or reject the Credential according to its security policy.

+

Law-Enforcement Authorities or Third Parties authorized by national law, MAY require deferred non-revocation status verification but the definition of these protocols is currently out-of-scope for this technical implementation profile.

+
+
+
+

Credential Proof of Possession

+

The Credential Proof of Possession (credential_pop) MUST be a JWT that MUST contain the parameters (JOSE Header and claims) in the following table.

+ +++++ + + + + + + + + + + + + + + + + + + + + +

JOSE header

Description

Reference

typ

In case of revocation request it MUST be set to revocation-request+jwt. In case of Status Attestation request it MUST be set to status-attestation-request+jwt, according to [OAuth Status Attestation draft 01].

RFC 7516#section-4.1.1.

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section Cryptographic Algorithms and MUST NOT be set to none or any symmetric algorithm (MAC) identifier.

RFC 7516#section-4.1.1.

kid

Unique identifier of the jwk inside the cnf claim of the Credential to be revoked, as base64url-encoded JWK Thumbprint value.

RFC 7638#section_3.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

Thumbprint of the JWK in the cnf parameter of the Wallet Attestation.

RFC 9126 and RFC 7519.

aud

It MUST be set to the Issuer endpoint at which the JWT is used.

RFC 9126 and RFC 7519.

exp

UNIX Timestamp with the expiry time of the JWT.

RFC 9126 and RFC 7519.

iat

UNIX Timestamp with the time of JWT issuance.

RFC 9126 and RFC 7519.

jti

Unique identifier for the PoP proof JWT. The value SHOULD be set using a UUID v4 value according to [RFC 4122].

[RFC 7519. Section 4.1.7].

credential_hash

It MUST contain the hash value of a Digital Credential, derived by computing the base64url encoded hash of the Digital Credential.

[OAuth Status Attestation draft 01].

credential_hash_alg

It MUST contain the Algorithm used for hashing the Digital Credential. The value SHOULD be set to S256.

[OAuth Status Attestation draft 01].

+
+
+

Status Attestation

+

The Status Attestation MUST contain the following claims.

+ +++++ + + + + + + + + + + + + + + + + + + + + +

JOSE Header

Description

Reference

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms in Section Cryptographic Algorithms and MUST NOT be set to none or to a symmetric algorithm (MAC) identifier.

[OIDC4VCI. Draft 13], [RFC 7515], [RFC 7517].

typ

It MUST be set to status-attestation+jwt.

[RFC 7515], [RFC 7517], [OAuth Status Attestation draft 01]..

kid

Unique identifier of the Issuer jwk as base64url-encoded JWK Thumbprint value.

RFC 7638#section_3.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

It MUST be set to the identifier of the Issuer.

RFC 9126 and RFC 7519.

iat

UNIX Timestamp with the time of JWT issuance.

RFC 9126 and RFC 7519.

exp

UNIX Timestamp with the expiry time of the JWT.

RFC 9126 and RFC 7519.

credential_hash

Hash value of the Credential the Status Attestation is bound to.

[OAuth Status Attestation draft 01].

credential_hash_alg

The Algorithm used for hashing the Credential to which the Status Attestation is bound. The value SHOULD be set to S256.

[OAuth Status Attestation draft 01].

cnf

JSON object containing the proof-of-possession key materials. The cnf jwk value MUST match with the one provided within the related Credential.

[RFC7800, Section 3.1].

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/search.html b/rp-vp-kid/en/search.html new file mode 100644 index 000000000..1c97d2fa4 --- /dev/null +++ b/rp-vp-kid/en/search.html @@ -0,0 +1,1436 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Search + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + +
+ +
+ + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/searchindex.js b/rp-vp-kid/en/searchindex.js new file mode 100644 index 000000000..51d45c2dc --- /dev/null +++ b/rp-vp-kid/en/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["algorithms", "backup-restore", "contribute", "defined-terms", "index", "pid-eaa-data-model", "pid-eaa-issuance", "proximity-flow", "pseudonyms", "relying-party-solution", "remote-flow", "revocation-lists", "ssi-introduction", "standards", "trust", "wallet-attestation", "wallet-solution"], "filenames": ["algorithms.rst", "backup-restore.rst", "contribute.rst", "defined-terms.rst", "index.rst", "pid-eaa-data-model.rst", "pid-eaa-issuance.rst", "proximity-flow.rst", "pseudonyms.rst", "relying-party-solution.rst", "remote-flow.rst", "revocation-lists.rst", "ssi-introduction.rst", "standards.rst", "trust.rst", "wallet-attestation.rst", "wallet-solution.rst"], "titles": ["Cryptographic algorithms", "backup-restore.rst", "How to contribute", "Normative Language and Conventions", "The Italian EUDI Wallet implementation profile", "PID/(Q)EAA Data Model", "PID/(Q)EAA Issuance", "Proximity Flow", "pseudonyms.rst", "Relying Party Solution", "Remote Flow", "Credential Lifecycle", "Self Sovereign Identity", "Technical References", "The Infrastructure of Trust", "Wallet Attestation", "Wallet Solution"], "terms": {"tutti": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "gli": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "esempi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "contenuti": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "questa": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "documentazion": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "sono": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "da": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "intendersi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "come": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "non": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16], "normativi": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "exampl": [0, 1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "contain": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "document": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "meant": [0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16], "norm": [0, 1, 2, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "The": [0, 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 15, 16], "follow": [0, 2, 4, 5, 6, 7, 9, 10, 11, 12, 14, 15], "must": [0, 3, 5, 6, 7, 9, 10, 11, 14, 15, 16], "support": [0, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "alg": [0, 5, 6, 9, 10, 11, 14, 15, 16], "paramet": [0, 1, 4, 8, 9, 10, 11, 15, 16], "valu": [0, 1, 5, 6, 7, 8, 9, 10, 11, 14, 15, 16], "descript": [0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 14, 15], "oper": [0, 3, 4, 6, 9, 10, 14, 15], "refer": [0, 4, 5, 6, 7, 9, 11, 12, 14, 15], "es256": [0, 5, 6, 9, 10, 11, 14, 15, 16], "ellipt": [0, 7, 9, 15], "curv": [0, 5, 7, 9, 15], "digit": [0, 3, 4, 5, 6, 9, 10, 11, 12, 14, 15, 16], "signatur": [0, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 16], "ecdsa": [0, 9, 10], "us": [0, 3, 4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16], "one": [0, 3, 5, 6, 7, 9, 10, 11, 12, 14, 15], "enabl": [0, 3, 9, 10, 12, 14], "list": [0, 2, 3, 4, 5, 6, 9, 10, 11, 12, 14, 15, 16], "section": [0, 5, 6, 7, 9, 10, 11, 14, 15, 16], "below": [0, 2, 3, 4, 5, 6, 7, 9, 10, 11, 14, 15, 16], "sha256": [0, 15], "rfc": [0, 5, 6, 9, 10, 11, 13, 14, 15, 16], "7518": [0, 13], "sog": 0, "IS": 0, "etsi": [0, 5], "es384": [0, 6, 9, 10, 14, 15, 16], "sha384": 0, "es512": [0, 6, 16], "sha521": 0, "rsa": [0, 6, 9, 10], "oaep": [0, 9, 10], "256": [0, 5, 6, 7, 9, 10, 11, 14, 15, 16], "encrypt": [0, 5, 6, 7, 9, 10, 11, 13, 14, 15], "scheme": [0, 4, 6, 9, 10, 12], "optim": 0, "asymmetr": [0, 6, 15], "pad": 0, "hash": [0, 5, 6, 7, 9, 11, 15], "function": [0, 3, 4, 5, 7, 9, 15, 16], "mgf1": 0, "sha": [0, 5, 6, 7, 9, 10, 11], "mask": 0, "gener": [0, 3, 4, 5, 6, 7, 9, 10, 13, 15], "kei": [0, 1, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], "7516": [0, 6, 9, 10, 11, 13, 15], "a128cbc": [0, 9, 10], "hs256": [0, 9, 10], "ae": 0, "cipher": [0, 7, 9], "block": [0, 7, 9, 11], "chain": [0, 4, 5, 6, 9, 10, 15], "mode": [0, 7, 9, 10, 13], "128": [0, 6, 9, 10], "bit": [0, 6, 9, 10], "initi": [0, 2, 3, 4, 6, 7, 9, 11], "vector": 0, "plu": 0, "hmac": 0, "authent": [0, 3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "truncat": 0, "content": [0, 5, 6, 9, 10, 11, 15], "a256cbc": [0, 9, 10], "hs512": [0, 9, 10], "512": [0, 6], "famili": [0, 5, 6], "short": [0, 6, 7, 9, 14, 15, 16], "name": [0, 5, 6, 7, 9, 10, 14, 15, 16], "brainpool": 0, "brainpoolp256r1": 0, "brainpoolp384r1": 0, "brainpoolp512r1": 0, "5639": 0, "nist": [0, 3], "p": [0, 5, 6, 9, 10, 13, 14, 15, 16], "384": 0, "521": 0, "fip": 0, "186": 0, "4": [0, 5, 6, 7, 9, 10, 11, 14, 15], "iso": [0, 5, 7, 9, 10], "iec": [0, 5], "14888": 0, "3": [0, 5, 6, 7, 9, 10, 11, 14, 15, 16], "recommend": [0, 3, 5, 6, 9, 10, 11, 14, 15], "ps256": 0, "rsassa": 0, "appendix": [0, 6], "pss": 0, "probabilist": 0, "ps384": 0, "ps512": 0, "sha512": 0, "ecdh": 0, "es": 0, "diffi": 0, "hellman": 0, "ephemer": [0, 7, 9, 15], "static": [0, 4, 9, 10, 14], "agreement": [0, 7, 9], "concat": 0, "deriv": [0, 5, 6, 7, 9, 11, 14], "kdf": 0, "a128kw": 0, "cek": 0, "wrap": 0, "length": [0, 5, 6, 7, 9, 10], "a256kw": 0, "NOT": [0, 3, 5, 6, 9, 10, 11, 14, 15], "none": [0, 6, 9, 10, 11, 15], "rsa_1_5": 0, "rsae": 0, "pkcs1": 0, "v1_5": 0, "secur": [0, 3, 4, 6, 7, 11, 12, 13, 14, 15, 16], "vulner": 0, "default": [0, 9, 10, 14], "hs384": [0, 9, 10], "what": [1, 8, 12, 14], "useful": [1, 8], "todo": [1, 8], "req": [1, 8, 9, 10], "1": [1, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16], "2": [1, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15, 16], "tabl": [1, 5, 6, 7, 8, 9, 10, 11, 14, 15], "claim": [1, 3, 4, 6, 8, 9, 10, 11, 14, 15, 16], "IT": [2, 3, 4, 5, 6, 7, 9, 16], "wallet": [2, 3, 5, 6, 7, 9, 10, 12, 13], "project": [2, 4], "includ": [2, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "an": [2, 3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "open": [2, 16], "develop": [2, 4, 14], "process": [2, 3, 4, 5, 6, 9, 10, 11, 12, 14, 15], "approach": [2, 5, 12, 14, 15], "ensur": [2, 4, 5, 6, 9, 10, 11, 12, 14, 15, 16], "access": [2, 3, 4, 5, 9, 10, 11, 12, 14, 15, 16], "invit": 2, "interest": 2, "parti": [2, 3, 4, 5, 6, 11, 12, 15, 16], "particip": [2, 3, 4, 14], "consequ": 2, "stakehold": [2, 14], "nation": [2, 3, 4, 5, 6, 11, 12, 16], "intern": [2, 3, 9, 10, 11, 15, 16], "commun": [2, 4, 6, 7, 9, 10, 11], "member": [2, 4, 5, 6, 9, 10, 11, 12, 14], "onli": [2, 3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "encourag": 2, "also": [2, 3, 5, 6, 9, 10, 11, 12, 14, 15, 16], "heartili": 2, "welcom": 2, "refin": 2, "technic": [2, 3, 4, 6, 7, 9, 10, 11, 14, 15], "rule": [2, 3, 4, 5, 14], "sever": [2, 9, 10, 14, 15], "method": [2, 6, 7, 9, 10, 11, 15, 16], "avail": [2, 9, 10, 14, 15, 16], "github": 2, "issu": [2, 3, 5, 6, 9, 10, 11, 12, 14, 15, 16], "By": [2, 5, 16], "you": 2, "can": [2, 3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "seek": 2, "clarif": 2, "propos": 2, "enhanc": [2, 3, 4, 9, 10, 12, 14], "report": [2, 11, 14], "editori": 2, "typo": 2, "If": [2, 5, 6, 7, 9, 10, 11, 14, 15], "work": 2, "we": [2, 5], "draft": [2, 5, 6, 11, 14], "pull": 2, "request": [2, 4, 12, 14, 16], "link": [2, 6, 9, 10, 11, 15], "repres": [2, 5, 6, 7, 9, 10, 14, 15, 16], "activ": [2, 7, 9, 11, 12, 14, 16], "typic": [2, 6, 12], "alwai": [2, 3, 12, 14], "base": [2, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16], "discuss": [2, 6, 15], "onc": [2, 6, 9, 10, 15, 16], "facilit": [2, 14], "review": [2, 16], "chang": [2, 5, 9, 10, 11, 14], "befor": [2, 3, 6, 14], "thei": [2, 3, 9, 10, 11, 12, 14, 15], "merg": 2, "main": [2, 5, 6, 11, 12, 14, 15], "branch": 2, "version": [2, 5, 7, 9, 15, 16], "corrent": 2, "italia": 2, "slack": 2, "channel": [2, 7, 9, 11], "messag": [2, 6, 7, 9, 10, 11], "applic": [2, 3, 6, 9, 10, 11, 12, 13, 14, 15, 16], "design": [2, 3, 12, 14], "busi": 2, "connect": [2, 5, 6, 7, 9, 11, 13, 16], "peopl": [2, 12], "inform": [2, 3, 5, 7, 9, 10, 11, 12, 14, 15, 16], "need": [2, 6, 9, 10, 11, 12, 14, 15, 16], "from": [2, 3, 5, 6, 7, 9, 10, 11, 14, 15, 16], "public": [2, 3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "administr": [2, 5, 11, 12, 14], "technician": 2, "student": 2, "citizen": [2, 3, 5, 12], "ha": [2, 4, 5, 6, 7, 9, 10, 11, 14, 15, 16], "everyon": 2, "join": 2, "free": 2, "http": [2, 3, 4, 5, 7, 13, 14, 15, 16], "where": [2, 5, 6, 9, 10, 11, 12, 14, 15], "learn": 2, "about": [2, 4, 9, 10, 11, 12, 16], "partak": 2, "would": [2, 6, 12], "like": [2, 3, 14], "thank": [2, 14], "individu": [2, 12, 14], "comment": 2, "concern": [2, 4, 14], "idea": 2, "some": [2, 5, 6, 9, 10, 11, 14], "which": [2, 3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "substanti": [2, 3], "implement": [2, 3, 5, 6, 7, 9, 10, 11, 14, 15], "profil": [2, 3, 5, 6, 7, 9, 11, 13, 14, 15], "set": [2, 4, 5, 6, 7, 9, 10, 11, 14, 15, 16], "alen": 2, "horvat": 2, "amir": 2, "sharif": 2, "andrea": 2, "prosseda": 2, "emanuel": 2, "de": 2, "cupi": 2, "emiliano": 2, "vernini": 2, "francesco": 2, "grauso": 2, "marino": 2, "ventola": 2, "giada": 2, "sciarretta": 2, "giusepp": 2, "marco": 2, "klaa": 2, "wierenga": 2, "kristina": 2, "yasuda": [2, 13], "leif": 2, "johansson": 2, "lorenzo": 2, "cerini": 2, "mart": 2, "aarma": 2, "marta": 2, "sciunnach": 2, "michel": 2, "silletti": 2, "nicola": 2, "saitto": 2, "niel": 2, "van": 2, "dijk": 2, "oliv": 2, "terbu": [2, 5, 13], "paul": 2, "bastien": 2, "pasqual": 2, "rose": 2, "peter": 2, "altmann": 2, "riccardo": 2, "iaconelli": 2, "roland": 2, "hedberg": 2, "salvator": 2, "laiso": 2, "manfredi": 2, "stefano": 2, "alifuoco": 2, "takahiko": 2, "kawasaki": 2, "torsten": 2, "lodderstedt": [2, 13], "vladimir": 2, "duzhinov": 2, "anyon": 2, "been": [2, 6, 11, 15], "forgotten": 2, "pleas": [2, 4, 14, 16], "accept": [2, 6, 7, 9, 10, 11], "our": 2, "apolog": 2, "modif": [2, 14], "page": [2, 9, 10, 16], "via": [2, 5, 6, 7, 9, 14, 15], "com": [2, 9, 10, 15], "eudi": [2, 6, 7, 9, 10, 13, 16], "doc": [2, 6], "brief": 2, "offer": [2, 6, 9, 10, 15, 16], "dure": [2, 3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "event": 2, "period": [2, 9, 10, 11, 14, 15], "have": [2, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "opportun": 2, "again": [2, 9, 10], "make": [2, 5, 6, 14], "amend": 2, "soon": 2, "possibl": [2, 5, 7, 9, 10, 14], "word": [3, 13], "requir": [3, 4, 5, 6, 7, 9, 10, 13], "shall": [3, 5, 6, 7, 9, 11], "should": [3, 5, 6, 7, 9, 10, 11, 14, 15], "mai": [3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 16], "option": [3, 5, 7, 9, 10, 12], "interpret": 3, "describ": [3, 5, 6, 7, 9, 10, 11, 14, 15], "bcp": [3, 13], "14": [3, 6, 9, 10, 13, 14, 15], "rfc2119": 3, "rfc8174": [3, 13], "when": [3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "appear": 3, "capit": 3, "shown": [3, 6, 9, 10], "here": [3, 15, 16], "user": [3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "trust": [3, 4, 5, 6, 9, 10, 12, 15, 16], "servic": [3, 4, 5, 6, 11, 12, 14, 15, 16], "model": [3, 4, 6, 7, 9, 10, 12, 15, 16], "framework": [3, 4, 6, 9, 10, 13, 14, 16], "attribut": [3, 4, 5, 7, 9, 10, 11, 14, 16], "electron": [3, 4, 14, 16], "attest": [3, 4, 5, 6, 9, 10, 12], "provid": [3, 4, 5, 6, 7, 9, 10, 11, 12, 14, 15], "tsp": [3, 14], "person": [3, 5, 6, 9, 10, 11, 12, 14, 16], "identif": [3, 4, 5, 6, 9, 10, 11, 12, 14, 15, 16], "data": [3, 4, 6, 7, 9, 10, 11, 12, 13, 14, 15, 16], "pid": [3, 4, 9, 10, 11, 14, 15, 16], "revoc": [3, 4, 6, 9, 10, 14, 16], "qualifi": [3, 14, 16], "qtsp": [3, 14], "eaa": [3, 4, 9, 14, 15, 16], "eida": [3, 4, 5, 6, 7, 9, 12, 13, 14], "arf": [3, 4, 5, 6, 13, 14, 15], "definit": [3, 9, 10, 11, 12, 13, 14, 16], "further": [3, 4, 6, 7, 9, 11, 14, 15, 16], "insight": 3, "topic": [3, 15], "complement": [3, 14], "interact": [3, 6, 9, 10, 12, 14, 15, 16], "compon": [3, 4, 6, 7, 9, 10, 14], "accredit": [3, 14, 15], "bodi": [3, 6, 9, 10, 11, 14, 15], "entiti": [3, 4, 11, 15, 16], "feder": [3, 4, 6, 9, 10, 13, 15, 16], "author": [3, 4, 5, 11, 12, 13, 14, 15, 16], "respons": [3, 4, 13, 14, 15, 16], "manag": [3, 6, 11, 12, 14, 15, 16], "verif": [3, 6, 7, 9, 11, 12, 14, 15, 16], "certif": [3, 5, 11, 12, 14, 15], "ecosystem": [3, 4, 12, 14, 15, 16], "role": [3, 4, 11, 12, 16], "ident": [3, 4, 6, 9, 10, 11, 14, 16], "recogn": [3, 12], "state": [3, 4, 6, 9, 10, 12, 14], "identifi": [3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 16], "issuanc": [3, 4, 5, 9, 10, 11, 13, 14, 16], "credenti": [3, 4, 5, 7, 9, 10, 12, 13, 14, 15, 16], "sign": [3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "whose": [3, 9, 10, 15], "integr": [3, 5, 6, 12, 14, 15, 16], "cryptograph": [3, 4, 5, 6, 9, 10, 11, 12, 14, 15, 16], "verifi": [3, 4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16], "its": [3, 6, 7, 9, 10, 11, 14, 15, 16], "issuer": [3, 4, 5, 7, 9, 10, 11, 12, 14, 16], "It": [3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "known": [3, 4, 6, 7, 9, 10, 14, 15, 16], "A": [3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "govern": [3, 12, 14], "guidelin": [3, 4, 15], "administ": 3, "directli": [3, 6, 9, 10, 15], "through": [3, 5, 6, 7, 9, 10, 11, 14, 15], "intermediari": [3, 9, 10, 14], "statu": [3, 4, 5, 6, 7, 14, 15, 16], "elig": [3, 4], "evalu": [3, 4, 6, 9, 10, 15, 16], "perform": [3, 6, 7, 9, 10, 15, 16], "oversight": 3, "instanc": [3, 4, 5, 6, 7, 9, 10, 14], "solut": [3, 4, 6, 10, 14, 15], "instal": [3, 6, 15, 16], "mobil": [3, 4, 6, 7, 9, 10, 12, 15, 16], "devic": [3, 4, 6, 11, 12, 14, 15, 16], "control": [3, 5, 6, 12, 14, 16], "specif": [3, 5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "who": [3, 6, 11, 12, 14], "sole": 3, "owner": [3, 5, 12, 14], "fulli": 3, "autonom": [3, 14], "privat": [3, 5, 6, 7, 9, 10, 11, 14, 15], "conform": [3, 6], "prove": [3, 5, 12, 14], "compliac": 3, "hardwar": [3, 9, 10, 14, 15], "back": [3, 11, 15], "environ": [3, 9, 10, 15, 16], "creat": [3, 6, 7, 9, 10, 11, 15], "store": [3, 5, 6, 7, 9, 11, 12, 14, 15, 16], "wscd": [3, 15, 16], "associ": [3, 11, 14, 15, 16], "proof": [3, 4, 5, 6, 9, 10, 12, 13, 14, 15, 16], "differ": [3, 5, 6, 7, 9, 10, 11, 12, 14, 15], "wai": [3, 5, 6], "larg": [3, 6], "depend": [3, 5, 6, 9, 10, 11, 15, 16], "remot": [3, 4, 14, 15], "hsm": [3, 15], "extern": [3, 4, 14, 15], "smart": [3, 15], "card": [3, 15], "uicc": 3, "nativ": [3, 15], "io": [3, 15, 16], "enclav": [3, 15, 16], "android": [3, 15, 16], "keystor": [3, 15], "strongbox": [3, 15], "relat": [3, 5, 6, 7, 9, 10, 11, 14, 15, 16], "revok": [3, 6, 11, 12, 14, 15], "manufactur": [3, 15], "app": [3, 6, 7, 9, 15, 16], "well": [3, 6, 9, 10, 11, 14, 15, 16], "certifi": [3, 6, 14, 15, 16], "storag": [3, 6, 11, 14, 15], "within": [3, 5, 6, 7, 9, 10, 11, 14, 15, 16], "dedic": [3, 14], "s": [3, 4, 5, 7, 9, 10, 11, 12, 13, 14, 15, 16], "import": 3, "note": [3, 4, 6, 14], "terminolog": 3, "vari": [3, 14], "among": [3, 11, 14], "pair": [3, 5, 6, 7, 9, 15], "remain": [3, 6, 9, 10, 12, 14], "valid": [3, 4, 5, 6, 7, 9, 10, 11, 12, 14, 15], "entir": [3, 6, 9, 10, 14, 15, 16], "durat": 3, "life": [3, 11], "master": 3, "confin": 3, "os": 3, "domain": [3, 5, 11, 14], "arbitrari": 3, "payload": [3, 4, 5, 6, 9, 10, 11, 15], "Their": 3, "primari": [3, 6, 7, 9, 16], "uniqu": [3, 5, 6, 9, 10, 11, 14, 15, 16], "each": [3, 5, 6, 7, 9, 10, 11, 14, 15, 16], "tag": [3, 5, 15], "system": [3, 6, 12, 14, 15, 16], "util": [3, 5, 7, 9, 10, 15, 16], "gain": [3, 9, 10, 15], "oem": [3, 15], "your": 3, "confid": [3, 7, 9], "being": [3, 5, 6, 7, 9, 12, 15], "qeaa": [3, 16], "form": [3, 5, 6, 9, 10, 11, 12, 14, 15, 16], "possess": [3, 4, 5, 6, 9, 10, 12, 13, 14, 15, 16], "reli": [3, 4, 5, 6, 11, 12, 15, 16], "natur": [3, 5, 6, 11, 15, 16], "legal": [3, 11, 12, 14, 16], "submiss": [3, 9, 10], "mechan": [3, 4, 5, 9, 10, 11, 15, 16], "see": [3, 5, 6, 7, 9, 11, 14, 15], "complianc": [3, 5, 6, 9, 10, 14, 15, 16], "regulatori": [3, 14], "cannot": [3, 9, 10, 11, 14, 15], "repudi": [3, 4, 11], "over": [3, 5, 7, 9, 11, 12, 14, 16], "time": [3, 5, 6, 7, 9, 10, 11, 13, 14, 15, 16], "particular": [3, 6, 11, 14, 15], "layer": [3, 13], "architectur": [3, 4, 6, 13, 14, 16], "establish": [3, 6, 7, 9, 10, 12, 14, 16], "reliabl": [3, 5, 11, 14, 15, 16], "how": [3, 4, 5, 7, 9, 11, 14, 15], "maintain": [3, 9, 10, 12, 14, 15, 16], "outlin": [3, 5, 6, 7, 9, 10, 11, 14, 16], "procedur": [3, 11, 12, 14], "other": [3, 4, 5, 6, 9, 10, 11, 12, 14, 15, 16], "level": [3, 4, 7, 9, 10, 11, 12, 13, 15, 16], "exchang": [3, 6, 7, 9, 10, 11, 12, 13, 14, 16], "assur": [3, 9, 10, 13, 16], "degre": 3, "vet": 3, "present": [3, 4, 5, 6, 7, 9, 10, 12, 13, 14, 15, 16], "same": [3, 5, 6, 9, 10, 11, 14, 16], "whom": [3, 12], "wa": [3, 5, 6, 9, 10, 11, 15, 16], "holder": [3, 5, 11, 12, 15], "bind": [3, 6, 9, 10, 14, 15], "abil": [3, 12, 14, 15, 16], "legitim": [3, 5], "part": [3, 6, 7, 9, 10, 14, 15, 16], "third": [3, 11, 14, 15], "oid4vp": [3, 9, 10], "openid": [3, 5, 6, 9, 10, 13, 14, 15, 16], "vc": [3, 5, 6, 9, 10, 13, 14, 15], "vp": [3, 9, 10], "api": [3, 4, 6, 9, 10, 15, 16], "program": 3, "interfac": [3, 6, 11, 14, 16], "loa": [3, 6, 16], "aal": [3, 9, 10, 15], "csrc": 3, "gov": [3, 6, 7, 9, 10], "glossari": 3, "authenticator_assurance_level": 3, "european": [4, 12], "parliament": 4, "adopt": 4, "revis": 4, "regul": [4, 11, 12, 14, 16], "introduc": 4, "signific": [4, 12, 14], "innov": 4, "updat": [4, 5, 9, 10, 11, 14], "mark": [4, 5, 6, 9, 10, 14, 15], "pivot": 4, "advanc": [4, 12, 14], "eu": [4, 5, 9, 10, 14, 15, 16], "strategi": [4, 9, 10, 14], "aim": [4, 5], "interoper": [4, 6, 9, 10, 12, 13, 14], "usabl": [4, 15], "across": [4, 12], "For": [4, 5, 6, 7, 9, 10, 11, 14, 15, 16], "detail": [4, 5, 7, 11, 12, 14, 15, 16], "resourc": [4, 5, 6, 9, 10, 13, 14], "legisl": [4, 16], "offici": 4, "commiss": 4, "websit": [4, 14, 16], "itali": 4, "launch": [4, 15], "direct": 4, "full": [4, 5, 12, 16], "align": [4, 14], "complet": [4, 9, 10, 12, 16], "purpos": [4, 5, 9, 10, 11, 12, 16], "defin": [4, 5, 6, 7, 9, 10, 11, 14, 15, 16], "involv": [4, 6, 9, 10, 11, 12, 14, 15], "accord": [4, 5, 6, 7, 9, 10, 11, 14, 15, 16], "infrastructur": [4, 12], "realiabl": [4, 16], "mdl": [4, 5, 7, 9, 10], "cbor": [4, 6, 7, 9, 10, 11], "format": [4, 5, 6, 7, 9, 10, 11, 13, 14, 15, 16], "sd": [4, 6, 9, 10, 11, 13, 14, 15], "jwt": [4, 6, 9, 10, 11, 13, 14, 15, 16], "openid4vci": [4, 6, 13, 14], "openid4vp": [4, 6, 9, 10, 13, 14], "pseudonym": [4, 5], "siopv2": [4, 9, 10], "backup": 4, "restor": [4, 15], "self": [4, 5], "sovereign": 4, "ssi": 4, "languag": [4, 14], "convent": 4, "term": [4, 14, 16], "acronym": 4, "properti": [4, 5], "endpoint": [4, 11, 15], "configur": [4, 15, 16], "common": 4, "anchor": [4, 6, 16], "leav": 4, "intermedi": [4, 6, 12, 16], "metadata": [4, 5, 6, 9, 10, 11, 12, 15], "type": [4, 5, 6, 7, 9, 10, 11, 15, 16], "statement": [4, 6, 9, 10, 15, 16], "offlin": [4, 7, 9, 11], "long": [4, 6, 11], "live": [4, 15], "privaci": [4, 6, 9, 10, 11, 12, 15, 16], "remark": 4, "consider": 4, "decentr": 4, "lifecycl": 4, "transit": [4, 14], "return": [4, 5, 6, 7, 9, 10, 11, 14, 15], "deactiv": [4, 15], "header": [4, 5, 6, 9, 10, 11, 14, 15], "wallet_provid": [4, 14], "federation_ent": [4, 6, 9, 10, 14], "view": [4, 6, 16], "dynam": [4, 6, 14], "registr": [4, 6, 14], "q": [4, 9, 10, 14, 15, 16], "mdoc": [4, 6, 10, 11], "namespac": [4, 7, 9, 10], "object": [4, 6, 7, 11, 13, 14, 15], "high": [4, 7, 9, 10, 11, 13, 15, 16], "flow": [4, 14, 15], "push": [4, 9, 10], "par": 4, "token": [4, 9, 10, 13, 15, 16], "uri": [4, 6, 13], "post": [4, 6, 11, 14, 15], "cross": [4, 14], "check": [4, 6, 7, 11, 14, 15], "redirect": [4, 6], "error": [4, 6, 11, 15], "proxim": 4, "engag": [4, 16], "session": [4, 6, 10], "termin": [4, 10, 15], "case": [4, 5, 6, 9, 10, 14, 15], "rst": 4, "librari": [4, 15], "code": [4, 5, 6, 7, 9, 10, 11, 14, 15], "snippet": 4, "algorithm": [4, 5, 6, 9, 10, 11, 13, 14, 15, 16], "contribut": 4, "acknowledg": 4, "law": [5, 11], "scope": [5, 6, 9, 10, 11, 14, 15], "allow": [5, 6, 7, 9, 10, 11, 12, 14, 15, 16], "protect": [5, 6, 9, 10, 14], "italian": [5, 6, 14], "ones": 5, "current": [5, 6, 9, 10, 11, 13, 14, 15], "first": [5, 6, 9, 10, 15], "date": [5, 6, 11, 13, 14, 15], "birth": [5, 6], "taxpay": 5, "number": [5, 6, 9, 10, 11, 14, 15, 16], "select": [5, 6, 9, 10, 15, 16], "disclosur": [5, 9, 10, 14], "specifi": [5, 6, 7, 9, 10, 15, 16], "02": [5, 7, 9], "_sd_alg": 5, "5": [5, 6, 7, 9, 10, 11, 14, 15], "them": [5, 9, 10, 11, 12, 14, 15, 16], "disclos": [5, 6, 7, 9, 12, 14], "indic": [5, 6, 7, 9, 10, 13, 14], "digest": 5, "salt": [5, 7, 9], "omit": [5, 6], "instead": [5, 12, 14], "respect": [5, 6, 14, 16], "decoi": 5, "arrai": [5, 6, 7, 9, 10, 11, 14, 15, 16], "new": [5, 6, 7, 9, 10, 11, 12, 14, 15], "_sd": [5, 9, 10], "map": [5, 6, 9, 10, 14], "calcul": [5, 6, 7, 9], "random": [5, 6, 7, 9, 10, 15], "sent": [5, 6, 9, 10], "togeth": [5, 6, 7, 9, 11], "combin": [5, 14], "order": [5, 9, 10, 15], "seri": 5, "base64url": [5, 6, 11, 15], "encod": [5, 6, 7, 9, 10, 11, 15], "separ": [5, 6, 9, 10], "next": 5, "singl": [5, 6, 14, 15], "tild": 5, "charact": [5, 6], "n": [5, 6, 9, 10, 13], "more": [5, 6, 7, 9, 10, 11, 14, 16], "jose": [5, 6, 11, 15], "mandatori": [5, 6, 7, 9, 11], "typ": [5, 6, 9, 10, 11, 14, 15, 16], "latest": [5, 14], "rfc7515": [5, 6, 13], "9": [5, 6, 7, 9, 10, 14, 15], "kid": [5, 6, 9, 10, 11, 14, 15, 16], "8": [5, 6, 7, 9, 10, 11, 14, 15], "trust_chain": [5, 9, 10, 14, 15], "json": [5, 6, 9, 10, 11, 13, 14, 15, 16], "oidc": [5, 6, 9, 10, 12, 13, 14, 15], "fed": [5, 9, 10, 13, 14, 15], "whether": [5, 6, 9, 10, 14, 15], "nsd": 5, "iss": [5, 6, 9, 10, 11, 14, 15, 16], "url": [5, 6, 9, 10, 14, 15, 16], "string": [5, 6, 7, 9, 10, 14, 15, 16], "rfc7519": [5, 6, 13], "sub": [5, 6, 7, 9, 10, 14, 15, 16], "subject": [5, 6, 9, 10, 14, 15, 16], "opaqu": [5, 9, 10], "correspond": [5, 6, 7, 9, 10, 11, 14, 15], "ani": [5, 6, 7, 9, 10, 11, 12, 14, 15], "anagraph": 5, "addition": [5, 9, 10, 15], "two": [5, 6, 7, 9, 10, 11, 15], "iat": [5, 6, 9, 10, 11, 14, 15, 16], "unix": [5, 6, 9, 10, 11, 14, 15, 16], "timestamp": [5, 6, 9, 10, 11, 13, 14, 15, 16], "numericd": [5, 6, 14], "7519": [5, 6, 9, 10, 11, 13, 14, 15], "6": [5, 6, 7, 9, 10, 14, 15], "exp": [5, 6, 9, 10, 11, 14, 15, 16], "expiri": [5, 6, 11, 14, 15], "read": 5, "status_attest": [5, 11], "credential_hash_alg": [5, 11], "bound": [5, 6, 11, 14, 15], "oauth": [5, 6, 9, 10, 11, 13, 15, 16], "01": [5, 7, 9, 11], "cnf": [5, 6, 9, 10, 11, 15], "materi": [5, 6, 7, 9, 11], "confirm": [5, 6, 15], "declar": 5, "recipi": 5, "rfc7800": [5, 11, 13], "vct": 5, "obtain": [5, 6, 7, 9, 10, 11, 14, 15, 16], "personidentificationdata": [5, 6], "addit": [5, 6, 11, 14, 15], "ad": [5, 6, 9, 10], "given_nam": [5, 6, 7, 9, 10, 14], "core": [5, 6, 14], "0": [5, 6, 7, 9, 10, 13, 14, 15, 16], "family_nam": [5, 6, 7, 9, 10, 14], "birth_dat": [5, 6, 7, 9], "unique_id": [5, 6, 9, 10], "id": [5, 6, 9, 10, 14, 16], "anpr": 5, "given": [5, 6, 9, 10, 11, 14, 15], "regist": [5, 6, 15], "resid": [5, 9, 10, 11], "popul": [5, 9, 10], "tax_id_cod": [5, 6], "tax": [5, 6], "en": [5, 6], "319": 5, "412": 5, "tinit": 5, "italiantaxidentificationnumb": 5, "In": [5, 6, 7, 9, 10, 11, 12, 14, 15], "org": [5, 6, 7, 9, 10, 11, 14, 15, 16], "nzblsxh8udccd7nowxfzafhkxzsrgc9x": 5, "1683000000": 5, "1883000000": 5, "xxxxxxxx": 5, "xxxx": 5, "xxxxxxxxxxxx": 5, "mario": 5, "rossi": 5, "1980": 5, "10": [5, 6, 7, 9, 10, 13, 14, 15], "xxxxxxxxxxxxxxxx": 5, "verson": 5, "db67gl7ck3tfiiaf7n6_7shvqk0mdymeqcogglkuaaw": 5, "nehrderpynlhy3m5wldwtwz2auhm": 5, "eyjhbgcioijsuzi1niisimtpzci6": 5, "ikjydmzybg5oqu11sfiwn2fqvw1b": 5, "7wg4nt6k26_r3975zcwnvwgoha7b988_3": 5, "vjzbzf6yc": 5, "noxvzjujg667ibdedwmr6tz46x": 5, "jchkwivxmafv43yc": 5, "tk2rgupyoxzcx0vv5hbn9u5m2mhlwbt41qgwllxcnu8": 5, "uhchpgtnf2bj1fvafbby1rnf7wxkxelfj5a4vsj2fo4": 5, "q6tqnxau97tu": 5, "mqudg0fsamlgzdsumumk6a2s3bcsc0": 5, "wyfxvqq9bospt7tn4shoi4e48p19ava1ktw5zf0": 5, "fc": 5, "pidprovid": 5, "jwk": [5, 6, 9, 10, 11, 13, 14, 15, 16], "kty": [5, 6, 7, 9, 10, 14, 15, 16], "ec": [5, 6, 7, 9, 10, 14, 15, 16], "crv": [5, 6, 7, 9, 10, 14, 15, 16], "x": [5, 6, 7, 9, 10, 11, 14, 15, 16], "tcaer19zvu3ohf4j4w4vfsvohip1ilildls7vcegemc": 5, "y": [5, 6, 7, 9, 10, 13, 14, 15, 16], "zxjiwwbzmqghvwkvq4hbsiirsvfuecce6t4jt9f2hzq": 5, "wyi1n212ewnuadv5wknys0xanxhuzlv3iiwgimlhdciside2odmwmdawmdbd": 5, "57mvycth5yzcrklz5xnfuw": 5, "wyjrdwnyqm1sb19otwfjrky1odvsemfriiwginvuaxf1zv9pzcisicj4ehh4": 5, "ehh4ec14ehh4lxh4ehgtehh4ec14ehh4ehh4ehh4ehgixq": 5, "kucrbmlo_hmaiff585rzaq": 5, "wyjove5sb09pdvzwunrgnknfenrkovp3iiwgimdpdmvux25hbwuilcaitwfi": 5, "aw8ixq": 5, "ntnrooiuvvrtf6ceztd9zw": 5, "wyjgrfntugdnekdcvxdrteheu0u2d1friiwgimzhbwlsev9uyw1liiwgiljv": 5, "c3npil0": 5, "fdsspggzgbuwqlhdse6wqq": 5, "wyjlwjhlnxdwrxredmixemltuee0rhpbiiwgimjpcnrox2rhdguilcaimtk4": 5, "mc0wms0xmcjd": 5, "kz8e5wvetdvb1zispa4dza": 5, "wyjwwjvnunlpehbwv1p1sexvsi15aljniiwginrhef9pzf9jb2rliiwgilrj": 5, "tklulvhywfhywfhywfhywfhywfgixq": 5, "pz5mryoxpvwzuhloj": 5, "yjrg": 5, "eyjhbgcioiairvmyntyilcaidhlwijogimv4yw1wbgurc2qtand0in0": 5, "eyjfc2qioibb": 5, "ijdxrzruvdzlmjzfujm5nzv6y3duvndnb0hbn2i5odhfmy12snpiwmy2wwmilcaitk94": 5, "vnpqvupnnjy3aujkzur3bxi2dfo0nlgtamnos3djvnhnqwz2ndn5yyisicjuszjsz3vq": 5, "ww9yekn4mhz2nwhitjl1nu0ybuhsv0j0ndfxr1dstfhdtnu4iiwgilviq2hwr3rorjji": 5, "ajfgdkfmqmj5mxjuzjdxwgt4zwxgsjvhnhztajjgtzqilcaictzucw54yxu5n3r1lu1x": 5, "vurnmgztqw1mr1pku3vnvu1rnmeyczniy3ndmcisicj3ewz4vnfxoujvc1bun3ronfni": 5, "t0k0rtq4ude5yvzbmwt0vzvazjbflwzjil0sicjlehaioiaxodgzmdawmdawlcaiaxnz": 5, "ijogimh0dhbzoi8vcglkchjvdmlkzxiuzxhhbxbszs5vcmcilcaic3viijogik56ykxz": 5, "wgg4durdy2q3bm9xwezaqwzia3hac1jhqzlycyisicjzdgf0dxmioib7inn0yxr1c19h": 5, "dhrlc3rhdglvbii6ihsiy3jlzgvudglhbf9oyxnox2fszyi6icjzagetmju2in19lcai": 5, "dmn0ijogilblcnnvbklkzw50awzpy2f0aw9urgf0ysisicjfc2rfywxnijoginnoys0i": 5, "ntyilcaiy25mijogeyjqd2sioib7imt0esi6icjfqyisicjjcnyioiaiuc0yntyilcai": 5, "eci6icjuq0ffuje5wnz1m09irjrqnfc0dmztvm9isvaxsuxpbersczd2q2vhzw1jiiwg": 5, "inkioiaiwnhqavdxylpnuudivldlvle0agjtswlyc1zmdwvjq0u2ddrqvdlgmkhausj9": 5, "fx0": 5, "a36ovweqpcppkyhx75dg": 5, "hiib7zqklfmmcaixlpocmel1cxlx": 5, "ntzbfn_kdn0nlj": 5, "ymlay4xseetmic_scltxdg": 5, "wyi1n212ewnuadv5wknys0xanxhuzlv3iiwgimlhdcisi": 5, "de2odmwmdawmdbd": 5, "wyjrdwnyqm1sb19otwfjrky1odvsemfriiwginvuaxf1zv9pzci": 5, "icj4ehh4ehh4ec14ehh4lxh4ehgtehh4ec14ehh4ehh4ehh4ehgixq": 5, "wyjove5sb09pd": 5, "vzwunrgnknfenrkovp3iiwgimdpdmvux25hbwuilcaitwfyaw8ixq": 5, "wyjgrfntugdnek": 5, "dcvxdrteheu0u2d1friiwgimzhbwlsev9uyw1liiwgiljvc3npil0": 5, "wyjlwjhlnxdwrx": 5, "redmixemltuee0rhpbiiwgimjpcnrox2rhdguilcaimtk4mc0wms0xmcjd": 5, "wyjwwjvnu": 5, "nlpehbwv1p1sexvsi15aljniiwginrhef9pzf9jb2rliiwgilrjtklulvhywfhywfhyw": 5, "fhywfhywfgixq": 5, "disabilitycard": 5, "document_numb": [5, 7, 9], "xxxxxxxxxx": 5, "expiry_d": [5, 7, 9], "2024": [5, 7, 9], "constant_attendance_allow": 5, "true": [5, 6, 7, 9, 10], "previou": [5, 6, 9, 10, 11, 15], "decod": [5, 6, 9, 10, 11], "both": [5, 7, 9, 10, 11, 12, 14, 15, 16], "d126a6a856f7724560484fa9dc59d195": 5, "lla7mch": 5, "ywwynzffwzsjbggie096fn8d60a": 5, "ml3sgo": 5, "afrjarpztmanxyu5iiwpifoaxjcnk": 5, "_h1ejt7mymcgm": 5, "i9xhlephyv8om35l3nf1mkqfpwud7ofpramsasx0": 5, "5g": 5, "rhpkitz7bggpjnwx2sgvh_ov9vhrjz9hx_inxwbbz6o": 5, "wyjrdwnyqm1sb19otwfjrky1odvsemfriiwgimrvy3vtzw50x251bwjlcii": 5, "icjywfhywfhywfhyil0": 5, "wyjwwjvnunlpehbwv1p1sexvsi15aljniiwgimv4cglyev9kyxrliiwgijiw": 5, "mjqtmdetmdeixq": 5, "wyjqdfz1s0nwbjdivgnickfnx3nlvwjriiwginrhef9pzf9jb2rliiwgilrj": 5, "jtvukcpn7btchrag_seubq": 5, "wyjxrgtknkpztmhernzmudrzmwhrzhlbiiwgimnvbnn0yw50x2f0dgvuzgfu": 5, "y2vfywxsb3dhbmnliiwgdhj1zv0": 5, "wdkd6jsnhdfvlp4s1hqdya": 5, "ii1mtee3tunolvlxv1loekzmd1pzskjhr2lfmdk2zk44zdywys1tbdnzz28ilcain1dh": 5, "ng5unksynl9smzk3nxpjd25wd2dvsee3yjk4of8zlxzkemjazjzzyyisicjbrljkyvjq": 5, "wlrnyu54wxu1sulxuglmt0fysknusy1fadflsnq3txlty2dniiwgilrlmljndvbzb1h6": 5, "q3gwdny1agjooxu1ttjtsgxxqnq0mxfhv2xmwenodtgilcaivuhdahbhde5gmmjqmuz2": 5, "qwzcynkxcm5mn1dya3hlbezknwe0dlnqmkzpncisicjpovhitgvqshlwoe9nmzvsm25m": 5, "mu1lcwzwv3ven09gcfjhbvnbc1gwltvniiwginjougtjdho3qkdhcgpuv1gyu0dwsf9p": 5, "vjlwafjqejlief9jtlh3qmj6nm8ilcaid3lmefzxctlcb3nqvdd0tjrtse9jneu0ofax": 5, "owfwqtfrdfc1wmywrs1myyjdlcaizxhwijogmtg4mzawmdawmcwgimlzcyi6icjodhrw": 5, "czovl2lzc3vlci5legftcgxllm9yzyisicjzdwiioiaitnpithnyadh1renjzddub1di": 5, "rlpbzkhrefpzukddovhziiwginn0yxr1cyi6ihsic3rhdhvzx2f0dgvzdgf0aw9uijog": 5, "eyjjcmvkzw50awfsx2hhc2hfywxnijoginnoys0yntyifx0sicj2y3qioiairglzywjp": 5, "bgl0eunhcmqilcaix3nkx2fszyi6icjzagetmju2iiwgimnuzii6ihsiandrijogeyjr": 5, "dhkioiairumilcaiy3j2ijogilatmju2iiwgingioiaivenbrvixovp2dtnpsey0ajrx": 5, "nhzmu1zvselqmulmawxebhm3dknlr2vtyyisicj5ijogilp4amlxv2jatvfhsfzxs1zr": 5, "nghiu0lpcnnwznvly0nfnnq0alq5rjjiwleifx19": 5, "1koe6igfxgbb_jtaluhm_bgjmbi": 5, "j6b63rm_wjaowpobsipskjy7hbhd2a83eusi8jqbskvhjs3wcr0kd9ppzrw": 5, "wyi1n212": 5, "ewnuadv5wknys0xanxhuzlv3iiwgimlhdciside2odmwmdawmdbd": 5, "wyjrdwnyqm1sb19": 5, "otwfjrky1odvsemfriiwgimrvy3vtzw50x251bwjlciisicjywfhywfhywfhyil0": 5, "wyj": 5, "ove5sb09pdvzwunrgnknfenrkovp3iiwgimdpdmvux25hbwuilcaitwfyaw8ixq": 5, "wyjg": 5, "rfntugdnekdcvxdrteheu0u2d1friiwgimzhbwlsev9uyw1liiwgiljvc3npil0": 5, "wyjl": 5, "wjhlnxdwrxredmixemltuee0rhpbiiwgimjpcnrox2rhdguilcaimtk4mc0wms0xmcjd": 5, "wyjwwjvnunlpehbwv1p1sexvsi15aljniiwgimv4cglyev9kyxrliiwgijiwmjqtmd": 5, "tmdeixq": 5, "wyjxrgtknkpztmhernzmudrzmwhrzhlbiiwgi": 5, "mnvbnn0yw50x2f0dgvuzgfuy2vfywxsb3dhbmnliiwgdhj1zv0": 5, "18013": [5, 7, 9, 10], "standard": [5, 9, 10, 14, 15, 16], "born": 5, "drive": 5, "licens": [5, 11], "element": [5, 7, 9, 12, 15], "8949": 5, "concis": 5, "binari": 5, "represent": [5, 14], "europa": [5, 9, 10, 14], "eudiw": [5, 6, 9, 10, 14, 15], "revers": 5, "consist": [5, 6, 16], "while": [5, 9, 10, 12, 14, 15], "domest": [5, 7, 9], "tstr": [5, 7, 9], "text": [5, 6, 9, 10, 11, 15], "structur": [5, 7, 9, 10, 15, 16], "track": [5, 11, 15], "backward": 5, "compat": [5, 14, 16], "understand": 5, "evolv": [5, 14], "uint": [5, 7, 9], "unsign": 5, "int": 5, "mean": [5, 6, 11, 14], "ok": [5, 6, 9, 10, 15], "normal": 5, "bstr": [5, 7, 9], "byte": [5, 7, 9], "collect": [5, 9, 10, 14], "doctyp": [5, 6, 7, 9, 10], "issuersign": [5, 7, 9], "24": [5, 7, 9, 10, 11, 14, 15], "major": 5, "howev": [5, 6, 9, 10], "issuerauth": [5, 7, 9], "mso": [5, 11], "cose": 5, "sign1": 5, "abov": [5, 6, 7, 9, 12, 14, 15], "devicesign": [5, 7, 9], "phase": [5, 6, 7, 9, 11, 12, 14, 15], "deviceauth": [5, 7, 9], "either": [5, 6, 9, 10, 14, 15], "devicesignatur": [5, 7, 9], "devicemac": 5, "empti": [5, 7, 9], "latter": [5, 6, 11], "issuersigneditembyt": [5, 7, 9], "bitsr": 5, "diagnost": [5, 7, 9], "digestid": [5, 7, 9], "integ": [5, 6], "valuedigest": [5, 7, 9], "issuersigneditem": [5, 7, 9], "minimum": [5, 6, 7, 9, 10, 11, 15], "16": [5, 6, 7, 9, 10, 14], "elementidentifi": [5, 7, 9], "elementvalu": [5, 7, 9], "issue_d": [5, 7, 9], "cbortag": 5, "1004": [5, 7, 9], "expir": [5, 6, 9, 10, 11, 14, 15, 16], "issuing_author": [5, 7, 9], "issuing_countri": [5, 7, 9], "alpha": 5, "countri": 5, "3166": 5, "field": [5, 6, 7, 9, 10, 11, 12, 13], "9052": 5, "unprotect": 5, "7": [5, 6, 7, 9, 10, 11, 14, 15], "rfc8152": 5, "x5chain": 5, "label": [5, 9, 10], "33": [5, 7, 9], "9360": 5, "carri": [5, 6, 9, 10, 12, 14], "referenc": [5, 6, 9, 10], "509": [5, 14], "abl": [5, 6, 11, 14, 15], "without": [5, 6, 11, 12, 14, 15], "invalid": [5, 6, 7, 9, 10, 11, 14, 15], "mobilesecurityobject": 5, "mobilesecurityobjectbyt": 5, "validityinfo": [5, 7, 9], "datetim": [5, 11, 16], "validfrom": [5, 7, 9], "validuntil": [5, 7, 9], "digestalgorithm": [5, 7, 9], "group": 5, "devicekeyinfo": [5, 7, 9], "devicekei": [5, 7, 9], "keyauthor": 5, "keyinfo": 5, "devicesigneditem": 5, "af": 5, "a366737461747573006776657273696f6e63312e3069646f63756d656e747381a267646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316c6973737565725369676e6564a26a697373756572417574688443a10126a1182159021930820215308201bca003020102021404ad06a30c1a6dc6e93be0e2e8f78dcafa7907c2300a06082a8648ce3d040302305b310b3009060355040613025a45312e302c060355040a0c25465053204d6f62696c69747920616e64205472616e73706f7274206f66205a65746f706961311c301a06035504030c1349414341205a65746573436f6e666964656e73301e170d3231303932393033333034355a170d3232313130333033333034345a3050311a301806035504030c114453205a65746573436f6e666964656e7331253023060355040a0c1c5a65746f70696120436974792044657074206f662054726166666963310b3009060355040613025a453059301306072a8648ce3d020106082a8648ce3d030107034200047c5545e9a0b15f4ff3ce5015121e8ad3257c28d541c1cd0d604fc9d1e352ccc38adef5f7902d44b7a6fc1f99f06eedf7b0018fd9da716aec2f1ffac173356c7da3693067301f0603551d23041830168014bba2a53201700d3c97542ef42889556d15b7ac4630150603551d250101ff040b3009060728818c5d050102301d0603551d0e04160414ce5fd758a8e88563e625cf056bfe9f692f4296fd300e0603551d0f0101ff040403020780300a06082a8648ce3d0403020347003044022012b06a3813ffec5679f3b8cddb51eaa4b95b0cbb1786b09405e2000e9c46618c02202c1f778ad252285ed05d9b55469f1cb78d773671f30fe7ab815371942328317c59032ad818590325a667646f6354797065781865752e6575726f70612e65632e65756469772e7069642e316776657273696f6e63312e306c76616c6964697479496e666fa3667369676e6564c074323032332d30322d32325430363a32333a35365a6976616c696446726f6dc074323032332d30322d32325430363a32333a35365a6a76616c6964556e74696cc074323032342d30322d32325430303a30303a30305a6c76616c756544696765737473a2781865752e6575726f70612e65632e65756469772e7069642e31ac015820a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a025820cd372fb85148700fa88095e3492d3f9f5beb43e555e5ff26d95f5a6adc36f8e6035820e67e72111b363d80c8124d28193926000980e1211c7986cacbd26aacc5528d48045820f7d062d662826ed95869851db06bb539b402047baee53a00e0aa35bfbe98265d0658202a132dbfe4784627b86aa3807cd19cfeff487aab3dd7a60d0ab119a72e736936075820bdca9e8dbca354e824e67bfe1533fa4a238b9ea832f23fb4271ebeb3a5a8f7200858202c0eaec2f05b6c7fe7982683e3773b5d8d7a01e33d04dfcb162add8bd99bee9a095820bfe220d85657ccec3c67e7db1df747e9148a152334bb6d4b65b273279bcc36ec0a582018e38144f5044301d6a0b4ec9d5f98d4cd950e6ea2c29b849cbd457da29b6ad30b58203c71d2f0efa09d9e3fbbdffd29204f6b292c9f79570aef72dd86c91f7a3aa5c50c582065743d58d89d45e52044758f546034fd13a4f994bc270cdfa7844f74eb3f4b6e0d5820b4a8eb5d523bffa17b41bda12ddc7da32ae1e5f7ff3dcc394a35401f16919bbf781b65752e6575726f70612e65632e65756469772e7069642e69742e31a10e58209d6c11644651126c94acdaf0803e86d4c71d15d3b2712a14295416734efd514d6d6465766963654b6579496e666fa1696465766963654b6579a401022001215820ba01aea44eee1e338eb2f04e279dbd51b34655783ee185150838c9a7a7c4db7122582025ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96f646967657374416c676f726974686d675348412d32353658400813c28fd62f2602cbc14724e5865733c44a0fca589b55c085ec9d5c725d6cce25ba0044439a3871a7b975a0994a85e79b705a9ac263b3fe899b0a93412ee8c96a6e616d65537061636573a2781865752e6575726f70612e65632e65756469772e7069642e3188d818586da4686469676573744944016672616e646f6d5820156df9227ad341eaa61aabd301106fd21bdc18820e01dfc16bcf5fecc447111b71656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d30322d3232d818586fa4686469676573744944026672616e646f6d5820a3a1f13f05544d03a5b50b5fdb78465808393bcf3b7953a345fe28f820c7be0d71656c656d656e744964656e7469666965726d69737375616e63655f646174656c656c656d656e7456616c7565d903ec6a323032332d30322d3232d8185866a4686469676573744944036672616e646f6d5820852591f90f2c9ded57a03632e2c1322ab52a082a431e71a4149a6830c8f1ad0c71656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ca4686469676573744944046672616e646f6d5820d1d587b3512acce15c4f6b20944ceb002a464e4a158389788563408873c3fce571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c7565764d696e69737465726f2064656c6c27496e7465726e6fd8185864a4686469676573744944056672616e646f6d582094fdd7609c0e73dc8589b5cab11e1d9058cf8bff8a336da5f81fcba055396a0f71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c7565654d6172696fd8185865a4686469676573744944066672616e646f6d5820660c0a7bf79e0e0261ca1547a4294fb808aa70738f424b13ab1b9440b566ae1371656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756565526f737369d818586ba4686469676573744944076672616e646f6d5820315c53491286488fa07f5c2ce67135ef5c9959c3469c99a14e9b6dc924f9eba571656c656d656e744964656e746966696572696269727468646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3132d818587da4686469676573744944086672616e646f6d5820764ef39c9d01f3aa6a87f441603cfe853fba3cee3bc2c168bcc9e96271d6e06371656c656d656e744964656e74696669657269756e697175655f69646c656c656d656e7456616c7565781e78787878787878782d7878782d787878782d787878787878787878787878781b65752e6575726f70612e65632e65756469772e7069642e69742e3181d8185877a46864696765737449440d6672616e646f6d5820717df3f583b1484366c33a1f869f2b5d201d466a8b589c79ab1a2d85e595432571656c656d656e744964656e7469666965726d7461785f69645f6e756d6265726c656c656d656e7456616c75657554494e49542d585858585858585858585858585858": 5, "notat": [5, 7, 9, 13], "h": [5, 7, 9, 13], "30820215308201bca003020102021404ad30c": 5, "x_509": 5, "2023": [5, 7, 9, 13], "22t06": 5, "23": [5, 7, 9, 10, 14], "56z": 5, "22t00": 5, "00": 5, "00z": 5, "0f1571a97ffb799cc8fcdf2ba4fc2909929": 5, "0cdfe077400432c055a2b69596c90": 5, "e2382149255ae8e955af9b8984395": 5, "bbc77e6cca981a3ad0c3e544edf86": 5, "bb6e6c68d1b4b4ec5a2ae9206f5t4": 5, "f8a5966e6dac9970e0334d8f75e25": 5, "defdf1aa746718016ef1b94bfe5r6": 5, "f9ee4d36f67dbd75e23311ac1c29": 5, "ec2": [5, 7, 9], "elipt": 5, "coordin": [5, 7, 9], "p256": [5, 7, 9], "b820963964e53af064686dd9218303494a": 5, "coordiant": 5, "0a6da0af437e2943f1836f31c678d89298e9": 5, "ccordiant": 5, "1ad0d6a7313efdc38fcd765852fa2bd43debf48bf5a580d": 5, "e0b70bcefbd43686f345c9ed429343aa": 5, "22": [5, 7, 9, 10], "ae84834f389ee69888665b90a3e4fcc": 5, "960cb15a2ea9b68e5233ce902807aa95": 5, "9d3774bd5994ccfed248674b32a4f76a": 5, "ministero": [5, 6], "dell": [5, 6], "interno": [5, 6], "eb12193dc66c6174530cdc29b274381f": 5, "db143143538f3c8d41dc024f9cb25c9d": 5, "6059ff1ce27b4997b4ade1de7b01dc60": 5, "1956": [5, 7, 9], "12": [5, 6, 7, 9, 10, 14, 15], "53c15c57b3b076e788795829190220b4": 5, "xxx": 5, "11aa7273a2d2daa973f5951f0c34c2fba": 5, "tax_id_numb": 5, "xxxxxxxxxxxxxxx": 5, "relev": [6, 7, 9, 12, 14, 15, 16], "releas": [6, 9, 10, 12], "genuin": [6, 15], "product": [6, 16], "own": [6, 7, 9, 11, 12, 14, 15], "compliant": [6, 7, 9, 10, 15], "assess": [6, 14, 15], "cab": 6, "graphic": 6, "compos": [6, 9, 10, 15], "oidc4vci": [6, 11], "13": [6, 7, 9, 10, 11, 14, 15], "net": 6, "spec": [6, 14], "1_0": 6, "html": 6, "_": 6, "eid": 6, "saml2": [6, 12], "preexist": 6, "alreadi": [6, 15], "eg": [6, 9, 10, 14], "spid": [6, 9, 10, 14], "cie": 6, "notifi": [6, 9, 10, 11, 14], "act": [6, 9, 10, 14], "send": [6, 7, 9, 10, 11, 15], "get": [6, 9, 10, 14, 15, 16], "fig": 6, "show": [6, 9, 10, 11], "highlight": 6, "step": [6, 7, 9, 10, 11, 15, 16], "pictur": [6, 9, 10], "setup": [6, 7, 9], "start": [6, 11, 14, 15], "preliminari": 6, "out": [6, 7, 9, 11, 14], "assert": [6, 14, 15, 16], "share": [6, 14], "discoveri": [6, 9, 10, 14], "discov": 6, "e": [6, 7, 9, 11, 12, 14, 16], "g": [6, 11, 12, 13, 14, 16], "subordin": [6, 9, 10, 14], "inspect": 6, "filter": [6, 9, 10], "proxi": [6, 9, 10], "held": 6, "expand": 6, "assumpt": 6, "most": 6, "look": 6, "capabl": [6, 9, 10, 14, 15, 16], "9126": [6, 11, 15], "pkce": 6, "7636": 6, "receiv": [6, 7, 9, 10, 14, 15], "protocol": [6, 7, 9, 10, 11, 13, 14, 15], "fresh": [6, 9, 10, 14, 15], "previous": [6, 9, 10, 14], "hereaft": [6, 15], "prevent": [6, 9, 10, 15, 16], "swap": 6, "attack": [6, 15], "code_verifi": 6, "enough": 6, "entropi": [6, 9, 10], "unreserv": 6, "43": 6, "maximum": [6, 14], "impract": 6, "guess": 6, "client_assert": 6, "client": [6, 7, 9, 10, 14, 15, 16], "sinc": [6, 9, 10, 12, 14, 16], "less": [6, 7, 9, 14], "than": [6, 7, 9, 11, 14], "precis": 6, "second": [6, 7, 9, 10, 15], "authorization_detail": 6, "rar": 6, "9396": 6, "upon": [6, 9, 10, 14], "receipt": 6, "9101": [6, 9, 10], "retriev": [6, 7, 9, 10, 16], "jw": [6, 9, 10, 13, 14, 15, 16], "client_id": [6, 9, 10], "match": [6, 9, 10, 11], "aud": [6, 9, 10, 11, 15], "equal": [6, 9, 10, 14, 15], "reject": [6, 9, 10, 11], "request_uri": [6, 9, 10], "expos": [6, 9, 10, 14], "far": [6, 11], "minut": 6, "jti": [6, 9, 10, 11], "mitig": 6, "replai": [6, 15], "host": [6, 9, 10, 11, 15], "www": [6, 9, 10, 11, 15], "urlencod": [6, 9, 10, 11, 15], "response_typ": [6, 9, 10, 15], "thumprint": 6, "code_challeng": 6, "e9melhoa2owvfremtjguchaoek1t8urwbugjsstw": 6, "cm": 6, "code_challenge_method": 6, "s256": [6, 11], "client_assertion_typ": 6, "urn": [6, 15, 16], "ietf": [6, 15, 16], "param": [6, 15, 16], "wia": 6, "pop": [6, 11], "appli": [6, 9, 10, 14, 15], "vbexjksm45xphtanncig6mcyuu4jfgnzopgukvogg9c": [6, 9, 10, 15], "ad25868c": 6, "8377": 6, "479b": 6, "8094": 6, "46fb1e797625": 6, "1686645115": [6, 15], "1686652315": [6, 15], "fifyx03bnosd8m6gyqifnhnp9cm_sam9tc5nlloiirc": [6, 14], "1672422065": [6, 9, 10], "1672418465": [6, 9, 10], "ac80df576e7109686717bf50b869e882": 6, "fyziol9lf2cekunt2jzxilrdink0upcd": 6, "openid_credenti": 6, "credential_configuration_id": 6, "redirect_uri": [6, 9, 10], "suffici": [6, 9, 10], "adequ": [6, 16], "risk": [6, 12], "exce": 6, "ascii": 6, "due": [6, 9, 10, 11], "reason": [6, 11, 15], "mani": 6, "phone": [6, 12], "market": 6, "still": [6, 14, 15], "do": [6, 14, 15], "restrict": [6, 9, 10, 12, 14], "1024": 6, "On": [6, 15], "slow": 6, "2g": 6, "caus": 6, "therefor": [6, 9, 10, 11, 12, 15], "advis": [6, 9, 10], "experi": [6, 9, 10, 12], "point": [6, 7, 9, 10, 15], "201": [6, 9, 10, 11, 15], "cach": 6, "bwc4jk": 6, "esc0w8acc191": 6, "y1ltc2": 6, "expires_in": 6, "60": 6, "treat": 6, "duplic": 6, "reload": 6, "refresh": 6, "agent": [6, 9, 10], "result": [6, 7, 9, 10, 11, 14], "submit": [6, 15], "pass": [6, 7, 9, 15], "3aietf": [6, 15], "3aparam": [6, 15], "3aoauth": [6, 15], "3arequest_uri": 6, "3abwc4jk": 6, "consent": [6, 7, 9, 10, 14, 15], "perspect": [6, 9, 10, 14], "prior": 6, "transact": [6, 9, 10, 14, 16], "11": [6, 7, 9, 10, 14, 15], "6749": [6, 11, 13], "intend": [6, 7, 9, 10, 14], "9027": 6, "univers": [6, 15], "local": [6, 11, 14, 15], "so": [6, 7, 9, 11], "resolv": [6, 14], "302": [6, 9, 10], "found": [6, 9, 10, 11, 15], "locat": [6, 7, 9, 10], "splxlobezqqybys6wxsbia": 6, "3a": [6, 9, 10], "2f": [6, 9, 10], "2fpid": 6, "dpop": [6, 13], "instruct": 6, "9449": [6, 13], "certain": [6, 7, 9, 10], "misus": [6, 9, 10], "leak": 6, "stolen": 6, "repli": 6, "tokenrequest": 6, "eyj0exaioijkcg9wk2p3dcisimfszyi6ikvtmju2iiwiandrijp7imt0esi6ik": 6, "vdiiwieci6imw4dezyahgtmzr0vjnoukldukrzoxpda0rscejorjqyvvfvzldwqvdcr": 6, "nmilcj5ijoiovzfngpmx09rx282nhpivfrsy3vosmfqsg10nny5verwcluwq2r2r1j": 6, "qsisimnydii6ilatmju2in19": 6, "eyjqdgkioiitqnddm0vtyzzhy2mybfrjiiwiahrtij": 6, "oiue9tvcisimh0dsi6imh0dhbzoi8vc2vydmvylmv4yw1wbguuy29tl3rva2vuiiwia": 6, "wf0ijoxntyymjyynje2fq": 6, "gxa6t8lp4vfrg8v": 6, "fdwp0a0zdrj8igimlvqrmuvwnqg": 6, "4ptflbdlxiossx0x7nvi": 6, "fnyjk70nfbv37xrzt3lg": 6, "grant_typ": [6, 15], "authorization_cod": 6, "dbjftjez4cvp": 6, "mb92k27uhbuju1p1r_ww1gfwfoejxk": 6, "cb": [6, 9, 10], "15": [6, 9, 10, 14], "success": [6, 9, 10, 11, 14], "c_nonc": 6, "unpredict": [6, 15], "later": [6, 9, 10], "18": [6, 9, 10, 14, 15], "countermeasur": 6, "against": [6, 14, 15], "200": [6, 9, 10, 15], "access_token": 6, "kz": 6, "8mxk1ealyznwh": 6, "lc": 6, "1fbao": 6, "4ljp": 6, "zspe_neo": 6, "gxu": 6, "token_typ": 6, "2677": 6, "tzign": 6, "snfbp": 6, "c_nonce_expires_in": 6, "86400": 6, "17": [6, 9, 10, 14, 15], "demonstr": [6, 7, 9, 13, 14, 16], "evid": [6, 7, 9, 11], "To": [6, 9, 10, 11, 15, 16], "conduct": 6, "explicitli": 6, "server": [6, 7, 9, 10, 11, 14, 15], "nonc": [6, 9, 10, 15], "furthermor": [6, 11, 14, 16], "creation": [6, 9, 10, 11, 14, 15], "window": 6, "determin": [6, 9, 10, 12, 14, 16], "schema": [6, 14], "jwt_proof": 6, "therebi": [6, 15], "unlink": 6, "nmilcj5ijoiovzfngpmx09rx282nhpivfrsy3vosmfqsg10nny5verwcluwq2r2r": 6, "1jeqsisimnydii6ilatmju2in19": 6, "eyjqdgkioijlmwozvl9is2ljoc1mquvciiwiahrtij": 6, "oir0vuiiwiahr1ijoiahr0chm6ly9yzxnvdxjjzs5legftcgxllm9yzy9wcm90zwn0z": 6, "wryzxnvdxjjzsisimlhdci6mtu2mji2mjyxocwiyxroijoizlvieu8ycjjam0rantnf": 6, "c05yv0jimhhxwg9htnk1oulps0nbcwtzbvffbyj9": 6, "2ow9rp35yrqzhrtnp86l": 6, "ey71": 6, "optxrimpptoa1plemagr6pxhf8y6": 6, "yqyvnmcw6fy1dqd": 6, "jfxsyomxhajplja": 6, "credential_definit": 6, "proof_typ": 6, "eyjrawqioijkawq6zxhhbxbsztplym": 6, "l8tfrhx": 6, "34tv3hricrdy9zckdlpbhf42uqufwvawbf": 6, "9ve4jf_ok_o64zbttlcunjajhmt6v9tdvru0cdvgrda": 6, "And": 6, "0b434530": [6, 11], "e151": [6, 11], "4c40": [6, 11], "98b7": [6, 11], "74c75a5ef760": [6, 11], "1504699136": [6, 9, 10, 11], "19": [6, 9, 10, 14], "21": [6, 9, 10, 14], "suitabl": 6, "succe": 6, "proceed": 6, "proce": 6, "pragma": 6, "lupixvcwjk0eot4cxqe1nxk": 6, "wzwmhmn9oqp6yxx0a2l": 6, "fgff7": 6, "ukhla": 6, "thumbprint": [6, 11, 13, 15, 16], "insid": [6, 11, 15], "challeng": [6, 15], "per": [6, 11, 15], "iana": [6, 11, 15], "web": [6, 9, 10, 11, 13, 14, 15, 16], "registri": [6, 9, 10, 11, 12, 14, 15, 16], "symmetr": [6, 9, 10, 11, 15], "mac": [6, 9, 10, 11, 15], "7638": [6, 11, 13, 15], "section_3": [6, 11, 15], "assum": [6, 14], "implicit": 6, "side": [6, 9, 10], "end": [6, 7, 9, 10, 14], "alphanumer": 6, "32": [6, 9, 10], "authrequest": 6, "credential_configurations_support": 6, "reus": 6, "alon": 6, "collis": [6, 15], "resist": [6, 15], "under": [6, 9, 10, 11, 12, 14, 16], "uuid": [6, 7, 9, 11], "v4": [6, 11], "4122": [6, 11], "top": 6, "media": [6, 9, 10, 14, 16], "8259": 6, "strong": [6, 16], "pseudorandom": 6, "lifetim": 6, "posit": 6, "occur": [6, 7, 9, 10, 11, 15], "error_descript": [6, 9, 10, 11, 15], "human": [6, 11, 15], "readabl": [6, 9, 10, 11, 15], "clarifi": [6, 9, 10, 11, 15], "encount": [6, 9, 10, 11, 15], "400": [6, 9, 10, 11], "bad": [6, 9, 10, 11], "invalid_request": [6, 9, 10, 11], "grant": [6, 9, 10, 12, 15, 16], "browser": 6, "serial": 6, "queri": 6, "invalid_dpop_proof": 6, "least": [6, 7, 9, 10, 15, 16], "7515": [6, 11, 13], "8725": [6, 13], "chosen": [6, 9, 10], "7517": [6, 9, 10, 11, 13, 14, 16], "htm": 6, "attach": [6, 14], "9110": 6, "htu": 6, "target": [6, 9, 10], "fragment": [6, 9, 10], "successfulli": [6, 9, 10, 11], "claimset": 6, "simplifi": 6, "even": [6, 9, 10, 11, 12, 14], "charset": [6, 9, 10, 11], "utf": [6, 9, 10, 11], "invalid_cli": 6, "fail": [6, 9, 10, 14], "accomplish": [6, 16], "methodolog": 6, "9068": 6, "subjectidtyp": 6, "uuid4": 6, "rp": [6, 9, 10, 14], "jkt": 6, "ath": 6, "denot": 6, "mso_mdoc": [6, 9, 10], "renew": [6, 14], "invalid_proof": 6, "oauth_authorization_serv": [6, 14], "openid_credential_issu": [6, 14], "openid_relying_parti": [6, 14], "fanfs3ync9tjicaivhwlvuj3axwggz_98urfaqme": 6, "1649610249": 6, "1649437449": 6, "sig": 6, "1ta": 6, "se": [6, 15], "aqab": [6, 9, 10], "authority_hint": [6, 9, 10, 14, 16], "superior": [6, 14, 16], "organization_nam": [6, 7, 9, 10, 14, 16], "organ": [6, 9, 10, 12, 16], "homepage_uri": [6, 9, 10, 14, 16], "policy_uri": [6, 9, 10, 16], "privacy_polici": [6, 16], "tos_uri": [6, 16], "info_polici": [6, 16], "logo_uri": [6, 9, 10, 14, 16], "logo": [6, 9, 10, 14, 16], "svg": [6, 9, 10, 14, 16], "contact": [6, 9, 10, 14], "op": [6, 9, 10], "federation_resolve_endpoint": [6, 14], "authorization_endpoint": [6, 9, 10, 15], "pushed_authorization_request_endpoint": 6, "dpop_signing_alg_values_support": 6, "token_endpoint": [6, 16], "introspection_endpoint": 6, "introspect": 6, "client_registration_types_support": 6, "automat": [6, 14], "code_challenge_methods_support": 6, "authorization_details_types_support": 6, "acr_values_support": 6, "spidl2": [6, 9, 10], "spidl3": [6, 9, 10], "grant_types_support": [6, 16], "scopes_support": 6, "request_parameter_support": 6, "request_uri_parameter_support": 6, "fals": [6, 7, 9, 10, 15], "response_types_support": [6, 9, 10, 15], "subject_types_support": 6, "pairwis": [6, 9, 10], "token_endpoint_auth_methods_support": [6, 16], "attest_jwt_client_auth": 6, "token_endpoint_auth_signing_alg_values_support": [6, 16], "request_object_signing_alg_values_support": [6, 9, 10, 15], "credential_issu": 6, "credential_endpoint": 6, "revocation_endpoint": 6, "status_attestation_endpoint": 6, "displai": [6, 7, 9, 10], "italiano": 6, "di": 6, "esempio": 6, "alt_text": 6, "questo": 6, "newk5qdymekrcppo": 6, "yeytdjvwjmtzasmavt2vm1mb": 6, "vizxalo6dzeeszpxfpgzabtk3ctxtbubiiqpmiyrts": 6, "ff0bded045fe63fe5d1d64dd83b567e0": 6, "cryptographic_binding_methods_support": 6, "credential_signing_alg_values_support": 6, "proof_types_support": 6, "proof_signing_alg_values_support": 6, "credenzial": 6, "background_color": 6, "12107c": 6, "text_color": 6, "ffffff": 6, "trust_framework": [6, 7, 9], "assurance_level": [6, 7, 9], "electronic_record": [6, 7, 9], "record": [6, 7, 9], "sourc": [6, 7, 9, 11, 12], "organization_id": [6, 7, 9], "ipa_cod": 6, "m_it": 6, "country_cod": [6, 7, 9], "credentialsubject": [6, 9, 10], "nome": 6, "cognom": 6, "nascita": 6, "identificativo": 6, "univoco": 6, "codic": 6, "fiscal": 6, "supervis": [7, 9], "divid": [7, 9, 11, 14, 15], "three": [7, 9, 16], "subphas": [7, 9], "begin": [7, 9], "prompt": [7, 9, 10], "between": [7, 9, 10, 11, 12, 14, 15, 16], "transmit": [7, 9, 10], "rang": [7, 9], "technolog": [7, 9, 14], "limit": [7, 9, 15], "intercept": [7, 9, 10], "eavesdrop": [7, 9], "exclus": [7, 9], "qr": [7, 9, 10], "up": [7, 9, 10, 11, 14], "stage": [7, 9, 15], "condit": [7, 9, 10, 11], "iso18013": [7, 9], "appropri": [7, 9, 10, 11], "decrypt": [7, 9, 10], "bluetooth": [7, 9], "low": [7, 9, 16], "energi": [7, 9], "ble": [7, 9], "figur": [7, 9], "illustr": [7, 9], "diagram": [7, 9, 10, 11, 15], "reveal": [7, 9, 11, 12], "temporari": [7, 9, 11], "edevicekei": [7, 9], "priv": [7, 9], "pub": [7, 9], "incorpor": [7, 9, 14, 15], "suit": [7, 9], "immedi": [7, 9, 14, 16], "after": [7, 9, 10, 11, 15, 16], "final": [7, 9, 10, 14], "a30063312e30018201d818584ba4010220012158205a88d182bce5f42efa59943f33359d2e8a968ff289d93e5fa444b624343167fe225820b16e8cf858ddc7690407ba61d4c338237a8cfcf3de6aa672fc60a557aa32fc670281830201a300f401f50b5045efef742b2c4837a9a3b0e1d05a6917": [7, 9], "embed": [7, 9], "item": [7, 9, 12], "5a88d182bce5f42efa59943f33359d2e8a968ff289d93e5fa444b624343": [7, 9], "167fe": [7, 9], "b16e8cf858ddc7690407ba61d4c338237a8cfcf3de6aa672fc60a557aa32fc67": [7, 9], "deviceretrievalmethod": [7, 9], "peripher": [7, 9], "central": [7, 9, 12, 14], "45efef742b2c4837a9a3b0e1d05a6917": [7, 9], "scan": [7, 9, 10], "ereaderkei": [7, 9], "newli": [7, 9], "independ": [7, 9, 14], "along": [7, 9, 10, 11, 15, 16], "a26776657273696f6e63312e306b646f63526571756573747381a26c6974656d7352657175657374d818590152a267646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e4954a375766572696669636174696f6e2e65766964656e6365f4781c766572696669636174696f6e2e6173737572616e63655f6c6576656cf4781c766572696669636174696f6e2e74727573745f6672616d65776f726bf4716f72672e69736f2e31383031332e352e31ab76756e5f64697374696e6775697368696e675f7369676ef47264726976696e675f70726976696c65676573f46f646f63756d656e745f6e756d626572f46a69737375655f64617465f46f69737375696e675f636f756e747279f47169737375696e675f617574686f72697479f46a62697274685f64617465f46b6578706972795f64617465f46a676976656e5f6e616d65f468706f727472616974f46b66616d696c795f6e616d65f46a726561646572417574688443a10126a11821590129308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97bf6584058a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9": [7, 9], "docrequest": [7, 9], "itemsrequest": [7, 9], "un_distinguishing_sign": [7, 9], "driving_privileg": [7, 9, 10], "portrait": [7, 9, 10], "readerauth": [7, 9], "a10126": [7, 9], "308201253081cda00302010202012a300a06082a8648ce3d0403023020311e301c06035504030c15536f6d652052656164657220417574686f72697479301e170d3233313132343130323832325a170d3238313132323130323832325a301a3118301606035504030c0f536f6d6520526561646572204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004aa1092fb59e26ddd182cfdbc85f1aa8217a4f0fae6a6a5536b57c5ef7be2fb6d0dfd319839e6c24d087cd26499ec4f87c8c766200ba4c6218c74de50cd1243b1300a06082a8648ce3d0403020347003044022048466e92226e042add073b8cdc43df5a19401e1d95ab226e142947e435af9db30220043af7a8e7d31646a424e02ea0c853ec9c293791f930bf589bee557370a4c97b": [7, 9], "null": [7, 9], "58a0d421a7e53b7db0412a196fea50ca6d4c8a530a47dd84d88588ab145374bd0ab2a724cf2ed2facf32c7184591c5969efd53f5aba63194105440bc1904e1b9": [7, 9], "comput": [7, 9, 11, 15], "ask": [7, 9, 10, 11, 12, 16], "permiss": [7, 9], "agre": [7, 9, 14], "give": [7, 9, 10, 14, 15], "a36776657273696f6e63312e3069646f63756d656e747381a367646f6354797065756f72672e69736f2e31383031332e352e312e6d444c6c6973737565725369676e6564a26a6e616d65537061636573a2746f72672e69736f2e31383031332e352e312e495483d81858f7a46864696765737449440b6672616e646f6d506d44f21ee875f2c1d502b43198e5a15271656c656d656e744964656e74696669657275766572696669636174696f6e2e65766964656e63656c656c656d656e7456616c756581a2647479706571656c656374726f6e69635f7265636f7264667265636f7264bf6474797065781f68747470733a2f2f657564692e77616c6c65742e70646e642e676f762e697466736f75726365bf716f7267616e697a6174696f6e5f6e616d65754d6f746f72697a7a617a696f6e6520436976696c656f6f7267616e697a6174696f6e5f6964656d5f696e666c636f756e7472795f636f6465626974ffffd8185866a4686469676573744944046672616e646f6d50185d84dfb71ce9b173010ddd62174fbe71656c656d656e744964656e746966696572781c766572696669636174696f6e2e74727573745f6672616d65776f726b6c656c656d656e7456616c7565656569646173d8185865a4686469676573744944006672616e646f6d50137f903174253c4585358267aae2ea4e71656c656d656e744964656e746966696572781c766572696669636174696f6e2e6173737572616e63655f6c6576656c6c656c656d656e7456616c75656468696768716f72672e69736f2e31383031332e352e318bd8185852a46864696765737449440c6672616e646f6d5053e29d0ddbbc7d2306a32bdbe2e56e5171656c656d656e744964656e7469666965726b66616d696c795f6e616d656c656c656d656e7456616c756563446f65d8185855a4686469676573744944036672616e646f6d50990cba2069fa1b33b8d6ae910b6549dc71656c656d656e744964656e7469666965726a676976656e5f6e616d656c656c656d656e7456616c756567416e746f6e696fd818585ba46864696765737449440a6672616e646f6d504086c1379975f805f1b1f4975e6a126571656c656d656e744964656e7469666965726a69737375655f646174656c656c656d656e7456616c7565d903ec6a323031392d31302d3230d818585ca4686469676573744944016672616e646f6d50ab4ca30c918dd2fd0bf35242c15fa2d871656c656d656e744964656e7469666965726b6578706972795f646174656c656c656d656e7456616c7565d903ec6a323032342d31302d3230d8185855a4686469676573744944076672616e646f6d508d9066f6c8da16619867cd4e2fab0c8871656c656d656e744964656e7469666965726f69737375696e675f636f756e7472796c656c656d656e7456616c7565624954d818587ea4686469676573744944056672616e646f6d5059fe68db795dee4c20976380ea24770571656c656d656e744964656e7469666965727169737375696e675f617574686f726974796c656c656d656e7456616c75657828497374697475746f20506f6c696772616669636f2065205a656363612064656c6c6f20537461746fd818585ba4686469676573744944026672616e646f6d5008b3f1ca5517019767be3dee3bb0614571656c656d656e744964656e7469666965726a62697274685f646174656c656c656d656e7456616c7565d903ec6a313935362d30312d3230d818585ca4686469676573744944096672616e646f6d50a2395ec214350c26066306e23279b3ae71656c656d656e744964656e7469666965726f646f63756d656e745f6e756d6265726c656c656d656e7456616c756569393837363534333231d8185850a4686469676573744944066672616e646f6d50a25e1a5b915d2d6eafee9674e023293971656c656d656e744964656e74696669657268706f7274726169746c656c656d656e7456616c75654420212223d81858eea46864696765737449440d6672616e646f6d50eeed6a3b856563627589a360939d12f771656c656d656e744964656e7469666965727264726976696e675f70726976696c656765736c656c656d656e7456616c756582a37576656869636c655f63617465676f72795f636f646561416a69737375655f64617465d903ec6a323031382d30382d30396b6578706972795f64617465d903ec6a323032342d31302d3230a37576656869636c655f63617465676f72795f636f646561426a69737375655f64617465d903ec6a323031372d30322d32336b6578706972795f64617465d903ec6a323032342d31302d3230d818585ba4686469676573744944086672616e646f6d50c0ef486b2a194ed3cbf7f354fd40092171656c656d656e744964656e74696669657276756e5f64697374696e6775697368696e675f7369676e6c656c656d656e7456616c756561496a697373756572417574688443a10126a118215901423082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb": [7, 9], "6d44f21ee875f2c1d502b43198e5a152": [7, 9], "pdnd": [7, 9], "motorizzazion": [7, 9], "civil": [7, 9], "m_inf": [7, 9], "185d84dfb71ce9b173010ddd62174fb": [7, 9], "137f903174253c4585358267aae2ea4": [7, 9], "53e29d0ddbbc7d2306a32bdbe2e56e51": [7, 9], "doe": [7, 9, 10, 15], "990cba2069fa1b33b8d6ae910b6549dc": [7, 9], "antonio": [7, 9], "4086c1379975f805f1b1f4975e6a1265": [7, 9], "2019": [7, 9], "20": [7, 9, 10, 14], "ab4ca30c918dd2fd0bf35242c15fa2d8": [7, 9], "8d9066f6c8da16619867cd4e2fab0c88": [7, 9], "59fe68db795dee4c20976380ea247705": [7, 9], "istituto": [7, 9], "poligrafico": [7, 9], "zecca": [7, 9], "dello": [7, 9], "stato": [7, 9], "08b3f1ca5517019767be3dee3bb06145": [7, 9], "a2395ec214350c26066306e23279b3a": [7, 9], "987654321": [7, 9], "a25e1a5b915d2d6eafee9674e0232939": [7, 9], "20212223": [7, 9], "eeed6a3b856563627589a360939d12f7": [7, 9], "vehicle_category_cod": [7, 9], "2018": [7, 9], "08": [7, 9], "09": [7, 9], "b": [7, 9, 13], "2017": [7, 9, 13], "c0ef486b2a194ed3cbf7f354fd400921": [7, 9], "i": [7, 9], "3082013e3081e5a00302010202012a300a06082a8648ce3d040302301a3118301606035504030c0f5374617465204f662055746f706961301e170d3233313132343134353430345a170d3238313132323134353430345a30383136303406035504030c2d5374617465204f662055746f7069612049737375696e6720417574686f72697479205369676e696e67204b65793059301306072a8648ce3d020106082a8648ce3d03010703420004c338ec1000b351ce8bcdfc167450aeceb7d518bd9a519583e082d67effff06565804fc09abf0e4a08e699c9dba3796285a15f68e40ac7f9fc7700a15153a4065300a06082a8648ce3d040302034800304502210099b7d62e6bf7b1823db3713df889bf73e70bb4d9c58c21e92c58d2f1beffe932022058d039747a00d70e6d66be4797e6142b3608a014ee09b7b79af2cae2aaf27788": [7, 9], "0e5f0b6b33418e508740771e82f893372eaf5b2445bc4c84dcf08b005e9493fc": [7, 9], "de21bb62ff2897d8b986d2cda9f9bc5865c02807f7b4d9dd1fa4a79df4c0d37f": [7, 9], "bc5568239e35ce9ff8798c27ffdcd757b134b679f0fe05729aa3491381912e65": [7, 9], "e6048bdc7fd6454296f1e3f54536107c9c5b24c4064de46a98121e3630eecca2": [7, 9], "73690d92dcaa61b0203870f67c6aa9fdfea889b6f0c720de757b4b0a8516a206": [7, 9], "e353ea0b0fd92b6be90c64cc3b2ee1284153a8f0f5066b99aac599200e6eeeb2": [7, 9], "29227872ceb49923d267b5f4bade6d387b42ac2dc4b2ae26c9013067fee7018a": [7, 9], "a6a119f7cacac0b8c6aacac747fd3fe7e50b6d9bb8a507fda79f0df6646f285d": [7, 9], "6d8025d2f02a5e7e1406fb6aaeb67f9ede9b07191a53f3e23b77c528223a94e2": [7, 9], "b0d43e4e2ea534e4d5304e64bcf7a0f13e2c8ee8304b9cd23aba4909652a4647": [7, 9], "fbf4de318982f2dbad43c601caeb22628b301ac18aa8264c5831b2aaac89c486": [7, 9], "cf57377b675f64f37314739592c1e8a911a7ddaf341ce2902fe877c5a835e4c1": [7, 9], "4a4b4cc64ec9299c1a2501ea449f577005e9f7a60408057c07a7c67fb151e5f5": [7, 9], "78824fbd6fbba88a2aab44df8b6f5e9759126d87d1f4415995e658fd9239e1f": [7, 9], "afd09e720b918cedc2b8a881950bab6a1051e18ae16a814d51e609938663d5e1": [7, 9], "61fbc6c8ad24ec86a78bb4e9ac377dd2b7c711d9f2eb9afd4aa0963662847a": [7, 9], "24t14": [7, 9], "54": [7, 9], "05z": [7, 9], "f2461e4fab69e9f7bcffe552395424514524d1679440036213173101448d1b1ab4a293859b389ffa8b47aeed10e9b0c1545412ac37c51a76482cd9bbbe110152": [7, 9], "1fed7190d2975ab79c072e6f1d9d52436059d1fc959d55baf74f057d89b10fcc0dc77a50d433d4c76ddf26223c5560c4ab123b5cb5eb805a90036aa147493076": [7, 9], "subsequ": [7, 9, 11], "consid": [7, 9, 10, 11, 14, 15], "transfermethod": [7, 9], "hold": [7, 9, 11], "bleoption": [7, 9], "datael": [7, 9], "intent": [7, 9], "retain": [7, 9, 14], "intenttoretain": [7, 9], "bool": [7, 9], "cose_sign1": [7, 9], "unless": [7, 9], "responsedata": [7, 9], "respond": [7, 9, 15], "devicenamespac": [7, 9], "dataitemnam": [7, 9], "dataitemvalu": [7, 9], "action": [7, 9, 10, 11, 12, 15, 16], "responsestatu": [7, 9], "300": [7, 9], "doesn": [7, 9, 11, 14], "t": [7, 9, 11, 13, 14], "dispatch": [7, 9], "command": [7, 9], "destruct": [7, 9], "closur": [7, 9], "scenario": [9, 10, 11, 12, 14], "download": [9, 10], "workstat": [9, 10], "frame": [9, 10, 15], "extract": [9, 10], "request_uri_method": [9, 10], "client_id_schem": [9, 10], "entity_id": [9, 10], "assign": [9, 10, 14], "altern": [9, 10], "mandat": [9, 10], "fetch": [9, 10, 14], "eleg": [9, 10], "polici": [9, 10, 11, 14, 16], "successful": [9, 10], "continu": [9, 10], "navig": [9, 10], "sequenc": [9, 10, 14, 15], "summar": [9, 10], "convers": [9, 10], "suppli": [9, 10], "deselect": [9, 10], "direct_post": [9, 10], "25": [9, 10, 14], "26": [9, 10, 14], "27": [9, 10, 14], "28": [9, 10, 14], "29": [9, 10, 14], "autent": [9, 10], "succed": [9, 10], "made": [9, 10, 14, 15, 16], "featur": [9, 10, 11, 14, 15], "deem": [9, 10], "necessari": [9, 10, 11, 12, 14, 15], "better": [9, 10, 11], "explicit": [9, 10], "regard": [9, 10, 14, 15], "usag": [9, 10, 14, 16], "prefer": [9, 10, 16], "vp_token": [9, 10, 11, 15], "response_modes_support": [9, 10, 15], "form_post": [9, 10, 15], "vp_formats_support": [9, 10, 15], "jwt_alg_valu": [9, 10, 14, 15], "presentation_definition_uri_support": [9, 10, 15], "otherwis": [9, 10, 11], "jar": [9, 10], "2freli": [9, 10], "2fcb": [9, 10], "2frequest_uri": [9, 10], "raw": [9, 10], "correct": [9, 10], "quartili": [9, 10], "good": [9, 10, 12], "balanc": [9, 10], "densiti": [9, 10], "space": [9, 10], "qualiti": [9, 10], "damag": [9, 10], "partial": [9, 10], "obscur": [9, 10], "javascript": [9, 10, 13], "qrcode": [9, 10], "poll": [9, 10], "socket": [9, 10], "cooki": [9, 10], "httponli": [9, 10], "special": [9, 10, 15], "wait": [9, 10, 13], "202": [9, 10], "response_uri": [9, 10], "401": [9, 10], "unauthor": [9, 10, 12, 15, 16], "3be39b69": [9, 10], "6ac1": [9, 10], "41aa": [9, 10], "921b": [9, 10], "3e6c07ddcb03": [9, 10], "miicajccadogawibag": [9, 10], "awz": [9, 10], "2w3": [9, 10], "sf2": [9, 10], "walletattest": [9, 10], "response_mod": [9, 10, 15], "2c128e4d": [9, 10], "fc91": [9, 10], "4cd3": [9, 10], "86b8": [9, 10], "18bdea0988cb": [9, 10], "herein": [9, 10], "alias": [9, 10], "anymor": [9, 10, 11, 15], "insensit": [9, 10], "rfc9101": [9, 10], "presentation_definit": [9, 10, 15], "input_descriptor": [9, 10], "constraint": [9, 10, 14], "path": [9, 10, 14], "limit_disclosur": [9, 10], "mention": [9, 10, 15], "futur": [9, 10, 14, 15], "presentation_definition_uri": [9, 10], "Not": [9, 10, 11], "client_metadata": [9, 10], "taken": [9, 10, 15], "client_metadata_uri": [9, 10], "miss": [9, 10], "webpath": [9, 10], "urlparam": [9, 10], "server_error": [9, 10], "unexpect": [9, 10], "fulfil": [9, 10, 11], "unabl": [9, 10, 11], "malfunct": [9, 10], "mainten": [9, 10], "try": [9, 10], "malform": [9, 10], "anoth": [9, 10, 12, 15], "500": [9, 10, 11], "There": [9, 10, 14], "could": [9, 10, 12, 14], "incorrect": [9, 10, 11], "failur": [9, 10, 11], "manner": [9, 10, 11, 15, 16], "log": [9, 10, 14], "attempt": [9, 10, 15], "recov": [9, 10], "feasibl": [9, 10], "re": [9, 10], "enter": [9, 10, 14, 16], "crucial": [9, 10, 11, 12], "robust": [9, 10, 11, 14], "handl": [9, 10, 14], "friendli": [9, 10], "adher": [9, 10, 14, 15, 16], "help": [9, 10, 15], "diagnos": [9, 10], "variou": [9, 10, 14, 16], "faulti": [9, 10], "potenti": [9, 10, 11, 14, 15], "lead": [9, 10, 11, 15], "gather": [9, 10], "exploit": [9, 10], "why": [9, 10], "malici": [9, 10], "plaintext": [9, 10], "network": [9, 10], "emploi": [9, 10, 14, 16], "tl": [9, 10, 14], "Such": [9, 10], "techniqu": [9, 10, 12], "webserv": [9, 10], "deciph": [9, 10], "transmiss": [9, 10, 14], "forward": [9, 10], "negoti": [9, 10], "actual": [9, 10, 15, 16], "actor": [9, 10, 12, 16], "segment": [9, 10], "sensit": [9, 10], "unencrypt": [9, 10], "snif": [9, 10], "eyjhbgcioijfuzi1nii": [9, 10], "9t2lq": [9, 10], "pt0ixx0": [9, 10], "presentation_submiss": [9, 10], "definition_id": [9, 10], "32f54163": [9, 10], "7166": [9, 10], "48f1": [9, 10], "93d8": [9, 10], "ff217bdb0653": [9, 10], "04a98be3": [9, 10], "7fb0": [9, 10], "4cf5": [9, 10], "af9a": [9, 10], "31579c8b0e7d": [9, 10], "descriptor_map": [9, 10], "verified_claim": [9, 10], "find": [9, 10], "3978344f": [9, 10], "8596": [9, 10], "4c3a": [9, 10], "a978": [9, 10], "8fcaba3903c5": [9, 10], "1541493724": [9, 10], "1573029723": [9, 10], "origin": [9, 10, 14, 15], "beyond": [9, 10, 11, 14], "longer": [9, 10, 11, 14, 15], "audienc": [9, 10], "becaus": [9, 10, 11, 15], "aris": [9, 10], "403": [9, 10], "forbidden": [9, 10], "happen": [9, 10, 14], "occour": [9, 10], "meet": [9, 10, 14, 15], "criteria": [9, 10, 14], "stem": [9, 10], "aspect": [9, 10], "clariti": [9, 10], "proper": [9, 10, 15], "credentialx": [9, 10], "write": [9, 10, 16], "response_cod": [9, 10], "091535f699ea575c7937fa5f0f454ae": [9, 10], "These": [9, 10, 11, 14, 16], "critic": [9, 10], "impact": [9, 10], "hinder": [9, 10], "seamless": [9, 10, 12, 14], "implic": [9, 10], "mismatch": [9, 10], "incur": [9, 10], "rais": [9, 10], "refus": [9, 10], "precaut": [9, 10], "clear": [9, 10, 14], "2hnofs3ync9tjicaivhwlvuj3axwggz_98urfaqme": [9, 10, 14], "1649590602": [9, 10], "1649417862": [9, 10], "5s4qi": [9, 10], "wallet_relying_parti": [9, 10, 14], "application_typ": [9, 10], "client_nam": [9, 10], "9tjicaivhwlvuj3axwggz_9": [9, 10], "default_acr_valu": [9, 10], "vp_format": [9, 10, 14], "kb": [9, 10, 14], "identitycredenti": [9, 10], "const": [9, 10], "intent_to_retain": [9, 10], "enum": [9, 10], "issuer2": [9, 10], "issuer3": [9, 10], "1504700136": [9, 10, 11], "sampl": [9, 10], "eddsa": [9, 10, 15], "default_max_ag": [9, 10], "1111": [9, 10], "jarm": [9, 10, 13], "authorization_signed_response_alg": [9, 10], "authorization_encrypted_response_alg": [9, 10], "authorization_encrypted_response_enc": [9, 10], "a192cbc": [9, 10], "a128gcm": [9, 10], "a192gcm": [9, 10], "a256gcm": [9, 10], "subject_typ": [9, 10], "require_auth_tim": [9, 10], "id_token_signed_response_alg": [9, 10], "id_token_encrypted_response_alg": [9, 10], "id_token_encrypted_response_enc": [9, 10], "home": [9, 10], "tech": [9, 10, 14], "princip": [9, 10], "acr": [9, 10], "hint": [9, 10], "verifieng": [9, 10], "confgiur": [9, 10], "inaccuraci": 11, "compromis": [11, 14, 15], "valueless": 11, "harm": 11, "cycl": 11, "serv": [11, 14, 15, 16], "autom": [11, 14], "provis": [11, 14, 16], "onlin": [11, 14], "preserv": [11, 15, 16], "internet": [11, 13], "becom": [11, 15, 16], "conjunct": 11, "greater": 11, "hour": [11, 14, 15], "rotat": 11, "kept": 11, "circumst": [11, 16], "whenev": 11, "delet": [11, 15], "band": 11, "databas": 11, "trigger": 11, "touchpoint": 11, "enforc": [11, 14], "judici": 11, "polic": 11, "loss": 11, "theft": [11, 12], "physic": [11, 12], "impli": [11, 15], "address": [11, 15], "lose": 11, "awar": 11, "behalf": [11, 14], "entitl": 11, "etc": [11, 14], "turn": 11, "death": 11, "decid": 11, "Then": 11, "credential_pop": 11, "credentialpopjwt": 11, "jwkid": 11, "1698744039": 11, "1698744139": 11, "6f204f7e": 11, "e453": 11, "4dfd": 11, "814e": 11, "9d155319408c": 11, "credential_hash": 11, "notif": 11, "email": [11, 14], "telephon": 11, "204": 11, "No": [11, 14], "404": 11, "problem": 11, "503": 11, "unavail": [11, 14, 15], "registerd": 11, "take": [11, 15], "lack": 11, "interv": 11, "suspens": 11, "itself": [11, 14, 16], "eyjhbgcioijfuzi1niisinr5cci6indhbgxldc1": 11, "credential_revok": 11, "credential_upd": 11, "One": 11, "defer": 11, "paradigm": 12, "iam": 12, "improv": 12, "ownership": [12, 16], "said": 12, "histori": 12, "tradit": [12, 14], "know": [12, 14], "fact": 12, "envis": 12, "login": 12, "compani": 12, "want": 12, "acquir": [12, 15, 16], "publish": [12, 14], "educ": 12, "institut": 12, "portabl": 12, "principl": [12, 14], "character": 12, "choos": 12, "leverag": [12, 14], "avoid": 12, "fraud": 12, "promot": [12, 14], "border": [12, 14], "effici": [12, 14], "cost": [12, 14], "reduct": 12, "elimin": 12, "multipl": [12, 14, 15], "repetit": 12, "streamlin": [12, 14], "reduc": [12, 14], "purchas": 12, "ag": 12, "k": 13, "looker": 13, "februari": 13, "d": 13, "fett": 13, "presentationexch": 13, "2119": 13, "bradner": 13, "march": 13, "1997": 13, "2616": 13, "r": 13, "getti": 13, "j": 13, "mogul": 13, "frystyk": 13, "masint": 13, "l": 13, "leach": 13, "berner": 13, "lee": 13, "hypertext": 13, "transfer": [13, 15], "june": 13, "1999": 13, "3339": 13, "klyne": 13, "c": 13, "newman": 13, "doi": 13, "17487": 13, "rfc3339": 13, "juli": 13, "2002": 13, "3986": 13, "uniform": [13, 15], "syntax": 13, "7159": 13, "brai": 13, "interchang": 13, "2014": 13, "jone": 13, "m": 13, "bradlei": 13, "sakimura": 13, "2015": 13, "hildebrand": 13, "jwe": 13, "rfc7517": 13, "jwa": 13, "septemb": 13, "7800": [13, 15], "tschofenig": 13, "semant": 13, "april": 13, "2016": 13, "8174": 13, "leiba": 13, "ambigu": 13, "uppercas": 13, "vs": 13, "lowercas": 13, "hardt": 13, "sheffer": 13, "best": 13, "practic": 13, "2020": 13, "campbel": 13, "novemb": 13, "2022": 13, "openid4vc": [13, 15], "haip": [13, 15], "legitimaci": 14, "compli": 14, "rest": [14, 16], "distribut": 14, "call": 14, "overse": 14, "fr": 14, "stamp": 14, "artifact": 14, "confidenti": 14, "measur": [14, 15], "gdpr": 14, "empow": 14, "audit": 14, "minim": 14, "anonym": 14, "retent": 14, "account": 14, "disput": 14, "resolut": 14, "liabil": 14, "those": 14, "disabl": 14, "emerg": 14, "breach": 14, "scalabl": 14, "deleg": [14, 15], "relationship": 14, "grow": 14, "remov": [14, 15, 16], "might": 14, "scale": 14, "horizont": 14, "accommod": 14, "increas": 14, "volum": 14, "histor": 14, "extens": 14, "behavior": 14, "relianc": 14, "adapt": 14, "load": 14, "particularli": 14, "peak": 14, "complex": 14, "task": 14, "cryptographi": 14, "flexibl": 14, "threat": [14, 15], "research": 14, "pre": 14, "candid": 14, "monitor": 14, "ongo": 14, "similar": 14, "thereof": 14, "reflect": [14, 15], "transpar": 14, "status": 14, "foster": 14, "tool": [14, 15], "aid": 14, "earli": 14, "detect": [14, 15], "30": 14, "tamper": [14, 16], "except": 14, "summari": 14, "pki": 14, "leaf": 14, "built": 14, "p1": 14, "p2": 14, "p3": 14, "divers": 14, "p4": 14, "indirectli": 14, "p6": 14, "p5": 14, "p7": 14, "organiz": 14, "adjust": 14, "p8": 14, "autonomi": 14, "p9": 14, "unlik": 14, "coverag": 14, "satisfi": [14, 15], "recognis": 14, "publicli": 14, "summaris": 14, "trust_mark_id": 14, "motiv": 14, "plain": 14, "keep": [14, 15], "max_path_length": 14, "1649375259": 14, "1649373279": 14, "x2zomhngsdc4zlbrcxhmt3mzrmrzog9jd3o2qjzdam51cuhhufruowd0wq": 14, "1knr9ar3mzmokyty8brvriue85nixryx4xd3k4jw7vi": 14, "slt14644zbyxyf": 14, "xmw7apdlbmuw3t1urwi4nafmtkri": 14, "ta": 14, "federation_fetch_endpoint": 14, "federation_list_endpoint": 14, "federation_trust_mark_status_endpoint": 14, "trust_mark_statu": 14, "trust_mark_issu": 14, "cryptograf": 14, "x5c": 14, "entity_typ": 14, "trustworthi": [14, 15, 16], "trust_mark_own": 14, "trust_mark": 14, "entri": 14, "don": 14, "authorization_serv": 14, "necess": 14, "em3cmnzghiyfsq090n6b3op7laaqj8rghmhxgmjstqg": 14, "1649623546": 14, "1649450746": 14, "metadata_polici": 14, "subset_of": 14, "allowed_leaf_entity_typ": 14, "real": 14, "concaten": [14, 15], "convei": 14, "pertain": [14, 15], "earliest": 14, "forc": 14, "higher": 14, "abstract": 14, "entityconfigur": 14, "signedjwt": 14, "selfissu": 14, "byleaf": 14, "entitystat": 14, "bytrustanchor": 14, "eyjhbgcioijfuzi1niisimtpzci6ik5gttfxvvzpvwxzelvxcexhbwxmy0vwufjwwtjwwfpjumpcblfywm1ssghlwvvwwvvszfrrbkeytkeilcj0exaioijhchbsawnhdglvbi9lbnrpdhktc3rhdgvtzw50k2p3dcj9": 14, "eyjlehaioje2ndk1ota2mdisimlhdci6mty0otqxnzg2miwiaxnzijoiahr0chm6ly9ycc5legftcgxllm9yzyisinn1yii6imh0dhbzoi8vcnauzxhhbxbszs5vcmcilcjqd2tzijp7imtlexmiolt7imt0esi6ikvdiiwia2lkijoitkznmvdvvmlvbfl6vvdwtgftbgzjrxbqulzzmlzywklsakjuuvhabvjiaetzvvzzvwxkvffuqtjoqsisimnydii6ilatmju2iiwieci6invzbemzd2qtcfgzd3o0yljzbnd5m2x6cgjhwkzotjk2aewyquhbm01rnlkilcj5ijoivkxdqlhgv2xktlnosxo4a0gyoxzmujromthca3dht1gynnprb3j1utfnncj9xx0sim1ldgfkyxrhijp7im9wzw5pzf9yzwx5aw5nx3bhcnr5ijp7imfwcgxpy2f0aw9ux3r5cguioij3zwiilcjjbgllbnrfawqioijodhrwczovl3jwlmv4yw1wbguub3jnlyisimnsawvudf9yzwdpc3ryyxrpb25fdhlwzxmiolsiyxv0b21hdgljil0simp3a3mionsia2v5cyi6w3sia3r5ijoirumilcjrawqioijork0xv1vwavvswxpvv3bmyw1szmnfcfbsvlkyvlhasvjqqm5rwfptukhos1lvvllvbgruuw5bmk5biiwiy3j2ijoiuc0yntyilcj4ijoidxnsqzn3zc1wwdn3ejriullud3kzbhpwykdarmhootzotdjbseeztve2wsisinkioijwtencwezxbgrou05jejhrsdi5dkxsne4xoejrd0dpwdi2elfvcnvrmu00in1dfswiy2xpzw50x25hbwuioijoyw1lig9migfuigv4yw1wbgugb3jnyw5pemf0aw9uiiwiy29udgfjdhmiolsib3bzqhjwlmv4yw1wbguuaxqixswiz3jhbnrfdhlwzxmiolsicmvmcmvzaf90b2tlbiisimf1dghvcml6yxrpb25fy29kzsjdlcjyzwrpcmvjdf91cmlzijpbimh0dhbzoi8vcnauzxhhbxbszs5vcmcvb2lkyy9ycc9jywxsymfjay8ixswicmvzcg9uc2vfdhlwzxmiolsiy29kzsjdlcjzy29wzsi6imv1lmv1cm9wys5lyy5ldwrpdy5wawqumsblds5ldxjvcgeuzwmuzxvkaxcucglklml0ljegzw1hawwilcjzdwjqzwn0x3r5cguioijwywlyd2lzzsj9lcjmzwrlcmf0aw9ux2vudgl0esi6eyjmzwrlcmf0aw9ux3jlc29sdmvfzw5kcg9pbnqioijodhrwczovl3jwlmv4yw1wbguub3jnl3jlc29sdmuviiwib3jnyw5pemf0aw9ux25hbwuioijfegftcgxlifjqiiwiag9tzxbhz2vfdxjpijoiahr0chm6ly9ycc5legftcgxllml0iiwicg9sawn5x3vyasi6imh0dhbzoi8vcnauzxhhbxbszs5pdc9wb2xpy3kilcjsb2dvx3vyasi6imh0dhbzoi8vcnauzxhhbxbszs5pdc9zdgf0awmvbg9nby5zdmcilcjjb250ywn0cyi6wyj0zwnoqgv4yw1wbguuaxqixx19lcj0cnvzdf9tyxjrcyi6w3siawqioijodhrwczovl3jlz2lzdhj5lmvpzgfzlnrydxn0lwfuy2hvci5legftcgxllmv1l29wzw5pzf9yzwx5aw5nx3bhcnr5l3b1ymxpyy8ilcj0cnvzdf9tyxjrijoizxlkacbcdtiwmjyifv0simf1dghvcml0ev9oaw50cyi6wyjodhrwczovl2ludgvybwvkawf0zs5lawrhcy5legftcgxllm9yzyjdfq": 14, "un315hdckvhya": 14, "irregzaml7pnfjqh2apz82blqo5s0sl1jr0tefp5e1t913g8gnuwggtmquqhpzwv6bvtla8g": 14, "eyjhbgcioijfuzi1niisimtpzci6ilnurkrxv2hky0dwwfgzqjnsvmraywtsq0xutnvna000wtngnlfutk9krxryzfhgwvlywjjjwgn0uveilcj0exaioijhchbsawnhdglvbi9lbnrpdhktc3rhdgvtzw50k2p3dcj9": 14, "eyjlehaioje2ndk2mjm1ndysimlhdci6mty0otq1mdc0niwiaxnzijoiahr0chm6ly9pbnrlcm1lzglhdguuzwlkyxmuzxhhbxbszs5vcmcilcjzdwiioijodhrwczovl3jwlmv4yw1wbguub3jniiwiandrcyi6eyjrzxlzijpbeyjrdhkioijfqyisimtpzci6ik5gttfxvvzpvwxzelvxcexhbwxmy0vwufjwwtjwwfpjumpcblfywm1ssghlwvvwwvvszfrrbkeytkeilcjjcnyioijqlti1niisingioij1c2xdm3dklxbym3d6ngjsww53etnsenbir1pgae45nmhmmkfiqtnnutzziiwiesi6ilzmq0jyrldsze5ttkl6ogtimjl2tfi0tje4qmt3r09ymjz6uw9ydvexttqifv19lcjtzxrhzgf0yv9wb2xpy3kionsib3blbmlkx3jlbhlpbmdfcgfydhkionsic2nvcguionsic3vic2v0x29mijpbimv1lmv1cm9wys5lyy5ldwrpdy5wawqumswgigv1lmv1cm9wys5lyy5ldwrpdy5wawquaxqumsjdfswicmvxdwvzdf9hdxrozw50awnhdglvbl9tzxrob2rzx3n1chbvcnrlzci6eyjvbmvfb2yiolsicmvxdwvzdf9vymply3qixx0sinjlcxvlc3rfyxv0agvudgljyxrpb25fc2lnbmluz19hbgdfdmfsdwvzx3n1chbvcnrlzci6eyjzdwjzzxrfb2yiolsiulmyntyilcjsuzuxmiisikvtmju2iiwirvm1mtiilcjquzi1niisilbtnteyil19fx0sinrydxn0x21hcmtzijpbeyjpzci6imh0dhbzoi8vdhj1c3qtyw5jag9ylmv4yw1wbguuzxuvb3blbmlkx3jlbhlpbmdfcgfydhkvchvibgljlyisinrydxn0x21hcmsioijleupoyibcdtiwmjyifv19": 14, "_qt5": 14, "t6dahp3tuwa_27kle8i9z_spk2ftqlky6pgmpchbsi2ahxy3aaxdurobpo4chtqgg3j2xcrghdfucfgeq": 14, "eyjhbgcioijfuzi1niisimtpzci6imvxa3pubwt0ww5kblzhmwxhmju1zdjkq2rvzersazqwuwt0wvlvmwfhrfzyt1robfphdfdxsgq1wncilcj0exaioijhchbsawnhdglvbi9lbnrpdhktc3rhdgvtzw50k2p3dcj9": 14, "eyjlehaioje2ndk2mjm1ndysimlhdci6mty0otq1mdc0niwiaxnzijoiahr0chm6ly90cnvzdc1hbmnob3iuzxhhbxbszs5ldsisinn1yii6imh0dhbzoi8vaw50zxjtzwrpyxrllmvpzgfzlmv4yw1wbguub3jniiwiandrcyi6eyjrzxlzijpbeyjrdhkioijfqyisimtpzci6ilnurkrxv2hky0dwwfgzqjnsvmraywtsq0xutnvna000wtngnlfutk9krxryzfhgwvlywjjjwgn0uveilcjjcnyioijqlti1niisingioijyql9bogdcunh5njhvtkxzrkzlr0zmr2vmwu5xymgtszh1os1gylqyzkzjiiwiesi6ilnuwvk2y3njznkxcjbisfhltgjuvfzsamfndzhozznrues2wfvoc2uzdkuifv19lcj0cnvzdf9tyxjrcyi6w3siawqioijodhrwczovl3rydxn0lwfuy2hvci5legftcgxllmv1l2zlzgvyyxrpb25fzw50axr5l3royxqtchjvzmlszsisinrydxn0x21hcmsioijleupoyibcdtiwmjyifv19": 14, "r3uoi": 14, "u0tx0gdflndditbcwznupy7m2tnh08jld": 14, "ej9vmzwmcxoccuwin0zt0js4m_shneig6tlxrqj": 14, "hti70g": 14, "At": [14, 15], "attain": 14, "propag": 14, "thu": [14, 15, 16], "build": 14, "inquir": 14, "amount": 14, "matter": 14, "especi": 14, "perimet": 14, "jurisdict": 14, "snapshot": 14, "overload": 14, "primarili": 15, "met": [15, 16], "manipul": 15, "falsif": 15, "place": 15, "repeat": 15, "guarante": [15, 16], "prerequisit": 15, "_globalplatform_": 15, "_javacard_": 15, "modul": 15, "hybrid": [15, 16], "pluggabl": 15, "_euicc_": 15, "mix": 15, "acquisit": 15, "backend": 15, "defens": 15, "walletprovid": 15, "d2jhy2nhbg91cmvqdwfuzgft": 15, "exist": 15, "permit": 15, "achiev": [15, 16], "reput": 15, "execut": [15, 16], "tee": [15, 16], "distinct": [15, 16], "sdk": 15, "context": [15, 16], "unalt": 15, "bootload": 15, "plai": [15, 16], "devicecheck": 15, "key_attest": 15, "base64": 15, "put": 15, "0fe3cbe0": 15, "646d": 15, "44b5": 15, "8808": 15, "917dd5391bd9": 15, "o2nmbxrvyxbwbgutyxbw": 15, "redact": 15, "hardware_key_tag": 15, "wqhydymfksp95ifqpzdedww4l7avna2fn4jcewhytbu": 15, "discret": 15, "flaw": 15, "necessit": [15, 16], "safeguard": 15, "undergo": 15, "inclus": 15, "reiniti": 15, "solicit": 15, "produc": 15, "predetermin": 15, "client_data": 15, "client_data_hash": 15, "4hnpti": 15, "xr2pjyrjkgmnz4wmdnqd_ujsq4r95nj98b44": 15, "liznsb39vfjhygs3k7jxe4r3": 15, "cogfqwztpbirqpnlrg": 15, "hardware_signatur": 15, "integrity_assert": 15, "custom": 15, "construct": 15, "wallet_hardware_key_tag": 15, "public_jwk": 15, "war": 15, "6ec69324": 15, "60a8": 15, "4e5b": 15, "a697": 15, "a766d85790ea": 15, "kozihvcnaqccoiawgaib": 15, "o2nmbxrvyxbwbgutyxbwyx": 15, "jwt_vc_json": 15, "alg_values_support": 15, "es256k": 15, "jwt_vp_json": 15, "7523": 15, "bearer": 15, "3agrant": 15, "3ajwt": 15, "eyjhbgcioijfuzi1niisimtpzci6imtoakzwte9nrjnheg": 15, "reconstruct": 15, "5t5yypbhn": [15, 16], "egieei5iuzr6r0mr02lnvq0omekmnkcji": [15, 16], "eyjhbgcioijfuz": 15, "6s0a": 15, "jjla": 15, "h9gw": 15, "1687281195": 15, "1687288395": 15, "eyjhbgcioijfuzi1niisinr5cci6indhbgx": 15, "var": 15, "8414": 15, "boolean": 15, "encompass": 15, "depict": 15, "henc": 15, "uninstal": 15, "As": 15, "unilater": 15, "unus": 15, "comprehens": 16, "cater": 16, "asset": 16, "total": 16, "conveni": 16, "vital": 16, "essenti": 16, "mechanismm": 16, "utmost": 16, "unlock": 16, "pin": 16, "biometr": 16, "fingerprint": 16, "facial": 16, "recognit": 16, "unambigu": 16, "rel": 16, "revert": 16, "voluntarili": 16, "aal_values_support": 16, "medium": 16, "token_endpoint_auth_methods_suppor": 16, "ted": 16, "token_endpoint_auth_signing_alg_va": 16, "lues_support": 16, "experiment": 16, "qrjrj3af_b57sboirrcbm7br7woc8ynj7lhfpteffuk": 16, "1h0cwdyggvu8w": 16, "kpku_xycocunt2o0bwsliqtnpu6im": 16, "basic": 16, "private_key_jwt": 16, "1687171759": 16, "1709290159": 16, "inherit": 16, "extend": 16, "trusti": 16}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"cryptograph": 0, "algorithm": 0, "backup": 1, "restor": 1, "rst": [1, 8], "gener": [1, 8, 14], "properti": [1, 8, 14], "requir": [1, 8, 11, 14, 15, 16], "attribut": [1, 8], "implement": [1, 4, 8], "consider": [1, 8, 14], "librari": [1, 8], "code": [1, 8], "snippet": [1, 8], "extern": [1, 8, 16], "refer": [1, 8, 13, 16], "how": 2, "contribut": 2, "acknowledg": 2, "norm": [3, 5], "languag": 3, "convent": 3, "defin": 3, "term": 3, "acronym": 3, "The": [4, 14], "italian": 4, "eudi": [4, 14], "wallet": [4, 11, 14, 15, 16], "profil": 4, "introduct": [4, 12], "index": 4, "content": 4, "pid": [5, 6], "q": [5, 6], "eaa": [5, 6], "data": 5, "model": [5, 14], "sd": 5, "jwt": 5, "paramet": [5, 6, 14], "claim": 5, "non": [5, 14], "exampl": 5, "mdoc": [5, 7, 9], "cbor": 5, "namespac": 5, "mobil": 5, "secur": [5, 9, 10], "object": [5, 9, 10], "issuanc": [6, 15], "high": 6, "level": 6, "flow": [6, 7, 9, 10, 11], "detail": [6, 9, 10], "push": 6, "author": [6, 9, 10], "request": [6, 7, 9, 10, 11, 15], "endpoint": [6, 9, 10, 14, 16], "par": 6, "http": [6, 9, 10, 11], "respons": [6, 7, 9, 10, 11], "token": 6, "access": 6, "credenti": [6, 11], "entiti": [6, 9, 10, 14], "configur": [6, 9, 10, 14], "issuer": 6, "proxim": [7, 9], "devic": [7, 9, 10], "engag": [7, 9], "session": [7, 9], "termin": [7, 9], "pseudonym": 8, "reli": [9, 10, 14], "parti": [9, 10, 14], "solut": [9, 16], "remot": [9, 10], "uri": [9, 10], "post": [9, 10], "cross": [9, 10], "statu": [9, 10, 11], "check": [9, 10], "error": [9, 10], "redirect": [9, 10], "lifecycl": [11, 15, 16], "oper": [11, 16], "function": [11, 14], "revoc": [11, 15], "us": 11, "case": 11, "instanc": [11, 15, 16], "attest": [11, 14, 15, 16], "present": 11, "verifi": 11, "proof": 11, "possess": 11, "self": 12, "sovereign": 12, "ident": 12, "ssi": 12, "technic": 13, "infrastructur": 14, "trust": 14, "feder": 14, "role": 14, "api": 14, "common": 14, "anchor": 14, "leav": 14, "intermedi": 14, "metadata": [14, 16], "type": 14, "statement": 14, "evalu": 14, "mechan": 14, "chain": 14, "offlin": 14, "repudi": 14, "long": 14, "live": 14, "privaci": 14, "remark": 14, "about": 14, "decentr": 14, "static": 15, "compon": 15, "view": 15, "dynam": 15, "initi": [15, 16], "registr": 15, "state": [15, 16], "transit": [15, 16], "process": 16, "valid": 16, "return": 16, "deactiv": 16, "provid": 16, "header": 16, "payload": 16, "wallet_provid": 16, "federation_ent": 16}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx": 56}}) \ No newline at end of file diff --git a/rp-vp-kid/en/ssi-introduction.html b/rp-vp-kid/en/ssi-introduction.html new file mode 100644 index 000000000..027c0a52f --- /dev/null +++ b/rp-vp-kid/en/ssi-introduction.html @@ -0,0 +1,1460 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Self Sovereign Identity + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Self Sovereign Identity

+
+

Introduction to SSI

+

Definition

+

Self-Sovereign Identity (SSI) refers to a new paradigm in Identity and Access Management (IAM) that improves the privacy and grants complete control and ownership over the personal data by their owner, the citizens. +Users possess their digital documents and determine to which actors they present these documents, with the ability to revoke the use of said documents, all while maintaining a history of their activities.

+

The main difference between this new approach and the traditional IAM infrastructure is that during the presentation phase there are no intermediates between the Wallet (Holder of the credentials) and the Relying Party, while in the SAML2 or OIDC based infrastructure an Identity Provider is always involved, knowing which services a citizen is accessing to.

+

SSI is also significant in the field of data exchange and data governance. This is relevant at both national and European levels, including the new eIDAS Regulation. In fact, it envisions a login option designed for European Users - be they citizens, public administrations, or companies - who want to access another Member State's services using their national authentication systems.

+

The main roles in an SSI ecosystem are are listed as follow:

+
+
    +
  • Issuers: parties who can issue digital credentials about a person;

  • +
  • verifiers: parties who request Holders' digital credentials for authentication and authorization purposes;

  • +
  • Holders: individuals who own a Wallet and have control over the digital credentials they can request, acquire, store, and present to verifiers;

  • +
  • Verifiable Data Registries: Authorities that publish certificates, attestations, metadata, and schemes needed for allowing the trust establishment between the parties.

  • +
+
+

In the SSI model, the data source (e.g., an educational institution) provides digital credentials to the User, who can store them in their digital Wallet. +A secure Self-Sovereign Identity Wallet is crucial, as it allows people to carry their credentials on their personal digital devices. The Wallet typically comes in the form of an application on the User's mobile phone. Portability is, therefore, one of the principles of SSI.

+

Other key elements that characterize an SSI system include:

+
+
    +
  • Privacy and control: SSI enables individuals to maintain control over their personal data. They can choose what information to release, to whom, and for what purpose;

  • +
  • Security: SSI leverages advanced cryptographic techniques to ensure the integrity and security of identity information. It avoids the risk of identity theft, fraud, and unauthorized access since the data remains under the individual's control;

  • +
  • Interoperability: SSI promotes interoperability by enabling different systems and organizations to recognize and verify identities without relying on a central authority. This allows for seamless and trusted interactions between individuals, organizations, and even across borders;

  • +
  • Efficiency and cost reduction: individuals can manage their own identities with SSI, eliminating the need for multiple identity credentials and repetitive identity verification processes. This can streamline administrative procedures, reduce costs, and enhance the user experience.

  • +
+
+

Example

+

When a User wants to purchase a good or access to a service, the service provider asks the User for authentication or for a specific proof. Instead of presenting physical identification documents or disclosing their full data, the individual can use their SSI system if supported by the service provider. +An example of SSI in action could be a scenario where an individual needs to prove their age to access a restricted service, such as purchasing age-restricted items. They would release only the necessary information, such as a digitally signed proof of being above the legal age, without revealing any other personal details. The verifier can then cryptographically validate the proof.

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/standards.html b/rp-vp-kid/en/standards.html new file mode 100644 index 000000000..a0754dfcc --- /dev/null +++ b/rp-vp-kid/en/standards.html @@ -0,0 +1,1513 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Technical References + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Technical References

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

OIDC-FED

OpenID Connect Federation 1.0.

OPENID4VCI

    +
  1. Lodderstedt, K. Yasuda, T. Looker, "OpenID for Verifiable Credential Issuance", February 2023.

  2. +
+

SD-JWT-VC

    +
  1. Terbu, D.Fett, "SD-JWT-based Verifiable Credentials (SD-JWT VC)".

  2. +
+

EIDAS-ARF

EUDI Wallet - Architecture and Reference Framework.

OPENID4VP

OpenID for Verifiable Presentations.

PresentationExch

Presentation Exchange 2.0 for Presentation Definition.

RFC 2119

Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels" BCP 14, RFC 2119, March 1997.

RFC 2616

Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter, L., Leach, P., and T. Berners-Lee, “Hypertext Transfer Protocol -- HTTP/1.1,” RFC 2616, June 1999.

RFC 3339

Klyne, G. and C. Newman, "Date and Time on the Internet: Timestamps", RFC 3339, DOI 10.17487/RFC3339, July 2002.

RFC 3986

Uniform Resource Identifier (URI): Generic Syntax.

RFC 7159

Bray, T., “The JavaScript Object Notation (JSON) Data Interchange Format” RFC 7159, March 2014.

RFC 7515

Jones, M., Bradley, J. and N. Sakimura, "JSON Web Signature (JWS)", RFC 7515, DOI 10.17487/RFC7515, May 2015.

RFC 7516

Jones, M., Hildebrand, J., "JSON Web Encryption (JWE)", May 2015.

RFC 7517

Jones, M., "JSON Web Key (JWK)", RFC 7517, DOI 10.17487/RFC7517, May 2015.

RFC 7518

Jones, M., "JSON Web Algorithms (JWA)", May 2015.

RFC 7519

Jones, M., Bradley, J. and N. Sakimura, "JSON Web Token (JWT)", RFC 7519, DOI 10.17487/RFC7519, May 2015.

RFC 7638

Jones, M., Sakimura, N., “JSON Web Key (JWK) Thumbprint”, September 2015.

RFC 7800

Jones, M., Bradley, J. and H. Tschofenig, "Proof-of-Possession Key Semantics for JSON Web Tokens (JWTs)", RFC 7800, DOI 10.17487/RFC7800, April 2016.

RFC 8174

Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", RFC 8174, DOI 10.17487/RFC8174, May 2017.

RFC 8725

Jones, M., D. Hardt, Sheffer, Y., "JSON Web Token Best Current Practices", February 2020.

JARM

Lodderstedt, T., Campbell, B., "JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)", November 2022.

RFC 6749

The OAuth 2.0 Authorization Framework.

RFC 9449

    +
  1. Fett, B. Campbell, J. Bradley, T. Lodderstedt, M. Jones, D. Waite, "OAuth 2.0 Demonstrating Proof-of-Possession at the Application Layer (DPoP)".

  2. +
+

OPENID4VC-HAIP

Lodderstedt, T., K. Yasuda, "OpenID4VC High Assurance Interoperability Profile with SD-JWT VC".

+
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/trust.html b/rp-vp-kid/en/trust.html new file mode 100644 index 000000000..59da38ec7 --- /dev/null +++ b/rp-vp-kid/en/trust.html @@ -0,0 +1,2104 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | The Infrastructure of Trust + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

The Infrastructure of Trust

+

The EUDI Wallet Architecture Reference Framework (EIDAS-ARF) describes the Trust Model as a "collection of rules that ensure the legitimacy of the components and the entities involved in the EUDI Wallet ecosystem".

+

This section outlines the implementation of the Trust Model in an infrastructure that complies with OpenID Federation 1.0 OIDC-FED. This infrastructure involves a RESTful API for distributing metadata, metadata policies, trust marks, public keys, X.509 certificates, and the revocation status of the participants, also called Federation Entities.

+

The Infrastructure of trust facilitates the application of a trust assessment mechanism among the parties defined in the EIDAS-ARF.

+
+federation portrait +
+

Fig. 1 The roles within the Federation, where the Trust Anchor oversees its subordinates, +which include one or more Intermediates and Leaves. In this +representation, both the Trust Anchor and the Intermediates MAY assume the role of Accreditation Body.

+
+
+
+

Functional Requirements

+

This section includes the requirements necessary for the successful implementation and operation of the infrastructure of trust.

+
    +
  • [FR #1] - Federation Trust Establishment: the system must be able to establish trust between different entities (Credential Issuers, Relying Parties, etc.) within a federation, using cryptographic signatures for secure information exchange about the participants in the ecosystem.

  • +
  • [FR #2] - Entity Authentication: the system must implement mechanisms for authenticating entities within the federation, ensuring compliance with the shared rules.

  • +
  • [FR #3] - Signature Validation: the system must support the creation, verification, and validation of electronic signatures and provide standard and secure mechanisms to obtain the public keys required for the signature validation.

  • +
  • [FR #4] - Time Stamping: the signed artifacts must contain time stamps to ensure the integrity and non-repudiation of transactions over time, thanks to the interfaces, services, storage model and approaches defined within the federation.

  • +
  • [FR #5] - Certificate Validation: the system requires confidential transmission, secured via TLS over HTTP, and validation of certificates for website authentication, ensuring they meet eIDAS criteria.

  • +
  • [FR #6] - Interoperability and Standards Compliance: ensure interoperability between federation members by adhering to technical standards, facilitating cross-border electronic transactions.

  • +
  • [FR #7] - Data Protection and Privacy: implement data protection measures in compliance with GDPR and eIDAS regulations, ensuring the privacy and security of personal data processed within the federation.

  • +
  • [FR #8] - User Consent and Control: design mechanisms for obtaining and managing user consent, empowering users with control over their personal information.

  • +
  • [FR #9] - Audit and Logging: the system must minimize data, anonymize if possible, define retention periods, secure access, and storage encryption. This protects privacy while enabling security and accountability.

  • +
  • [FR #10] - Dispute Resolution and Liability: establish clear procedures for dispute resolution and define liability among federation members, in accordance with eIDAS provisions.

  • +
  • [FR #11] - Accessibility: ensure that the system is accessible to all users, including those with disabilities, aligning with eIDAS and local accessibility standards.

  • +
  • [FR #12] - Emergency and Revocation Services: implement mechanisms for the immediate revocation of electronic identification means and participants in case of security breaches or other emergencies.

  • +
  • [FR #13] - Scalable Trust Infrastructure: the system must support scalable trust establishment mechanisms, leveraging approaches and technical solutions that complement delegation transitive approaches to efficiently manage trust relationships as the federation grows, removing central registries that might technically or administratively fail.

  • +
  • [FR #14] - Efficient Storage Scalability: implement a storage solution that scales horizontally to accommodate increasing data volumes while minimizing central storage and administrative costs. The system should enable members to independently store and present historical trust attestations and signed artifacts during dispute resolutions, with the federation infrastructure maintaining only a registry of historical keys to validate the historical data, stored and provided by the participants.

  • +
  • [FR #15] - Verifiable Attestation (Trust Mark): incorporate a mechanism for issuing and verifying verifiable attestations that serve as proof of compliance with specific profiles or standards. This allows entities within the federation to demonstrate adherence to agreed-upon security, privacy, and operational standards.

  • +
  • [FR #16] - Dynamic Policy Language: develop and implement a dynamic, extensible policy language that allows for the creation and modification of federation policies in response to evolving requirements, technological advancements, and regulatory changes. This policy language should support the specification of rules governing entity behavior, metadata handling, and trust validation within the federation.

  • +
  • [FR #17] - Automated Policy Enforcement: the system must automatically enforce federation policies as defined by policy language and verifiable attestations, ensuring that all operations and transactions comply with current rules and standards.

  • +
  • [FR #18] - Decentralized Dispute Resolution Mechanism: design a decentralized mechanism for dispute resolution that allows federation members to independently verify historical trust establishment and signed artifacts, reducing reliance on central authorities and streamlining the resolution process.

  • +
  • [FR #19] - Adaptive Load Management: implement adaptive load management strategies to ensure the system remains responsive and efficient under varying loads, particularly during peak usage times or when processing complex tasks.

  • +
  • [FR #20] - Cross-Federation Interoperability: ensure the system is capable of interoperating with other federations or trust frameworks, facilitating cross-federation transactions and trust establishment without compromising security or compliance.

  • +
  • [FR #21] - Future-Proof Cryptography: the system should employ a flexible cryptographic framework that can be updated in response to new threats or advancements in cryptographic research, ensuring long-term security and integrity of federation operations.

  • +
  • [FR #23] - Autonomous Accreditation Bodies: the system must facilitate the integration of autonomous accreditation bodies that operate in compliance with federation rules. These bodies are tasked with evaluating and accrediting entities within the federation, according to the pre-established rules and their compliance that must be periodically asserted.

  • +
  • [FR #24] - Compliance Evaluation for Federation Entity Candidates: accreditation bodies must evaluate the compliance of candidate entities against federation standards before their registration in the federation.

  • +
  • [FR #25] - Periodic Auditing of Accreditation Bodies and Entities: implement mechanisms for the periodic auditing and monitoring of the compliance status of both accreditation bodies and their accredited entities. This ensures ongoing adherence to federation standards and policies.

  • +
  • [FR #26] - Certification of Compliance for Personal Devices: trusted bodies, in the form of federation entities, should issue certifications of compliance and provide signed proof of such compliance for the hardware of personal devices used within the federation. These certifications should be attested and periodically renewed to ensure the devices meet current security standards.

  • +
  • [FR #27] - Certification of Compliance for Cryptographic Devices: similar to personal devices, personal cryptographic devices used within the federation must also receive certifications of compliance and signed proof thereof from trusted bodies. These certifications should be subject to periodic renewal to reflect the latest security and compliance standards.

  • +
  • [FR #28] - Transparent Compliance Reporting: develop a system for transparent reporting and publication of compliance statuses, audit results, and certification renewals for all federation entities. This transparency fosters trust within the federation and with external stakeholders.

  • +
  • [FR #29] - Automated Compliance Monitoring: the system should include automated tools for monitoring the compliance of entities with federation standards. This automation aids in the early detection of potential compliance issues.

  • +
  • [FR #30] - Secure Protocol Capabilities Binding: the secure protocol must enable the exchange of protocol-specific capabilities data as cryptographically-bound metadata attached to a specific identity. This metadata should define the technical capabilities associated with the identity, ensuring verifiable proof and tamper-proof association for robust trust establishment and access control.

  • +
+
+
+

Federation Roles

+

All the participants are Federation Entities that MUST be accredited by an Accreditation Body, +except for Wallet Instances which are End-User's personal devices certified by their Wallet Provider.

+
+

Note

+

The Wallet Instance, as a personal device, is certified as reliable through a verifiable attestation issued and signed by a trusted third party.

+

This is called Wallet Attestation and is documented in the dedicated section.

+
+

Below the table with the summary of the Federation Entity roles, mapped on the corresponding EUDI Wallet roles, as defined in the EIDAS-ARF.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

EUDI Role

Federation Role

Notes

Public Key Infrastructure (PKI)

Trust Anchor

The Federation has PKI capabilities. The Entity that configures the entire infrastructure is the Trust Anchor.

Qualified Trust Service Provider (QTSP)

Leaf

Person Identification Data Provider

Leaf

Qualified Electronic Attestations of Attributes Provider

Leaf

Electronic Attestations of Attributes Provider

Leaf

Relying Party

Leaf

Trust Service Provider (TSP)

Leaf

Trusted List

Trust Anchor

The listing endpoint, the trust mark status endpoint, and the fetch endpoint must be exposed by both Trust Anchors and Intermediates, making the Trusted List distributed over multiple Federation Entities, where each of these is responsible for their accredited subordinates.

Wallet Provider

Leaf

+
+
+

General Properties

+

The architecture of the trust infrastructure based on OpenID Federation is built upon several core principles:

+
    +
  • [P1] Security: incorporates mechanisms to ensure the integrity, confidentiality, and authenticity of the trust relationships and interactions within the federation.

  • +
  • [P2] Privacy: designed to respect and protect the privacy of the entities and individuals involved, minimal disclosure is part of this.

  • +
  • [P3] Interoperability: supports seamless interaction and trust establishment between diverse systems and entities within the federation.

  • +
  • [P4] Transitive Trust: trust established indirectly through a chain of trusted relationships, enabling entities to trust each other based on common authorities and trusted intermediaries.

  • +
  • [P6] Scalability: designed to efficiently manage an increasing number of entities or interactions without a significant increase in trust management complexity.

  • +
  • [P5] Delegation: technical ability/feature to delegate authority or responsibilities to other entities, allowing for a distributed trust mechanism.

  • +
  • [P7] Flexibility: adaptable to various operational and organizational needs, allowing entities to define and adjust their trust relationships and policies.

  • +
  • [P8] Autonomy: while part of a federated ecosystem, each entity retains control over its own definitions and configurations.

  • +
  • [P9] Decentralization: unlike traditional centralized systems, the OpenID Federation model promotes a decentralized approach. This ensures that no single entity has control over the entire system, enhancing privacy and security for all participants.

  • +
+
+
+

Trust Model Requirements

+

In the table below is provided the map of the components that the ARF defines within the Trust Model, in the same table is provided their coverage in OIDC-FED.

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Component

Satisfied

How

Issuers identification

check-icon

Trust Chain

Issuers registration

check-icon

Trust Anchor, Intermediates accreditation system

Recognised data models and schemas

check-icon

Entity Configuration, Entity Statements

Relying Parties' registration and authentication

check-icon

Trust Chains, Federation Entity Discovery

Trust mechanisms in a cross-domain scenario

check-icon

Trust Chains, Federation Entity Discovery

+
+
+

Federation API endpoints

+

OpenID Federation 1.0 uses RESTful Web Services secured over +HTTPs. OpenID Federation 1.0 defines which are the web endpoints that the participants MUST make +publicly available. The table below summarises the endpoints and their scopes.

+

All the endpoints listed below are defined in the OIDC-FED specs.

+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

endpoint name

http request

scope

required for

federation metadata

GET .well-known/openid-federation

Metadata that an Entity publishes about itself, verifiable with a trusted third party (Superior Entity). It's called Entity Configuration.

Trust Anchor, Intermediate, Wallet Provider, Relying Party, Credential Issuer

subordinate list endpoint

GET /list

Lists the Subordinates.

Trust Anchor, Intermediate

fetch endpoint

GET /fetch?sub=https://rp.example.org

Returns a signed document (JWS) about a specific subject, its Subordinate. It's called Entity Statement.

Trust Anchor, Intermediate

trust mark status

POST /status?sub=...&trust_mark_id=...

Returns the status of the issuance (validity) of a Trust Mark related to a specific subject.

Trust Anchor, Intermediate

historical keys

GET /historical-jwks

Lists the expired and revoked keys, with the motivation of the revocation.

Trust Anchor, Intermediate

+

All the responses of the federation endpoints are in the form of JWS, with the exception of the Subordinate Listing endpoint and the Trust Mark Status endpoint that are served as plain JSON by default.

+
+
+

Configuration of the Federation

+

The configuration of the federation is published by the Trust Anchor within its Entity Configuration, it is available at the well-known web path corresponding to .well-known/openid-federation.

+

All the participants in the federation MUST obtain the federation configuration before entering the operational phase, and they +MUST keep it up-to-date. The federation configuration is the Trust Anchor's Entity Configuration, it contains the +public keys for signature operations and the maximum number of Intermediates allowed between a Leaf and the Trust Anchor (max_path_length).

+

Below is a non-normative example of a Trust Anchor Entity Configuration, where each parameter is documented in the OpenID Federation specification:

+
{
+    "alg": "ES256",
+    "kid": "FifYx03bnosD8m6gYQIfNHNP9cM_Sam9Tc5nLloIIrc",
+    "typ": "entity-statement+jwt"
+}
+.
+{
+    "exp": 1649375259,
+    "iat": 1649373279,
+    "iss": "https://registry.eidas.trust-anchor.example.eu",
+    "sub": "https://registry.eidas.trust-anchor.example.eu",
+    "jwks": {
+        "keys": [
+            {
+
+                "kty": "EC",
+                "kid": "X2ZOMHNGSDc4ZlBrcXhMT3MzRmRZOG9Jd3o2QjZDam51cUhhUFRuOWd0WQ",
+                "crv": "P-256",
+                "x": "1kNR9Ar3MzMokYTY8BRvRIue85NIXrYX4XD3K4JW7vI",
+                "y": "slT14644zbYXYF-xmw7aPdlbMuw3T1URwI4nafMtKrY"
+            }
+        ]
+    },
+    "metadata": {
+        "federation_entity": {
+            "organization_name": "example TA",
+            "contacts":[
+                "tech@eidas.trust-anchor.example.eu"
+            ],
+            "homepage_uri": "https://registry.eidas.trust-anchor.example.eu",
+            "logo_uri":"https://registry.eidas.trust-anchor.example.eu/static/svg/logo.svg",
+            "federation_fetch_endpoint": "https://registry.eidas.trust-anchor.example.eu/fetch",
+            "federation_resolve_endpoint": "https://registry.eidas.trust-anchor.example.eu/resolve",
+            "federation_list_endpoint": "https://registry.eidas.trust-anchor.example.eu/list",
+            "federation_trust_mark_status_endpoint": "https://registry.eidas.trust-anchor.example.eu/trust_mark_status"
+        }
+    },
+    "trust_mark_issuers": {
+        "https://registry.eidas.trust-anchor.example.eu/openid_relying_party/public": [
+            "https://registry.spid.eidas.trust-anchor.example.eu",
+            "https://public.intermediary.spid.org"
+        ],
+        "https://registry.eidas.trust-anchor.example.eu/openid_relying_party/private": [
+            "https://registry.spid.eidas.trust-anchor.example.eu",
+            "https://private.other.intermediary.org"
+        ]
+    },
+    "constraints": {
+        "max_path_length": 1
+    }
+}
+
+
+
+
+

Entity Configuration

+

The Entity Configuration is the verifiable document that each Federation Entity MUST publish on its own behalf, in the .well-known/openid-federation endpoint.

+

The Entity Configuration HTTP Response MUST set the media type to application/entity-statement+jwt.

+

The Entity Configuration MUST be cryptographically signed. The public part of this key MUST be provided in the +Entity Configuration and within the Entity Statement issued by a immediate superior and related to its subordinate Federation Entity.

+

The Entity Configuration MAY also contain one or more Trust Marks.

+
+

Note

+

Entity Configuration Signature

+

All the signature-check operations regarding the Entity Configurations, Entity Statements and Trust Marks, are carried out with the Federation public keys. For the supported algorithms refer to Section Cryptografic Algorithm.

+
+
+

Entity Configurations Common Parameters

+

The Entity Configurations of all the participants in the federation MUST have in common the parameters listed below.

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

iss

String. Identifier of the issuing Entity.

sub

String. Identifier of the Entity to which it is referred. It MUST be equal to iss.

iat

UNIX Timestamp with the time of generation of the JWT, coded as NumericDate as indicated at RFC 7519.

exp

UNIX Timestamp with the expiry time of the JWT, coded as NumericDate as indicated at RFC 7519.

jwks

A JSON Web Key Set (JWKS) RFC 7517 that represents the public part of the signing keys of the Entity at issue. Each JWK in the JWK set MUST have a key ID (claim kid) and MAY have a x5c parameter, as defined in RFC 7517. It contains the Federation Entity Keys required for the operations of trust evaluation.

metadata

JSON Object. Each key of the JSON Object represents a metadata type identifier +containing JSON Object representing the metadata, according to the metadata +schema of that type. An Entity Configuration MAY contain more metadata statements, but only one for each type of +metadata (<entity_type>). the metadata types are defined in the section Metadata Types.

+
+
+

Entity Configuration Trust Anchor

+

The Trust Anchor Entity Configuration, in addition of the common parameters listed above, MAY contain the following parameters:

+ +++++ + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Required

constraints

JSON Object that describes the trust evaluation mechanisms bounds. It MUST contain the attribute max_path_length that +defines the maximum number of Intermediates between a Leaf and the Trust Anchor.

check-icon

trust_mark_issuers

JSON Array that defines which Federation authorities are considered trustworthy +for issuing specific Trust Marks, assigned with their unique identifiers.

uncheck-icon

trust_mark_owners

JSON Array that lists which entities are considered to be the owners of +specific Trust Marks.

uncheck-icon

+
+
+

Entity Configuration Leaves and Intermediates

+

In addition to the previously defined claims, the Entity Configuration of the Leaf and of the Intermediate Entities, MUST contain the parameters listed below:

+ +++++ + + + + + + + + + + + + + + + + +

Claim

Description

Required

authority_hints

Array of URLs (String). It contains a list of URLs of the immediate superior entities, such as the Trust Anchor or +an Intermediate, that issues an Entity Statement related to this subject.

check-icon

trust_marks

A JSON Array containing the Trust Marks.

uncheck-icon

+
+
+

Metadata Types

+

In this section are defined the main metadata types mapped to the roles of the ecosystem, +giving the references of the metadata protocol for each of these.

+
+

Note

+

The entries that don't have any reference to a known draft or standard are intended to be defined in this technical reference.

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

OpenID Entity

EUDI Entity

Metadata Type

References

Trust Anchor

Trust Anchor

federation_entity

OIDC-FED

Intermediate

Intermediate

federation_entity

OIDC-FED

Wallet Provider

Wallet Provider

federation_entity, wallet_provider

--

Authorization Server

federation_entity, oauth_authorization_server

OPENID4VCI

Credential Issuer

PID Provider, (Q)EAA Provider

federation_entity, openid_credential_issuer, [oauth_authorization_server]

OPENID4VCI

Relying Party

Relying Party

federation_entity, wallet_relying_party

OIDC-FED, OpenID4VP

+
+

Note

+

Wallet Provider metadata is defined in the section below.

+

Wallet Solution section.

+
+
+

Note

+

In instances where a PID/EAA Provider implements both the Credential Issuer and the Authorization Server, +it MUST incorporate both +oauth_authorization_server and openid_credential_issuer within its metadata types. +Other implementations may divide the Credential Issuer from the Authorization Server, when this happens the Credential Issuer metadata MUST contain the authorization_servers parameters, including the Authorization Server unique identifier. +Furthermore, should there be a necessity for User Authentication by the Credential Issuer, +it could be necessary to include the relevant metadata type, either openid_relying_party +or wallet_relying_party.

+
+
+
+
+

Entity Statements

+

Trust Anchors and Intermediates publish Entity Statements related to their immediate Subordinates. +The Entity Statement MAY contain a metadata policy and the Trust Marks related to a Subordinate.

+

The metadata policy, when applied, makes one or more changes to the final metadata of the Leaf. The final metadata of a Leaf is derived from the Trust Chain that contains all the statements, starting from the Entity Configuration up to the Entity Statement issued by the Trust Anchor.

+

Trust Anchors and Intermediates MUST expose the Federation Fetch endpoint, where the Entity Statements are requested to validate the Leaf's Entity Configuration signature.

+
+

Note

+

The Federation Fetch endpoint MAY also publish X.509 certificates for each of the public keys of the Subordinate. Making the distribution of the issued X.509 certificates via a RESTful service.

+
+

Below there is a non-normative example of an Entity Statement issued by an Accreditation Body (such as the Trust Anchor or its Intermediate) in relation to one of its Subordinates.

+
{
+    "alg": "ES256",
+    "kid": "em3cmnZgHIYFsQ090N6B3Op7LAAqj8rghMhxGmJstqg",
+    "typ": "entity-statement+jwt"
+}
+.
+{
+    "exp": 1649623546,
+    "iat": 1649450746,
+    "iss": "https://intermediate.eidas.example.org",
+    "sub": "https://rp.example.it",
+    "jwks": {
+        "keys": [
+            {
+                "kty": "EC",
+                "kid": "2HnoFS3YnC9tjiCaivhWLVUJ3AxwGGz_98uRFaqMEEs",
+                "crv": "P-256",
+                "x": "1kNR9Ar3MzMokYTY8BRvRIue85NIXrYX4XD3K4JW7vI",
+                "y": "slT14644zbYXYF-xmw7aPdlbMuw3T1URwI4nafMtKrY",
+                "x5c": [ <X.509 certificate> ]
+            }
+        ]
+    },
+    "metadata_policy": {
+        "wallet_relying_party": {
+            "scope": {
+                "subset_of": [
+                     "eu.europa.ec.eudiw.pid.1",
+                     "given_name",
+                     "family_name",
+                     "email"
+                  ]
+            },
+            "vp_formats": {
+                "vc+sd-jwt": {
+                    "sd-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ],
+                    "kb-jwt_alg_values": [
+                        "ES256",
+                        "ES384"
+                    ]
+                }
+            }
+        }
+     }
+}
+
+
+
+

Note

+

Entity Statement Signature

+

The same considerations and requirements made for the Entity Configuration +and in relation to the signature mechanisms MUST be applied for the Entity Statements.

+
+
+

Entity Statement

+

The Entity Statement issued by Trust Anchors and Intermediates contains the following attributes:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Required

iss

See OIDC-FED Section 3.1 for further details.

check-icon

sub

See OIDC-FED Section 3.1 for further details.

check-icon

iat

See OIDC-FED Section 3.1 for further details.

check-icon

exp

See OIDC-FED Section 3.1 for further details.

check-icon

jwks

Federation JWKS of the sub entity. See OIDC-FED Section 3.1 for further details.

check-icon

metadata_policy

JSON Object that describes the Metadata policy. Each key of the JSON Object represents an identifier of the metadata type and each value MUST be a JSON Object that represents the metadata policy according to that metadata type. Please refer to the OIDC-FED specifications, Section-5.1, for the implementation details.

uncheck-icon

trust_marks

JSON Array containing the Trust Marks issued by itself for the subordinate subject.

uncheck-icon

constraints

It MAY contain the allowed_leaf_entity_types, that restricts what types of metadata the subject is allowed to publish.

check-icon

+
+
+
+

Trust Evaluation Mechanism

+

The Trust Anchor publishes the list of its Subordinates (Federation Subordinate Listing endpoint) and the attestations of their metadata and public keys (Entity Statements).

+

Each participant, including Trust Anchor, Intermediate, Credential Issuer, Wallet Provider, and Relying Party, publishes its own metadata and public keys (Entity Configuration endpoint) in the well-known web resource .well-known/openid-federation.

+

Each of these can be verified using the Entity Statement issued by a superior, such as the Trust Anchor or an Intermediate.

+

Each Entity Statement is verifiable over time and MUST have an expiration date. The revocation of each statement is verifiable in real time and online (only for remote flows) through the federation endpoints.

+
+

Note

+

The revocation of an Entity is made with the unavailability of the Entity Statement related to it. If the Trust Anchor or its Intermediate doesn't publish a valid Entity Statement, or if it publishes an expired/invalid Entity Statement, the subject of the Entity Statement MUST be intended as not valid or revoked.

+
+

The concatenation of the statements, through the combination of these signing mechanisms and the binding of claims and public keys, forms the Trust Chain.

+

The Trust Chains can also be verified offline, using one of the Trust Anchor's public keys.

+
+

Note

+

Since the Wallet Instance is not a Federation Entity, the Trust Evaluation Mechanism related to it requires the presentation of the Wallet Attestation during the credential issuance and presentation phases.

+

The Wallet Attestation conveys all the required information pertaining to the instance, such as its public key and any other technical or administrative information, without any User's personal data.

+
+
+

Relying Party Attestation

+

The Relying Party is accredited by a Trust Anchor or its Intermediate and obtains a Trust Mark to be included in its Entity Configuration. In its Entity Configuration the Relying Party publishes its specific metadata, including the supported signature and encryption algorithms and any other necessary information for the interoperability requirements.

+

Any requests for User attributes, such as PID or (Q)EAA, from the Relying Party to Wallet Instances are signed and SHOULD contain the verifiable Trust Chain regarding the Relying Party.

+

The Wallet Instance verifies that the Trust Chain related to the Relying Party is still active, proving that the Relying Party is still part of the Federation and not revoked.

+

The Trust Chain SHOULD be contained within the signed request in the form of a JWS header parameter.

+

In offline flows, Trust Chain verification enables the assessment of the reliability of Trust Marks and Attestations contained within.

+
+
+

Wallet Attestation

+

The Wallet Provider issues the Wallet Attestation, certifying the operational status of its Wallet Instances and including one of their public keys.

+

The Wallet Attestation contains the Trust Chain that attests the reliability for its issuer (Wallet Provider) at the time of issuance.

+

The Wallet Instance provides its Wallet Attestation within the signed request during the PID issuance phase, containing the Trust Chain related to the Wallet Provider.

+
+
+

Trust Chain

+

The Trust Chain is a sequence of verified statements that validates a participant's compliance with the Federation. It has an expiration date time, beyond which it MUST be renewed to obtain the fresh and updated metadata. The expiration date of the Trust Chain is determined by the earliest expiration timestamp among all the expiration timestamp contained in the statements. No Entity can force the expiration date of the Trust Chain to be higher than the one configured by the Trust Anchor.

+

Below is an abstract representation of a Trust Chain.

+
[
+    "EntityConfiguration-as-SignedJWT-selfissued-byLeaf",
+    "EntityStatement-as-SignedJWT-issued-byTrustAnchor"
+]
+
+
+

Below is a non-normative example of a Trust Chain in its original format (JSON Array containing JWS as strings) with an Intermediate involved.

+
[
+  "eyJhbGciOiJFUzI1NiIsImtpZCI6Ik5GTTFXVVZpVWxZelVXcExhbWxmY0VwUFJWWTJWWFpJUmpCblFYWm1SSGhLWVVWWVVsZFRRbkEyTkEiLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk1OTA2MDIsImlhdCI6MTY0OTQxNzg2MiwiaXNzIjoiaHR0cHM6Ly9ycC5leGFtcGxlLm9yZyIsInN1YiI6Imh0dHBzOi8vcnAuZXhhbXBsZS5vcmciLCJqd2tzIjp7ImtleXMiOlt7Imt0eSI6IkVDIiwia2lkIjoiTkZNMVdVVmlVbFl6VVdwTGFtbGZjRXBQUlZZMlZYWklSakJuUVhabVJIaEtZVVZZVWxkVFFuQTJOQSIsImNydiI6IlAtMjU2IiwieCI6InVzbEMzd2QtcFgzd3o0YlJZbnd5M2x6cGJHWkZoTjk2aEwyQUhBM01RNlkiLCJ5IjoiVkxDQlhGV2xkTlNOSXo4a0gyOXZMUjROMThCa3dHT1gyNnpRb3J1UTFNNCJ9XX0sIm1ldGFkYXRhIjp7Im9wZW5pZF9yZWx5aW5nX3BhcnR5Ijp7ImFwcGxpY2F0aW9uX3R5cGUiOiJ3ZWIiLCJjbGllbnRfaWQiOiJodHRwczovL3JwLmV4YW1wbGUub3JnLyIsImNsaWVudF9yZWdpc3RyYXRpb25fdHlwZXMiOlsiYXV0b21hdGljIl0sImp3a3MiOnsia2V5cyI6W3sia3R5IjoiRUMiLCJraWQiOiJORk0xV1VWaVVsWXpVV3BMYW1sZmNFcFBSVlkyVlhaSVJqQm5RWFptUkhoS1lVVllVbGRUUW5BMk5BIiwiY3J2IjoiUC0yNTYiLCJ4IjoidXNsQzN3ZC1wWDN3ejRiUllud3kzbHpwYkdaRmhOOTZoTDJBSEEzTVE2WSIsInkiOiJWTENCWEZXbGROU05JejhrSDI5dkxSNE4xOEJrd0dPWDI2elFvcnVRMU00In1dfSwiY2xpZW50X25hbWUiOiJOYW1lIG9mIGFuIGV4YW1wbGUgb3JnYW5pemF0aW9uIiwiY29udGFjdHMiOlsib3BzQHJwLmV4YW1wbGUuaXQiXSwiZ3JhbnRfdHlwZXMiOlsicmVmcmVzaF90b2tlbiIsImF1dGhvcml6YXRpb25fY29kZSJdLCJyZWRpcmVjdF91cmlzIjpbImh0dHBzOi8vcnAuZXhhbXBsZS5vcmcvb2lkYy9ycC9jYWxsYmFjay8iXSwicmVzcG9uc2VfdHlwZXMiOlsiY29kZSJdLCJzY29wZSI6ImV1LmV1cm9wYS5lYy5ldWRpdy5waWQuMSBldS5ldXJvcGEuZWMuZXVkaXcucGlkLml0LjEgZW1haWwiLCJzdWJqZWN0X3R5cGUiOiJwYWlyd2lzZSJ9LCJmZWRlcmF0aW9uX2VudGl0eSI6eyJmZWRlcmF0aW9uX3Jlc29sdmVfZW5kcG9pbnQiOiJodHRwczovL3JwLmV4YW1wbGUub3JnL3Jlc29sdmUvIiwib3JnYW5pemF0aW9uX25hbWUiOiJFeGFtcGxlIFJQIiwiaG9tZXBhZ2VfdXJpIjoiaHR0cHM6Ly9ycC5leGFtcGxlLml0IiwicG9saWN5X3VyaSI6Imh0dHBzOi8vcnAuZXhhbXBsZS5pdC9wb2xpY3kiLCJsb2dvX3VyaSI6Imh0dHBzOi8vcnAuZXhhbXBsZS5pdC9zdGF0aWMvbG9nby5zdmciLCJjb250YWN0cyI6WyJ0ZWNoQGV4YW1wbGUuaXQiXX19LCJ0cnVzdF9tYXJrcyI6W3siaWQiOiJodHRwczovL3JlZ2lzdHJ5LmVpZGFzLnRydXN0LWFuY2hvci5leGFtcGxlLmV1L29wZW5pZF9yZWx5aW5nX3BhcnR5L3B1YmxpYy8iLCJ0cnVzdF9tYXJrIjoiZXlKaCBcdTIwMjYifV0sImF1dGhvcml0eV9oaW50cyI6WyJodHRwczovL2ludGVybWVkaWF0ZS5laWRhcy5leGFtcGxlLm9yZyJdfQ.Un315HdckvhYA-iRregZAmL7pnfjQH2APz82blQO5S0sl1JR0TEFp5E1T913g8GnuwgGtMQUqHPZwV6BvTLA8g",
+  "eyJhbGciOiJFUzI1NiIsImtpZCI6IlNURkRXV2hKY0dWWFgzQjNSVmRaYWtsQ0xUTnVNa000WTNGNlFUTk9kRXRyZFhGWVlYWjJjWGN0UVEiLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk2MjM1NDYsImlhdCI6MTY0OTQ1MDc0NiwiaXNzIjoiaHR0cHM6Ly9pbnRlcm1lZGlhdGUuZWlkYXMuZXhhbXBsZS5vcmciLCJzdWIiOiJodHRwczovL3JwLmV4YW1wbGUub3JnIiwiandrcyI6eyJrZXlzIjpbeyJrdHkiOiJFQyIsImtpZCI6Ik5GTTFXVVZpVWxZelVXcExhbWxmY0VwUFJWWTJWWFpJUmpCblFYWm1SSGhLWVVWWVVsZFRRbkEyTkEiLCJjcnYiOiJQLTI1NiIsIngiOiJ1c2xDM3dkLXBYM3d6NGJSWW53eTNsenBiR1pGaE45NmhMMkFIQTNNUTZZIiwieSI6IlZMQ0JYRldsZE5TTkl6OGtIMjl2TFI0TjE4Qmt3R09YMjZ6UW9ydVExTTQifV19LCJtZXRhZGF0YV9wb2xpY3kiOnsib3BlbmlkX3JlbHlpbmdfcGFydHkiOnsic2NvcGUiOnsic3Vic2V0X29mIjpbImV1LmV1cm9wYS5lYy5ldWRpdy5waWQuMSwgIGV1LmV1cm9wYS5lYy5ldWRpdy5waWQuaXQuMSJdfSwicmVxdWVzdF9hdXRoZW50aWNhdGlvbl9tZXRob2RzX3N1cHBvcnRlZCI6eyJvbmVfb2YiOlsicmVxdWVzdF9vYmplY3QiXX0sInJlcXVlc3RfYXV0aGVudGljYXRpb25fc2lnbmluZ19hbGdfdmFsdWVzX3N1cHBvcnRlZCI6eyJzdWJzZXRfb2YiOlsiUlMyNTYiLCJSUzUxMiIsIkVTMjU2IiwiRVM1MTIiLCJQUzI1NiIsIlBTNTEyIl19fX0sInRydXN0X21hcmtzIjpbeyJpZCI6Imh0dHBzOi8vdHJ1c3QtYW5jaG9yLmV4YW1wbGUuZXUvb3BlbmlkX3JlbHlpbmdfcGFydHkvcHVibGljLyIsInRydXN0X21hcmsiOiJleUpoYiBcdTIwMjYifV19._qt5-T6DahP3TuWa_27klE8I9Z_sPK2FtQlKY6pGMPchbSI2aHXY3aAXDUrObPo4CHtqgg3J2XcrghDFUCFGEQ",
+  "eyJhbGciOiJFUzI1NiIsImtpZCI6ImVXa3pUbWt0WW5kblZHMWxhMjU1ZDJkQ2RVZERSazQwUWt0WVlVMWFhRFZYT1RobFpHdFdXSGQ1WnciLCJ0eXAiOiJhcHBsaWNhdGlvbi9lbnRpdHktc3RhdGVtZW50K2p3dCJ9.eyJleHAiOjE2NDk2MjM1NDYsImlhdCI6MTY0OTQ1MDc0NiwiaXNzIjoiaHR0cHM6Ly90cnVzdC1hbmNob3IuZXhhbXBsZS5ldSIsInN1YiI6Imh0dHBzOi8vaW50ZXJtZWRpYXRlLmVpZGFzLmV4YW1wbGUub3JnIiwiandrcyI6eyJrZXlzIjpbeyJrdHkiOiJFQyIsImtpZCI6IlNURkRXV2hKY0dWWFgzQjNSVmRaYWtsQ0xUTnVNa000WTNGNlFUTk9kRXRyZFhGWVlYWjJjWGN0UVEiLCJjcnYiOiJQLTI1NiIsIngiOiJyQl9BOGdCUnh5NjhVTkxZRkZLR0ZMR2VmWU5XYmgtSzh1OS1GYlQyZkZJIiwieSI6IlNuWVk2Y3NjZnkxcjBISFhLTGJuVFZsamFndzhOZzNRUEs2WFVoc2UzdkUifV19LCJ0cnVzdF9tYXJrcyI6W3siaWQiOiJodHRwczovL3RydXN0LWFuY2hvci5leGFtcGxlLmV1L2ZlZGVyYXRpb25fZW50aXR5L3RoYXQtcHJvZmlsZSIsInRydXN0X21hcmsiOiJleUpoYiBcdTIwMjYifV19.r3uoi-U0tx0gDFlnDdITbcwZNUpy7M2tnh08jlD-Ej9vMzWMCXOCCuwIn0ZT0jS4M_sHneiG6tLxRqj-htI70g"
+]
+
+
+
+

Note

+

The entire Trust Chain is verifiable by only possessing the Trust Anchor's public keys.

+
+
+
+

Offline Trust Attestation Mechanisms

+

The offline flows do not allow for real-time evaluation of an Entity's status, such as its revocation. At the same time, using short-lived Trust Chains enables the attainment of trust attestations compatible with the required revocation administrative protocols (e.g., a revocation must be propagated in less than 24 hours, thus the Trust Chain must not be valid for more than that period).

+
+

Offline EUDI Wallet Trust Attestation

+

Given that the Wallet Instance cannot publish its metadata online at the .well-known/openid-federation endpoint, +it MUST obtain a Wallet Attestation issued by its Wallet Provider. The Wallet Attestation MUST contain all the relevant information regarding the security capabilities of the Wallet Instance and its protocol related configuration. It SHOULD contain the Trust Chain related to its issuer (Wallet Provider).

+
+
+

Offline Relying Party Metadata

+

Since the Federation Entity Discovery is only applicable in online scenarios, it is possible to include the Trust Chain in the presentation requests that the Relying Party may issue for a Wallet Instance.

+

The Relying Party MUST sign the presentation request, the request SHOULD include the trust_chain claim in its JWS header parameters, containing the Federation Trust Chain related to itself.

+

The Wallet Instance that verifies the request issued by the Relying Party MUST use the Trust Anchor's public keys to validate the entire Trust Chain related to the Relying Party before attesting its reliability.

+

Furthermore, the Wallet Instance applies the metadata policy, if any.

+
+
+
+
+

Non-repudiability of the Long Lived Attestations

+

The Trust Anchor and its Intermediate MUST expose the Federation Historical Keys endpoint, where are published all the public part of the Federation Entity Keys that are no longer used, whether expired or revoked.

+

The details of this endpoint are defined in the OIDC-FED Section 7.6.

+

Each JWS containing a Trust Chain in the form of a JWS header parameter can be verified over time, since the entire Trust Chain is verifiable using the Trust Anchor's public key.

+

Even if the Trust Anchor has changed its cryptographic keys for digital signature, the Federation Historical Keys endpoint always makes the keys no longer used available for historical signature verifications.

+
+
+

Privacy Remarks

+
    +
  • Wallet Instances MUST NOT publish their metadata through an online service.

  • +
  • The trust infrastructure MUST be public, with all endpoints publicly accessible without any client credentials that may disclose who is requesting access.

  • +
  • When a Wallet Instance requests the Entity Statements to build the Trust Chain for a specific Relying Party or validates a Trust Mark online, issued for a specific Relying Party, the Trust Anchor or its Intermediate do not know that a particular Wallet Instance is inquiring about a specific Relying Party; instead, they only serve the statements related to that Relying Party as a public resource.

  • +
  • The Wallet Instance metadata MUST not contain information that may disclose technical information about the hardware used.

  • +
  • Leaf entity, Intermediate, and Trust Anchor metadata may include the necessary amount of data as part of administrative, technical, and security contact information. It is generally not recommended to use personal contact details in such cases. From a legal perspective, the publication of such information is needed for operational support concerning technical and security matters and the GDPR regulation.

  • +
+
+
+

Considerations about Decentralization

+
    +
  • There may be more than a single Trust Anchor.

  • +
  • In some cases, a trust verifier may trust an Intermediate, especially when the Intermediate acts as a Trust Anchor within a specific perimeter, such as cases where the Leafs are both in the same perimeter like a Member State jurisdiction (eg: an Italian Relying Party with an Italian Wallet Instance may consider the Italian Intermediate as a Trust Anchor for the scopes of their interactions).

  • +
  • Trust attestations (Trust Chain) should be included in the JWS issued by Credential Issuers, and the Presentation Requests of RPs should contain the Trust Chain related to them (issuers of the presentation requests).

  • +
  • Since the credential presentation must be signed, storing the signed presentation requests and responses, which include the Trust Chain, the Wallet Instance may have the snapshot of the federation configuration (Trust Anchor Entity Configuration in the Trust Chain) and the verifiable reliability of the Relying Party it has interacted with.

  • +
  • Each signed attestation is long-lived since it can be cryptographically validated even when the federation configuration changes or the keys of its issuers are renewed.

  • +
  • Each participant should be able to update its Entity Configuration without notifying the changes to any third party. The metadata policy contained within a Trust Chain must be applied to overload any information related to protocol specific metadata.

  • +
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/wallet-attestation.html b/rp-vp-kid/en/wallet-attestation.html new file mode 100644 index 000000000..635830e6b --- /dev/null +++ b/rp-vp-kid/en/wallet-attestation.html @@ -0,0 +1,2036 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Wallet Attestation + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Wallet Attestation

+

Wallet Attestation contains information regarding the security level of the device hosting the Wallet Instance. It primarily certifies the authenticity, integrity, security, privacy, and trustworthiness of a particular Wallet Instance. The Wallet Attestation MUST contain a Wallet Instance public key.

+
+

Requirements

+

The following requirements for the Wallet Attestation are met:

+
    +
  • The Wallet Attestation MUST use the signed JSON Web Token (JWT) format;

  • +
  • The Wallet Attestation MUST give all the relevant information to attests the integrity and security of the device where the Wallet Instance is installed.

  • +
  • The Wallet Attestation MUST be issued and signed by an accredited and reliable Wallet Provider, thereby providing integrity and authenticity to the attestation.

  • +
  • The Wallet Provider MUST ensure the integrity, authenticity, and genuineness of the Wallet Instance, preventing any attempts at manipulation or falsification by unauthorized third parties.

  • +
  • The Wallet Attestation MUST have a mechanism in place for revoking the Wallet Instance, allowing the Wallet Provider to terminate service for a specific instance at any time.

  • +
  • The Wallet Attestation MUST be securely bound to the Wallet Instance ephemeral public key.

  • +
  • The Wallet Attestation MAY be usable multiple times during its validity period, allowing for repeated authentication and authorization without the need to request new attestations with each interaction.

  • +
  • The Wallet Attestation MUST be short-lived and MUST have an expiration date time, after which SHOULD no longer be considered valid.

  • +
  • The Wallet Attestation MUST NOT be issued by the Wallet Provider if the authenticity, integrity, and genuineness are not guaranteed. In this case, the Wallet Instance MUST be revoked.

  • +
  • Each Wallet Instance SHOULD be able to request multiple attestations with different ephemeral public keys associated to them. This requirement provides a privacy-preserving measure, as the public key MAY be used as a tracking tool during the presentation phase (see also the point listed below).

  • +
  • The Wallet Attestation MUST NOT contain any information that can be used to directly reference the User.

  • +
  • The Wallet Instances MUST secure a Wallet Attestation as a prerequisite for transitioning to the Operational state, as defined by ARF.

  • +
  • Private keys MUST be generated and stored in the WSCD using at least one of the approaches listed below:

    +
      +
    • Local Internal WSCD: in this approach, the WSCD relies entirely on the device's native cryptographic hardware, such as the Secure Enclave on iOS devices or the Hardware Backed Keystore or Strongbox on Android devices.

    • +
    • Local External WSCD: the WSCD is an hardware external to the User's device, such as a smart card compliant with _GlobalPlatform_ and supporting _JavaCard_.

    • +
    • Remote WSCD: Here, the WSCD utilizes a remote Hardware Security Module (HSM).

    • +
    • Local Hybrid WSCD: the WSCD involves a pluggable internal hardware component within the User's device, such as an _eUICC_ that adheres to _GlobalPlatform_ standards and supports _JavaCard_.

    • +
    • Remote Hybrid WSCD: the WSCD involves a local component mixed with a remote service.

    • +
    +
  • +
+
+

Warning

+

At the current stage, the current implementation profile defined in this document supports only the Local Internal WSCD. Future versions of this specification MAY include other approaches depending on the required AAL.

+
+
+
+

Static Component View

+
+The image illustrates the containment of Wallet Provider and Wallet Instances within the Wallet Solution, managed by the Wallet Provider. +
+
+
+

Dynamic Component View

+

The Wallet Attestation acquisition flow can be divided into two main phases. The first phase involves device initialization and registration, which occurs only during the initial launch of the Wallet Instance (after installation). The second phase pertains to the actual acquisition of the Wallet Attestation.

+
+

Wallet Instance Initialization and Registration

+
+The figure illustrates the sequence diagram for initializa a Wallet Instance, with the steps explained below. +
+

Step 1:: The User starts the Wallet Instance mobile app for the first time.

+

Step 2:: The Wallet Instance:

+
+
    +
  • check if Device Integrity Service is available.

  • +
  • check whether the device meets the minimum security requirements.

  • +
+
+
+

Note

+

Federation Check: The Wallet Instance needs to check if the Wallet Provider is part of the Federation, obtaining its protocol specific Metadata. A non-normative example of a response from the endpoint .well-known/openid-federation with the Entity Configuration and the Metadata of the Wallet Provider is represented within the section Wallet Provider metadata.

+
+

Steps 3-5:: The Wallet Instance sends a request to the Wallet Provider Backend and receives a one-time challenge. This "challenge" is a nonce, which must be unpredictable to serve as the main defense against replay attacks. The backend must generate the nonce value in a manner that ensures it is single-use and valid only within a specific time frame. This endpoint is compliant with the specification OAuth 2.0 Nonce Endpoint.

+
GET /nonce HTTP/1.1
+Host: walletprovider.example.com
+
+
+
HTTP/1.1 200 OK
+Content-Type: application/json
+
+{
+  "nonce": "d2JhY2NhbG91cmVqdWFuZGFt"
+}
+
+
+

Step 6: The Wallet Instance, through the operating system, creates a pair of Cryptographic Hardware Keys and stores the corresponding Cryptographic Hardware Key Tag in local storage once the following requirements are met:

+
+
    +
  1. It MUST ensure that Cryptographic Hardware Keys do not already exist, if they exist and the Wallet is in the initialization phase they MUST be deleted.

  2. +
  3. It MUST generate a pair of asymmetric Elliptic Curve keys (Cryptographic Hardware Keys) via a local WSCD.

  4. +
  5. It SHOULD obtain a unique identifier (Cryptographic Hardware Key Tag) for the generated Cryptographic Hardware Keys from the operating system. If the operating system permits specifying a tag during the creation of keys, then a random string for the Cryptographic Hardware Key Tag MUST be selected. This random value MUST be collision-resistant and unpredictable to ensure security. To achieve this, consider using a cryptographic hash function or a secure random number generator provided by the operating system or a reputable cryptographic library.

  6. +
  7. If the previous points are satisfied, It MUST store the Cryptographic Hardware Key Tag in a local storage.

  8. +
+
+
+

Note

+

WSCD: The Wallet Instance MAY use a local WSCD for key generation on devices that support this feature. On Android devices, Strongbox is RECOMMENDED, Trusted Execution Environment (TEE) SHOULD be used only when Strongbox is unavailable. For iOS devices, Secure Elements (SE) SHOULD be used. Given that each OEM offers a distinct SDK for accessing the local WSCD, the discussion hereafter will address this topic in a general context.

+
+

Step 7: The Wallet Instance uses the Device Integrity Service, providing a "challenge" and the Cryptographic Hardware Key Tag to acquire the Key Attestation.

+
+

Note

+

Device Integrity Service: In this section the Device Integrity Service is considered as it is provided by device manufacturers. This service allows the verification of a key being securely stored within the device's hardware through a signed object. Additionally, it offers the verifiable proof that a specific Wallet Instance is authentic, unaltered, and in its original state using a specialized signed document made for this scope.

+

The service also incorporates details in the signed object, such as the device type, model, app version, operating system version, bootloader status, and other relevant information to assess the device has not been compromised. For Android the service used is Key Attestation in addition to Play Integrity API, while for iOS the DeviceCheck service.

+
+

Step 8: The Device Integrity Service performs the following actions:

+
    +
  • Creates a Key Attestation that is linked with the provided "challenge" and the public key of the Wallet Hardware.

  • +
  • Incorporates information pertaining to the device's security.

  • +
  • Uses an OEM private key to sign the Key Attestation, therefore verifieable with the related OEM certificate, confirming that the Cryptographic Hardware Keys are securely managed by the operating system.

  • +
+

Step 9: The Wallet Instance sends the challenge with Key Attestation and Cryptographic Hardware Key Tag to the Wallet Provider Backend in order to register the Wallet Instance identified with the Cryptographic Hardware Key public key.

+
+

Note

+

The Key Attestation (key_attestation) MUST be encoded in base64.

+
+
PUT /wallet-instance HTTP/1.1
+Host: walletprovider.example.com
+Content-Type: application/json
+
+{
+  "challenge": "0fe3cbe0-646d-44b5-8808-917dd5391bd9",
+  "key_attestation": "o2NmbXRvYXBwbGUtYXBw... redacted",
+  "hardware_key_tag": "WQhyDymFKsP95iFqpzdEDWW4l7aVna2Fn4JCeWHYtbU="
+}
+
+
+
+

Note

+

It is not necessary to send the Wallet Hardware public key because it is already included in the key_attestation.

+
+
+

Warning

+

During the registration phase of the Wallet Instance with the Wallet Provider it is also necessary to associate it with a specific user +uniquely identifiable by the Wallet Provider. This association is at the discretion of the Wallet PRovider and will not be addressed +within these guidelines as each Wallet Provider may or may not have a user identification system already implemented.

+
+

Steps 10-12: The Wallet Provider validates the challenge and key_attestation signature, therefore:

+
+
    +
  1. It MUST verify that the challenge was generated by Wallet Provider and has not already been used.

  2. +
  3. It MUST validate the key_attestation as defined by the device manufacturers' guidelines.

  4. +
  5. It MUST verify that the device in use has no security flaws and reflects the minimum security requirements defined by the Wallet Provider.

  6. +
  7. If these checks are passed, it MUST register the Wallet Instance, keeping the Cryptographic Hardware Key Tag and all useful information related to the device.

  8. +
  9. It SHOULD associate the Wallet Instance with a specific User uniquely identified within the Wallet Provider's systems. This will be useful for the lifecycle of the Wallet Instance and for a future revocation.

  10. +
+
+
HTTP/1.1 201 Created
+Content-Type: application/json
+
+
+

If any errors occur during the Wallet Instance registration, the Wallet Provider MUST return an error response. The response MUST use the content type set to application/json and MUST include the following parameters:

+
+
    +
  • error. The error code.

  • +
  • error_description. Text in human-readable form providing further details to clarify the nature of the error encountered.

  • +
+
+

Steps 13-14: The Wallet Instance has been initialized and becomes operational.

+
+

Note

+

Threat Model: while the registration endpoint does not necessitate any client authentication, it is safeguarded through the use of key_attestation. Proper validation of this attestation permits the registration of authentic and unaltered app instances. Any other claims submitted will not undergo validation, leading the endpoint to respond with an error. Additionally, the inclusion of a challenge helps prevent replay attacks. The authenticity of both the challenge and the hardware_key_tag is ensured by the signature found within the key_attestation.

+
+
+
+

Wallet Attestation Issuance

+

This section describes the Wallet Attestation format and how the Wallet Provider issues it.

+
+The figure illustrates the sequence diagram for issuing a Wallet Attestation, with the steps explained below. +
+

Step 1:: The User initiates a new operation that necessitates the acquisition of a Wallet Attestation.

+

Steps 2-3:: The Wallet Instance checks if a Cryptographic Hardware Key exists and generates an ephemeral asymmetric key pair. The Wallet Instance also:

+
+
    +
  1. MUST ensure that Cryptographic Hardware Keys exist. If they do not exist, it is necessary to reinitialize the Wallet.

  2. +
  3. MUST generates an ephemeral asymmetric key pair whose public key will be linked with the Wallet Attestation.

  4. +
  5. MUST check if Wallet Provider is part of the federation and obtain its metadata.

  6. +
+
+

Steps 4-6:: The Wallet Instance solicits a one-time "challenge" from the Wallet Provider Backend. This "challenge" takes the form of a "nonce," which is required to be unpredictable and serves as the main defense against replay attacks. The backend MUST produce the "nonce" in a manner that ensures its single-use within a predetermined time frame.

+
GET /nonce HTTP/1.1
+Host: walletprovider.example.com
+
+
+
HTTP/1.1 200 OK
+Content-Type: application/json
+
+{
+  "nonce": "d2JhY2NhbG91cmVqdWFuZGFt"
+}
+
+
+

Step 7: The Wallet Instance performs the following actions:

+
+
    +
  • Creates a client_data, a JSON structure that includes the challenge and the ephemeral public jwk.

  • +
  • Computes a client_data_hash by applying the SHA256 algorithm to the client_data.

  • +
+
+

Below a non-normative example of the client_data.

+
{
+  "challenge": "0fe3cbe0-646d-44b5-8808-917dd5391bd9",
+  "jwk": {
+      "crv": "P-256",
+      "kty": "EC",
+      "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44",
+      "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg",
+      "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c"
+    }
+}
+
+
+

Steps 8-10: The Wallet Instance takes the following steps:

+
+
    +
  • It produces an hardware_signature by signing the client_data_hash with the Wallet Hardware's private key, serving as a proof of possession for the Cryptographic Hardware Keys.

  • +
  • It requests the Device Integrity Service to create an integrity_assertion linked to the client_data_hash.

  • +
  • It receives a signed integrity_assertion from the Device Integrity Service, authenticated by the OEM.

  • +
+
+
+

Note

+

integrity_assertion is a custom payload generated by Device Integrity Service, signed by device OEM and encoded in base64 to have uniformity between different devices.

+
+
+
Steps 11-12: The Wallet Instance:
    +
  • Constructs the Wallet Attestation Request in the form of a JWT. This JWT includes the integrity_assertion, hardware_signature, challenge, wallet_hardware_key_tag, and public_jwk, and is signed using the private key from the initially generated ephemeral key pair.

  • +
  • Submits the Wallet Attestation Request to the Wallet Provider's backend through the token endpoint.

  • +
+
+
+

Below an non-normative example of the Wallet Attestation Request JWT without encoding and signature applied:

+
{
+  "alg": "ES256",
+  "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "typ": "war+jwt"
+}
+.
+{
+  "iss": "https://wallet-provider.example.org/instance/vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "sub": "https://wallet-provider.example.org/",
+  "challenge": "6ec69324-60a8-4e5b-a697-a766d85790ea",
+  "hardware_signature": "KoZIhvcNAQcCoIAwgAIB...redacted",
+  "integrity_assertion": "o2NmbXRvYXBwbGUtYXBwYX...redacted",
+  "hardware_key_tag": "WQhyDymFKsP95iFqpzdEDWW4l7aVna2Fn4JCeWHYtbU=",
+  "cnf": {
+    "jwk": {
+      "crv": "P-256",
+      "kty": "EC",
+      "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44",
+      "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg",
+      "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c"
+    }
+  },
+  "vp_formats_supported": {
+      "jwt_vc_json": {
+        "alg_values_supported": ["ES256K", "ES384"],
+      },
+      "jwt_vp_json": {
+        "alg_values_supported": ["ES256K", "EdDSA"],
+      },
+    },
+  },
+  "iat": 1686645115,
+  "exp": 1686652315
+}
+
+
+

The Wallet Instance MUST do an HTTP request to the Wallet Provider's token endpoint, +using the method POST.

+

The token endpoint (as defined in RFC 7523 section 4) requires the following parameters +encoded in application/x-www-form-urlencoded format:

+
    +
  • grant_type set to urn:ietf:params:oauth:grant-type:jwt-bearer;

  • +
  • assertion containing the signed JWT of the Wallet Attestation Request.

  • +
+
POST /token HTTP/1.1
+Host: wallet-provider.example.org
+Content-Type: application/x-www-form-urlencoded
+
+grant_type=urn%3Aietf%3Aparams%3Aoauth%3Agrant-type%3Ajwt-bearer
+&assertion=eyJhbGciOiJFUzI1NiIsImtpZCI6ImtoakZWTE9nRjNHeG...
+
+
+

Steps 13-17: The Wallet Provider's backend assesses the Wallet Attestation Request and issues a Wallet Attestation, if the requirements described below are satisfied:

+
+
    +
  1. It MUST check the Wallet Attestation Request contains all the defined parameters according to Table of the Wallet Attestation Request parameters.

  2. +
  3. It MUST verify that the signature of the received Wallet Attestation Request is valid and associated with public jwk.

  4. +
  5. It MUST verify that the challenge was generated by Wallet Provider and has not already been used.

  6. +
  7. It MUST check that there is a Wallet Instance registered with that hardware_key_tag and that it is still valid.

  8. +
  9. It MUST reconstruct the client_data via the challenge and the jwk public key, to validate hardware_signature via the Cryptographic Hardware Key public key registered and associated with the Wallet Instance.

  10. +
  11. It MUST validate the integrity_assertion as defined by the device manufacturers' guidelines.

  12. +
  13. It MUST verify that the device in use has no security flaws and reflects the minimum security requirements defined by the Wallet Provider.

  14. +
  15. It MUST check that the URL in iss parameter is equal to the URL identifier of Wallet Provider.

  16. +
+
+

If all checks are passed, Wallet Provider issues a Wallet Attestation with an expiration limited to 24 hours.

+

Below an non-normative example of the Wallet Attestation without encoding and signature applied:

+
  {
+  "alg": "ES256",
+  "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY",
+  "trust_chain": [
+    "eyJhbGciOiJFUz...6S0A",
+    "eyJhbGciOiJFUz...jJLA",
+    "eyJhbGciOiJFUz...H9gw",
+  ],
+  "typ": "wallet-attestation+jwt",
+}
+.
+{
+  "iss": "https://wallet-provider.example.org",
+  "sub": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c",
+  "aal": "https://trust-list.eu/aal/high",
+  "cnf":
+  {
+    "jwk":
+    {
+      "crv": "P-256",
+      "kty": "EC",
+      "x": "4HNptI-xr2pjyRJKGMnz4WmdnQD_uJSq4R95Nj98b44",
+      "y": "LIZnSB39vFJhYgS3k7jXE4r3-CoGFQwZtPBIRqpNlrg",
+      "kid": "vbeXJksM45xphtANnCiG6mCyuU4jfGNzopGuKvogg9c"
+    }
+  },
+  "authorization_endpoint": "eudiw:",
+  "response_types_supported": [
+    "vp_token"
+  ],
+  "response_modes_supported": [
+    "form_post.jwt"
+  ],
+  "vp_formats_supported": {
+      "vc+sd-jwt": {
+          "sd-jwt_alg_values": [
+              "ES256",
+              "ES384"
+          ]
+      }
+  },
+  "request_object_signing_alg_values_supported": [
+    "ES256"
+  ],
+  "presentation_definition_uri_supported": false,
+  "iat": 1687281195,
+  "exp": 1687288395
+}
+
+
+

Step 18: The Wallet Instance receives the Wallet Attestation signed by the Wallet Provider and performs security and integrity verifications.

+
HTTP/1.1 201 OK
+Content-Type: application/jwt
+
+eyJhbGciOiJFUzI1NiIsInR5cCI6IndhbGx... redacted
+
+
+
+
+

Wallet Attestation Request

+

The JOSE header of the Wallet Attestation Request JWT MUST contain:

+ +++++ + + + + + + + + + + + + + + + + + + + + +

JOSE header

Description

Reference

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section Cryptographic Algorithms and MUST NOT be set to none or any symmetric algorithm (MAC) identifier.

RFC 7516#section-4.1.1.

kid

Unique identifier of the jwk inside the cnf claim of Wallet Instance as base64url-encoded JWK Thumbprint value.

RFC 7638#section_3.

typ

It MUST be set to var+jwt

+

The body of the Wallet Attestation Request JWT MUST contain:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

Identifier of the Wallet Provider concatenated with thumbprint of the JWK in the cnf parameter.

RFC 9126 and RFC 7519.

aud

It MUST be set to the identifier of the Wallet Provider.

RFC 9126 and RFC 7519.

exp

UNIX Timestamp with the expiry time of the JWT.

RFC 9126 and RFC 7519.

iat

UNIX Timestamp with the time of JWT issuance.

RFC 9126 and RFC 7519.

challenge

Challenge data obtained from nonce endpoint

hardware_signature

The signature of client_data obtained using Cryptographic Hardware Key base64 encoded.

integrity_assertion

The integrity assertion obtained from the Device Integrity Service with the holder binding of client_data.

hardware_key_tag

Unique identifier of the Cryptographic Hardware Keys

cnf

JSON object, containing the public part of an asymmetric key pair owned by the Wallet Instance.

RFC 7800

+
+
+

Wallet Attestation

+

The JOSE header of the Wallet Attestation JWT MUST contain:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +

JOSE header

Description

Reference

alg

A digital signature algorithm identifier such as per IANA "JSON Web Signature and Encryption Algorithms" registry. It MUST be one of the supported algorithms listed in the Section Cryptographic Algorithms and MUST NOT be set to none or any symmetric algorithm (MAC) identifier.

RFC 7516#section-4.1.1.

kid

Unique identifier of the jwk inside the cnf claim of Wallet Instance as base64url-encoded JWK Thumbprint value.

RFC 7638#section_3.

typ

It MUST be set to wallet-attestation+jwt

OPENID4VC-HAIP

trust_chain

Sequence of Entity Statements that composes the Trust Chain related to the Relying Party.

OIDC-FED Section 3.2.1. Trust Chain Header Parameter.

+

The body of the Wallet Attestation JWT MUST contain:

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

Claim

Description

Reference

iss

Identifier of the Wallet Provider

RFC 9126 and RFC 7519.

aud

Identifier of the Wallet Provider concatenated with thumbprint of the Wallet Instance.

RFC 9126 and RFC 7519.

exp

UNIX Timestamp with the expiry time of the JWT.

RFC 9126 and RFC 7519.

iat

UNIX Timestamp with the time of JWT issuance.

RFC 9126 and RFC 7519.

cnf

JSON object, containing the public part of an asymmetric key pair owned by the Wallet Instance.

RFC 7800

aal

JSON String asserting the authentication level of the Wallet and the key as asserted in the cnf claim.

authorization_endpoint

URL of the Wallet Authorization Endpoint (Universal Link).

response_types_supported

JSON array containing a list of the OAuth 2.0 response_type values.

response_modes_supported

JSON array containing a list of the OAuth 2.0 "response_mode" values that this authorization server supports.

RFC 8414

vp_formats_supported

JSON object with name/value pairs, identifying a Credential format supported by the Wallet.

request_object_signing_alg_values_supported

JSON array containing a list of the JWS signing algorithms (alg values) supported.

presentation_definition_uri_supported

Boolean value specifying whether the Wallet Instance supports the transfer of presentation_definition by reference. MUST be set to false.

+
+
+
+

Wallet Instance Lifecycle

+

The ability of the Wallet Instance to obtain a Wallet Attestation is bound to its current state. +The Wallet Instance assesses its current state based on the Credentials stored locally and the Wallet Attestation issued by the Wallet Provider.

+

The lifecycle of a Wallet Instance encompasses all the potential states it can configure, along with the transitions from one state to another. This lifecycle is depicted in the diagram below:

+
+Illustration representing the Wallet Instance lifecycle, with the states explained below. +
+

A Wallet Instance SHOULD obtain a Wallet Attestation if it's in either Installed, Operational or Valid state; that implies that a Deactivated Wallet Instance cannot obtain a Wallet Attestation hence it cannot interact with other entities of the ecosystem, such as PID/(Q)EAA Providers and Relying Parties.

+
+

States

+ ++++ + + + + + + + + + + + + + + + + + + + +

State

Description

Installed

The User has installed the Wallet Solution on the device.

Operational

The Wallet Instance has been verified and the Wallet Hardware Key has been registered; no valid PID is present in the storage.

Valid

A valid PID is present in the storage.

Deactivated

The Wallet Instance has been revoked and its Wallet Hardware Key has been marked as not usable.

+
+
+

Transitions

+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + + +

Transition

Description

install

The User performs a fresh installation or restores the initial state of the Wallet Instance on the device.

verify

The Wallet Instance has been verified by the Wallet Provider and its Wallet Hardware Key has been registered.

validate

The Wallet Instance obtains a valid PID.

invalidate

The PID expires or gets revoked.

revoke

The Wallet Provider marks the Wallet Instance as not usable.

uninstall

The User removes the Wallet Instance from the device.

+
+
+

Revocations

+

As mentioned in the Wallet Instance initialization and registration section above, a Wallet Instance is bound to a Wallet Hardware Key and it's uniquely identified by it. +The Wallet Instance SHOULD send its public Wallet Hardware Key with the Wallet Provider, thus the Wallet Provider MUST identify a Wallet Instance by its Wallet Hardware Key.

+

When a Wallet Instance is not usable anymore, the Wallet Provider MUST revoke it. The revocation process is a unilateral action taken by the Wallet Provider, and it MUST be performed when the Wallet Instance is in the Operational or Valid state. +A Wallet Instance becomes unusable for several reasons, such as: the User requests the revocation, the Wallet Provider detects a security issue, or the Wallet Instance is no longer compliant with the Wallet Provider's security requirements.

+

The details of the revocation mechanism used by the Wallet Provider as well as the data model for maintaining the Wallet Instance references is delegated to the Wallet Provider's implementation.

+

During the Wallet Instance initialization and registration phase the Wallet Provider MAY associate the Wallet Instance with a specific User, subject to obtaining the User's consent. The Wallet Provider MUST evaluate the operating system and general technical capabilities of the device to check compliance with the technical and security requirements and to produce the Wallet Instance metadata. +When the User consents to being linked with the Wallet Instance, they gain the ability to directly request Wallet revocation from the Wallet Provider, and it also allows the Wallet Provider to revoke the Wallet Instance associated with that User.

+
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/en/wallet-solution.html b/rp-vp-kid/en/wallet-solution.html new file mode 100644 index 000000000..7a42205b8 --- /dev/null +++ b/rp-vp-kid/en/wallet-solution.html @@ -0,0 +1,1725 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Wallet Solution + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Wallet Solution

+

The Wallet Solution is a comprehensive product offered by the Wallet Provider to cater to the needs of Users in managing their digital assets securely. It is issued by the Wallet Provider in the form of a mobile app, it also consists of services and web interfaces for the exchange of data between the Wallet Provider and its Wallet Instances for the requirements of the trust model and in total respect of the User's privacy, in accordance with national and EU legislation.

+

The mobile app serves as the primary interface for Users, allowing them to access and interact with their digital Credentials conveniently. These are a set of data that can uniquely identify a natural or a legal person, along with other Qualified and non-qualified Electronic Attestations of Attributes, also known as QEAAs and EAAs respectively, or (Q)EAAs for short[1]. Once a User installs the mobile app on their device, it is referred to such an installation as a Wallet Instance for the User.

+

By supporting the mobile app, the Wallet Provider plays a vital role in ensuring the security and reliability of the entire Wallet Solution, since it is responsible for issuing the Wallet Attestation, that is a cryptographic proof that allow the evaluation of the authenticity and the integrity of the Wallet Instance.

+

The Wallet Provider MUST offer a RESTful set of services for issuing the Wallet Attestations.

+
+

Requirements

+

This section lists below the essential requirements that must be met by the Wallet Solution to ensure its functionality, security, and compliance with relevant standards and regulations.

+
+
    +
  • Trustworthiness within the Wallet ecosystem: the Wallet Instance MUST establish trust and reliability within the Wallet ecosystem.

  • +
  • Compliance with Provider specifications for obtaining PID and (Q)EAA: the Wallet Instance MUST adhere to the specifications set by Providers for obtaining Personal Identification (PID) and (Q)EAAs.

  • +
  • Support for Android and iOS operating systems: the Wallet Instance MUST be compatible and functional at least on both Android and iOS operating systems, as well as available on the Play Store and App Store respectively.

  • +
  • Verification of device ownership by the User: the Wallet Instance MUST provide a mechanism to verify the User's actual possession and full control of their personal device.

  • +
+
+
+
+

Wallet Instance

+

The Wallet Instance serves as a unique and secure device for authenticating the User within the Wallet ecosystem. It establishes a strong and reliable mechanismm for the User to engage various digital transactions in a secure and privacy-preserving manner.

+

The Wallet Instance establishes the trust within the Wallet ecosystem by consistently presenting a Wallet Attestation during interactions with other ecosystem actors such as PID Providers, (Q)EAA Providers, and Relying Parties. These verifiable attestations, provided by the Wallet Provider, purpose to authenticate the Wallet Instance itself, ensuring its realiability when engaging with other ecosystem actors.

+

To guarantee the utmost security, these cryptographic keys MUST be securely stored within the WSCD which MAY be internal (device's Trusted Execution Environment (TEE)[3]), external, or hybrid. This ensures that only the User is allowed to access them, thus preventing unauthorized usage or tampering. For more detailed information please refer to the Wallet Attestation section and the Trust Model section of this document.

+
+
+

Wallet Instance Lifecycle

+

The Wallet Instance has three distinct states: Operational, Valid, and Deactivated. Each state represents a specific functional status and determines the actions that can be performed[2].

+
+

Initialization Process

+

To activate the Wallet Instance, the Users MUST install the mobile Wallet application on their device and open it. Furthermore, Users will be asked to set their preferred method of unlocking their device; this can be accomplished by entering a personal identification number (PIN) or by utilizing biometric authentication, such as fingerprint or facial recognition, according to their personal preferences and device's capabilities.

+

After completing these steps, the Wallet Instance sets the Operational state.

+
+
+

Transition to Valid state

+

To transition from the Operational state to the Valid state, the Wallet Instance MUST obtain a valid Personal Identification (PID). Once a valid PID is acquired, the Wallet Instance becomes Valid.

+

To securely and unambiguously authenticate Users, the Wallet Instance necessitates a High Level of Assurance (LoA 3) for User authentication. The method to achieve this LoA is selected by the PID Provider based on the identity proofing method employed during the provisioning of the Digital Credential to the User. Furthermore, to store the acquired Digital Credential, the Wallet Instance MUST demonstrate to the Credential Issuer an adequate security compliance to maintain the Credential at the same LoA at which it was issued.

+

Once the Wallet Instance is in the Operational state, Users can:

+
+
    +
  • Obtain, view, and manage (Q)EAAs from trusted (Q)EAA Providers[1];

  • +
  • Authenticate to Relying Parties[1];

  • +
  • Authorize the presentation of their digital Credentials with Relying Parties.

  • +
+
+

Please refer to the relative sections for further information about PID and (Q)EAAs issuance and presentation.

+
+
+

Return to Operational state

+

A Valid Wallet Instance may revert to the Operational state under specific circumstances. These circumstances include the expiration or the revocation of the associated PID by its PID Provider.

+
+
+

Deactivation

+

Users have the ability to deactivate the Wallet Instance voluntarily. This action removes the operational capabilities of the Wallet Instance and sets it to the Deactivated state. Deactivation provides Users with control over access and usage according to their preferences.

+
+
+
+

Wallet Provider Endpoints

+

The Wallet Provider that issues the Wallet Attestations MUST +made available its APIs in the form of RESTful services, as listed below.

+
+

Wallet Provider Metadata

+

An HTTP GET request to the /.well-known/openid-federation endpoint allows the retrieval of the Wallet +Provider Entity Configuration.

+

The Wallet Provider Entity Configuration is a JWS containing the public keys and supported algorithms of the Wallet Provider metadata definition. It is structured in accordance with the OpenID Connect Federation and the Trust Model section outlined in this specification.

+

The returning Entity Configuration of the Wallet Provider MUST contain the +attributes listed below:

+
+
+ +
+

Payload

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

Key

Value

iss

Public URL of the Wallet +Provider.

sub

Public URL of the Wallet +Provider.

iat

+
Issuance datetime in

Unix Timestamp format.

+
+
+

exp

Expiration datetime +in Unix Timestamp format.

authority_hints

Array of URLs (String) containing +the list of URLs of the +immediate superior Entities, such +as the Trust Anchor or an +Intermediate, that MAY issue an +Entity Statement related to this +subject.

jwks

A JSON Web Key Set (JWKS) RFC +7517 +that represents the public part +of the signing keys of the Entity +at issue. Each JWK in the JWK set +MUST have a key ID (claim kid).

metadata

Contains the +metadata +wallet_provider +and the +federation_entity metadata.

+
+

wallet_provider metadata

+ + + + + + + + + + + + + + + + + + + + + + + + +

Key

Value

jwks

A JSON Web Key Set (JWKS) +that represents the Wallet +Provider's public keys.

token_endpoint

Endpoint for obtaining the Wallet +Instance Attestation.

aal_values_supported

List of supported values for the +certifiable security context. These +values specify the security level +of the app, according to the levels: low, medium, or high. +Authenticator Assurance Level values supported.

grant_types_supported

The types of grants supported by +the token endpoint. It MUST be set to +urn:ietf:params:oauth:client-assertion-type: +jwt-client-attestation.

token_endpoint_auth_methods_suppor +ted

Supported authentication methods for +the token endpoint.

token_endpoint_auth_signing_alg_va +lues_supported

Supported signature +algorithms for the token endpoint.

+
+

Note

+

The aal_values_supported parameter is experimental and under review.

+
+
+
+

Payload federation_entity

+ + + + + + + + + + + + + + + + + + + + + +

Key

Value

organization_name

Organization name.

homepage_uri

Organization's website URL.

tos_uri

URL to the terms of service.

policy_uri

URL to the privacy policy.

logo_uri

URL of the organization's logo in SVG format.

+

Below a non-normative example of the Entity Configuration.

+
{
+  "alg": "ES256",
+  "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY",
+  "typ": "entity-statement+jwt"
+}
+.
+{
+"iss": "https://wallet-provider.example.org",
+"sub": "https://wallet-provider.example.org",
+"jwks": {
+  "keys": [
+    {
+      "crv": "P-256",
+      "kty": "EC",
+      "x": "qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk",
+      "y": "1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM",
+      "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY"
+    }
+  ]
+},
+"metadata": {
+  "wallet_provider": {
+    "jwks": {
+      "keys": [
+        {
+          "crv": "P-256",
+          "kty": "EC",
+          "x": "qrJrj3Af_B57sbOIRrcBM7br7wOc8ynj7lHFPTeffUk",
+          "y": "1H0cWDyGgvU8w-kPKU_xycOCUNT2o0bwslIQtnPU6iM",
+          "kid": "5t5YYpBhN-EgIEEI5iUzr6r0MR02LnVQ0OmekmNKcjY"
+        }
+      ]
+    },
+    "token_endpoint": "https://wallet-provider.example.org/token",
+    "aal_values_supported": [
+      "https://wallet-provider.example.org/LoA/basic",
+      "https://wallet-provider.example.org/LoA/medium",
+      "https://wallet-provider.example.org/LoA/high"
+    ],
+    "grant_types_supported": [
+      "urn:ietf:params:oauth:client-assertion-type:jwt-client-attestation"
+    ],
+    "token_endpoint_auth_methods_supported": [
+      "private_key_jwt"
+    ],
+    "token_endpoint_auth_signing_alg_values_supported": [
+      "ES256",
+      "ES384",
+      "ES512"
+    ]
+  },
+  "federation_entity": {
+    "organization_name": "IT Wallet Provider",
+    "homepage_uri": "https://wallet-provider.example.org",
+    "policy_uri": "https://wallet-provider.example.org/privacy_policy",
+    "tos_uri": "https://wallet-provider.example.org/info_policy",
+    "logo_uri": "https://wallet-provider.example.org/logo.svg"
+  }
+},
+"authority_hints": [
+  "https://registry.eudi-wallet.example.it"
+]
+"iat": 1687171759,
+"exp": 1709290159
+}
+
+
+
+
+

Wallet Attestation

+

Please refer to the Wallet Attestation section.

+
+
+
+

External references

+ + + +
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/.buildinfo b/rp-vp-kid/it/.buildinfo new file mode 100644 index 000000000..2ad55caa3 --- /dev/null +++ b/rp-vp-kid/it/.buildinfo @@ -0,0 +1,4 @@ +# Sphinx build info version 1 +# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done. +config: 7debc0b241d55c8da06f75be8de0eb53 +tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/rp-vp-kid/it/.doctrees/backup-restore.doctree b/rp-vp-kid/it/.doctrees/backup-restore.doctree new file mode 100644 index 0000000000000000000000000000000000000000..80a3045586785f80214121fd3f341dd71075b7fa GIT binary patch literal 30401 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 aJ&XVB+LJZe8P3vH1J5O&w(Q{(TmJ|6vpt{y literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/.doctrees/environment.pickle b/rp-vp-kid/it/.doctrees/environment.pickle new file mode 100644 index 0000000000000000000000000000000000000000..f66f71106b178874262adf5cb2b702d82de99adf GIT binary patch literal 57395 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 aj<*CT?FTEAbFeXoR8+xIN#)0-+5ZpxZl<{a literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/.doctrees/index.doctree b/rp-vp-kid/it/.doctrees/index.doctree new file mode 100644 index 0000000000000000000000000000000000000000..035d1608da49aee3099328ff200faef4fb502a59 GIT binary patch literal 30418 zcmcg#3y>T~d6sm#)9vYW(g`eEmSvA6>tWfmtH+&AmSvkmI@yQplPn1XcA3@e?(EL2 zc6XL}+ym@{N8zlg2_&!-MaAKr098~RQUwmCLRB6WC`bZHoC+!OC_6<`gaQI7Qlv;i zzQ1R>XJ((XcXLtsdS`lOy8HY3|Nrjk{^$4Ghd=n$#SQGAyWOg5dTlwa6bdz?pju6L zv|!|&s#>#~A86kBj^@+N!*0q{mMp_D^J>%GfIIS0{TPNT<_JUdxWX^7aqo@3~jr{+ms0%actlo?2?tXWZTIG(^ z6*R$aYU5T;amN(fHuaoi0|GU9NH17up1UPqQ7j9YI3BJkRqtrD;M9YYoRYt8szr8B zYPniDZPgWmI$AeXOEnkOrsHn0l@dMC)W)=3+K`*d3Yu^>!r9q}Tq{Fhjhg?HEvQAk zrrWwvv(lzzH{Hz@y{0xV3_Cf1zR_}WmaW^M(5Qv(73_n(z3H^{RL*=#LO+~7EopYO zGBzej(wUr@xqpn)H-xLO@9L!MpLyf~!f~*s-3Y3*-5`Gt{`TVUHvHWVsz!>2 zSyia5R9REouifEj2ehNwA?>hs=Y=OmEghd0Yz(t!!+gAEtz~;ucI9kHserJt01YILwX5lFIzHWWha6LHx<}$8qr#M0 zK`$ttRJ$9GG_^Nd#OfpHfO((Uu}&SKJ>IbwnDBP)1*aCYyl+34Y9U)uZCf?v%ysMLWad);O?`$n5 zJCbL1B2R_Y2*{hQR3uwdC3RV;)+?&T$Wvf%3q+o+=~h4;SzHN&h*VXTnl0Ielw*v^ zoH2FG7vxEIA=!ePf~fb$BMO6UM=9GGA}ZyM*os+FgOM8+b{?E%FV3GkE1#b`M`MRw zw@zm=MqRDxg>+4|Gge*2nB`^2khPkcx8@C?BhO77FKHx(l1~T|qlAI(zkDfMRc!^PQ&|(}{a3&S zu`rcB7Bxfet2qI(S%)fnm4(O<*Y}%s(U_nYwddUj*T6`mVVs@aUD+u`*f}qHH#=9u zOp~?_b;;#L{U0HFLFG$Jpb+XC%y16S~8u9h;gYxWbK+V$9 zQd%iNYf8pqT8HB37?(4c-YHJS&J=Z+n+zLfCMnBr8gY8<7#v@FW+T^=S|%XHQphqN?U=NcLFzc)-;v?2C|S6x70sP$k*& z)$y2oJVcVXzTdx2jY(eBs8G(%Ed#Q1B7H0wc2H1Xc23C0da^@hh~XqD#iBwvJ9`IX zhpcNd?DR6zTy~~{W(!lJTOp2Y>!ChEgVU?%klYQ8s>xr`y4CuEH$j)?9 zb_WIZm7VE6c8AJHoE<8ZYu3K5?5L6Hp+BO_)9J)UEml+uL%YP}kXzBM*nEcG2-d3v&= zJSAj_TJ6xzHaQAgA#qi36SYBeNytxNfev)#q~okvo=M6Ap`aH1YPZibeJl`_k+=n- zLb+xg?8;7O3xsDA=ya-c4uH?Qf^TzJx4L^!-%a5z;RzC(Kep7AX9V zdRJGTx>=xv-oj?^2E{gn#Y(f#p%6#C-@>SjFh2=dpx`a+?yl? z=?c^D)wxx`jP|Np%bP28+G=Tssz#yGX#jPty&9^R!#&y+?gg(`FRU5vb#dG_-8po>c|Hcl>$4fTxb$ORqeFy4B>+o6(| zlnPuSGKvYeC>z@oz%0XULlzauMH8MwONM#9g^Luk+OlF6LmeN<40yTBc}cJ}oS_q8 zhRQ>mHf(5N=1n9O7qMkLe{Slrv-1Hp-PT;DW#h^@`E_pynReQU6C)TCghe%@7yL1-2uB&& zGwPOFp$)7>6=G!ND~3hF0$VO0J>F@LeZ(rz)esdyPC&z>Tr`qv2B%}XA05p8bIG_g zpkOfnx*8?{u=-Xvkw|fosE25XWCl!}?iwSXM@3&`HPnp2YC601QeMX zs0DfPcsI}^mTuG+!>`#vP5}3TesH-rN4H8j)R}%z&yfM}q+WjPY|zaSi4y`3x3HWe zd$KDp=DP@YO570c*l=cmbeba_tU`|OR2W~x=3gOTm&ni4m&3W`JRAvmb==6Oi-uFf zNC-jAgvCZyal2A0smzNevv@pxG<~$i%I^q2K=+5>cDfdzzHe>K;OOt^ivC_U+Rt8o zBtYD*IczoxQ7tQGRfa38Qt4!>Hq+%0GJYPQImXe%uYw~u-4y|IZ@PT`taQ)R)I9-; z*pn8|EEnoVy`|Si&0=1rLPMA+k5z=c0GIG4?Uih=R-0x$=8C-o_xxBE=jb|0s9Uz~mY)rUgXv3sc}XFzpy zsyMGvyw*u=Civ*)6%-P-_A3GAOT3p7YZYhb{uXvp?iPP@F62tBjZjA&hWGj~ zJh>`r=#rbh3h&E#OptY@Ce6M6+`RM#Ha~`EH~cZ_y8vcIrMhX5gOu0hlLJ4-{U^(x z#%#5d3nf=j04x6%?$LIYKS4k6K-Uhr7cv^$V>6}$Z$~pjQ*%u13%Wm-heNK+9Qixt zu?z72(&1;j%pCgRmgxENr|?OFQZkjg7G`ApiK`dSU6ke*u3o+f2TFPynslR?0?qHo zK=Va{aj5(S`nmJMmJl!}SAGGx!XPr~5 zt+|Skzn*=IW7uKy_QnTLv@Fe$2P<4SC8Nj~P$6_HmaSGLC7(CU0%OLIu8GBjYuWUe zEX~)j5@6Y;!xjnH!=_`|65K=K)K3qYDjCk4UV($Gghd2NtzfyqKldwxk+Jo>UWd=R zMWtSvKgVvJo1KMoJJwVs3sQz}3s|mjJ(Vm~+@Ha{+ROXF9s zc@zF?+0bR*m|rm}?1Lq#q{4tgOv0-lRE&S$e9f}yeP5bo5Ixh++E~TcW)*6~HLNy8 zs+jlJ2#6nGW37qOdQq%Ic)W(^@BN>;)cK*h1#55AR;u7F(uv+1p8t^F9{Oa=sWXD{ z?tlpxeMCTS0=iY@ox&P!s*8rFJ5oirr~||oN?UUdEgWSjKQvwhgKLVeWU;1H4PADp zRwH~&8zX~5dCw5W4>pWXx`$$xDLz{$@5R#=eZQ6x%Ut0`j)z5`n}U>32frNbou}pxoUkzE`WL2{(F8cs0AVd=q}eFnnbl^u9xf&QlA#*~PllD9q~xRMc8WJ`y!P)PV9yBy8<`(jDcaW@{ScQs^~p5Gll$K;^$c!M&Q*M+!3o z&gwe!$n8El%gmc%3s7?Hp=Jx6bieIY{T=8>sRfD6v<2`e;pC=k$L`>Cick z5?H@;4!3qrw-ST?xq`=A`v)T{+xH4OXT-}0^~~c`Esd<~&SozfxX$G0k>|_jqTNCb z=+-S>;|A##e0){Dh!T6Xr%$&W5rMsIm({?*o;vRPhq#qm@DZYv-|N5XvyGxBb;=P+U-HkFi&6Ic2*dx|l z>78&QhS?o&dx|eXW4-X>5OO|K_22o+za7eRcg)iYGp%R%euA9B_6vf!7h^EzuZF*X zTfNnAzLb0ic1BZ(?n8@s*zF9x&wK6DHXsa+k+%_prTrTB)@*&F)^@qWY^fZvc(5>N zV%3bo1}(TdEK8RWuYwk+*(dhRXPOJ{HWn=hd*j$chJznv4P(I!DRrTyqwP&Cd;1S*}ek>J-mI1ZA8de9bju$?8ZHQrtU9P$=+HVTc~0;jB=M1 zb~YB6ORpZ!0>IaYEdsH;9f9o2Y|Y1ek~-0gP{httv@ljsOoST{W@c6^c7V1$~VQ!pi{tu+17@JQti? zps?-^CR4Iebi?su(mH@*k=pjW8nE2x1#qa%3YYvXLe8 zjjUj2m7bLRCnb7P@`Nl{Igf6Eb!eRzIVNZt_LqXDwW^p1KgE~=L~Wxxk#|fAkCpW! zQ$crl4vRju;ErNFnAV&T@@o>h1C>AsucFCZk_(6c^_WsYs2QQ?Y!hw4O?eBxSn-5L zrJ#lod_-Eo$yTo>EN9lP<8;hFb<7IRwxQdzq$_k4H4c;TtTf%7MZ>UbSYr=eys**T zMthEszU(qBOv6vloxrlWUeCfd(H5eGBKLSXaHwKA*(G@CWqGtO)aXCphyMb83e8|* zxm8_ME2Io#8Ui-)(_wc~UDiPtwkI7c$Q>@IIj4l`Cj8JfxC4vyRpg||cUdJ+&4xRn z*XoXqpcQ$8R{w#}f#dQi#4?Ls$f~Akm|3h87b=i`bRBTz5jSeP;n(v^a=M1hxwZgSH9Q!F`p9Jr1*g0A*Nv zhrP&?9ba%qVAYB`@srXE**eyO_2s5E;!eP6#K;C&?j{{FwXNV(>scXpAeCiM&>|CV zB~;*cmIG#M7Il4)+*r4Q=oJL4j(PWQ%+F4aOj{Rv%9x_6XLAophSqH*1Rz4?uA%ZvqC!s zfUFlA?^z7rE7;0k&T4u|!yc8!;@TM``QsKsv)SI(nFXR=#m?DI8Wan=A>Ih*?!|ry zGzfj~sT){k6jER}r;b5}A`7xn$2S8QqL8E4ibh};c9Nw)2)&m3Shz7%rg+Lo5%;b) zAvPG#3eeycG(l5U8&<{K7gy$mXjJ3BXP$A`7gX`j_z)LziOs{M)flJ=L{%i2F`Kh(aj{apK5d2}NtGsBeJK*>%@_EB;h zB^gTYrsNDI_fRrV$$3g1qvQ%Dc}lKPQm3R!$R@+*{lh>|8HpQ7aBlzg6& z-=X9ylzf?zZ&30zO1@3W-%#>hN?xJlCzSk%l3!5r-;`{_yrVou$<379NXa2e?x19f zl4F$2QgS~f3zS@-Ny$4Y`DIGpM~O?xbCi6Tl3f@d%CDkif|9LB z95+Sm+bea5IwVc|Ttj=Yp?$TXz0}ZNZfHMjXg_Z-;v0&=C`_ z_tFs)uiu~}CSISRBPL#7pd%(;e?&)2yuL|COuYV{j+l6TkB*pl{U;qU@!Cwi&cthy zj+l7eN=Hn*?xG_mUZ?1YiPsz*G4Z-gM@+o3bi~A~LPt!zR_KU{*E4j)#Onie#Kenc z)J(kCdvSte^h@Xwkcy zmoXm0I|C!TAKB5XP|Rk++2lPp;W>@)Y%$l?hP@Z=$l8kk4nFBVJ`2jOFfS6lh{$b8 zy0VFdgfGBK#9D0HRsKCPC>>(K@;!BT*q?H5bT^a5K~UNGh4U9_?(4-A=C3W~-(@A0 zKaZd2%1CD-(hs3DlZJN58+fIC@VjI&3HM0|^oaKgIMnd3eL`LU-;59L&jtlo{yLrz z(6qxm+V4&D>Nz05)7=4vV+!^L`@Q&J|0OA~yH^4BH9f$#g$3*ld1xfI@NU4Z0|{@p z{=In>knd`T%)Ow_Lg-5i(pE_Spt_pT3E3ZmB=?DhCywWPq_x^7_mi1EAQgMDXGU~gMDu+zPJ_M`E^K9>|&Y2Cn{ z><#uy@xgvEDX_P%6IjHG>kam=UgftAk;MHCel@~t=AAH;|IZ%M)3 zzm9PG7^y8=Vo#ek*K?{oD|$ctAHD?Z~N%15g%+NDX@pv4eW{DJ^O5Yu+Jm~ z_Re(!JJlQPC*yLe}(_+#knB_rs*n$*VwjXZt(?5yX09+d3M1jx>r}6PY8Wlfq{A#&#e+wtY!q z%Or(O?Tzh$_}I=Qh3#lk*sk}+_NMsQ9!m<_u~lHpwCkIQ_R<@n6(3+#{L&lX zAI1mxm81aPn;bw22Gbkhcj5#5c2WS(tODTO?c(W0j_D2Wr}5$aBq@0JtpeUu2YB2i zhsC4m4Rd=c_8ev$wN_68U#mnucjS(0Wg;O~4lm#z`GCXw Qs6d{GzQ>;T|5r@^A8!~cK>z>% literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/.doctrees/issuance.doctree b/rp-vp-kid/it/.doctrees/issuance.doctree new file mode 100644 index 0000000000000000000000000000000000000000..079405314d91fd77f988d62c169757fc3b065b94 GIT binary patch literal 30329 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/.doctrees/pid-eaa-data.doctree b/rp-vp-kid/it/.doctrees/pid-eaa-data.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4df6fb54c1eea6892a66206642d5bf08f4df4d7c GIT binary patch literal 30377 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/.doctrees/pid-eaa-sd-jwt.doctree b/rp-vp-kid/it/.doctrees/pid-eaa-sd-jwt.doctree new file mode 100644 index 0000000000000000000000000000000000000000..1ff0fb05a283ae1bc2f780fd119708b9f7e16e19 GIT binary patch literal 30401 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 YpVfSK6aS;u0(~do+0)aPc5t-#|6cF|w*UYD literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/.doctrees/revocation-lists.doctree b/rp-vp-kid/it/.doctrees/revocation-lists.doctree new file mode 100644 index 0000000000000000000000000000000000000000..751238e4912c62bf0df70206b2fe0b671d1054c6 GIT binary patch literal 30425 zcmcIte~=u-bw)bfNq0I)oDdR1$SjgULNL2`r#l@8WTWT@9Dc3gJZDJOPZ_*ca#Qg+IzN;v_?i4(_m%73I> zabo9tJ<~liyF0scdvhwTcc#0iyT7krzwYUN^LS$Lx4*G)8T;pKG3%;UTT07?LQO9y zX4BbF(DQaxsaehEn>Rk$e7w2e88+laQ@4%0(sV9Ej=ZW>3Wic^K8(c8l;6@SX4)%Y zeO|AIo>vE*YrHsZGZ>oWJlh9;zRiRy|&`1nRBMmiPdBMm z&QM)O6Rf5>YUX5TM7AtL%h?tnP?HC=f{Eri>+==aG!cpG!J1rkuQn9yx_^_C^YeyM zWO;^{s+GfLT_&g->V{$}#)8tco%NPnq9>Z_h`L=JaE7yjCfp5icJ?6F%n(?;=KW*~ zN>Qt6mZsOtv|(CJXI(|BDa})Zb`GF-n0C&zGz%2!wLo6MKG@rxPNyEr8IPsV4~Gw@ zRI6GU8A+v5x95z^yGA&D14s=%HOP|P)G^1qbIAjQNwB8w09EQvkiQFmyYY7|{;mU6 zLq*-F%G6e>tf}r*-)XDYtK;fEb-#M!sUZ|_v)!QpXKl`C%DfnQ71$*}O zL>yk!3YK~}H90NV7-Y`|`M6`HWxG^HayB4WK-h?n1`@~G)pXWQPB)za+t8ZMf%wR% zFu7LH3bHHJ&YA;F^}QysdM`R))?;?0Q%9%|cI*Wvyq$Z&uK6wR*$;+N$W|1~QVeOS zLnnB>Fem!?NDuD2mluop(I9}1)bER+zP0kEnti;f%If4`R~ z-$w$!C>u4cR+6BNOo+RrSs2<%y#lQR(LZlnmX<12v=p>YwXUTwFf6481(DKfsSCDZ zT5^hOANf(J4JBpjH9b|3kpVdiieb`IRV7u^Yxtv~tSx9<6})HlY7pw>sZQ#}+1if0 zv$h!PNS@J&JOx_AC+}#blCo4Kr7X$SdPOlAc{22EfylE|&Ge}wjhn(GlBz0l%}QB% zD#sX;IAh9)C&**YT(Si>1yRq%BMOskM=9GHAZpkdvSg#A_%k;&>?}CTo}N8^Ogeeu zIL#ea-8`Jh=yj#071A}u%9wQpbCw$+LDp(Y-ja$6qzF=@*QAN;c-ox>Xqx8g&)J}B zg*@d$!@TJu6ep$KMvyWdSlo`d*_h8sqn(`kHg+3K$7BjI*;dlAThBos*(> zvnOg;d|XV5qeCqmT`f2Y2ozRrs4~Em$hFtcl@+->K}wFVLru=t)scLu#MeD{N=J|S z)GRJ8rsWbwO-Wx!YZy2h=H(2Qcd}ivGDQvQCId~RBVIQyX5ENNrBup_#c5WyEmb$L z8dOXSt9qf>LfBxXB*}7s8xi5t@Guvf)oBnXXICUS;i2Y@knBWy(&wrV{URh91+}mu zhLU7@!*N2I43H$!_j>8nnB<2V70TJUW|{09Oiv`k4hrhY&OvFSD?3z%m`;)!SX3xy zXZP~hA?=zBJKfYYmz}BZ>@ZcII6KrZ&dxiQ%}zoiYbwUbn(98Xz|Ja+EGm?WPHNfg97>9v*2!IHU7?kyq(eQ}q4dPr@h9}_ zmdVa^QhEmk^^~3I9(sq$NSqxil#i@Ek?bg;<)JsDOVjDZW-V4!3q#w*;*e|RX(>E& zi5z@hcbgPqX_l{sR*`0aAjTQ-6kPv^93h^m$O1zljzkV2J*-I~mJ%6RZn2!FeUUsxNl`-j zXQoa2bdsW=?h)w$hQgXBku?xCjI*cI}BC(h24VCO(2J5d@av3Jv%bo<+>&@TZE6n;MyIRfL0$_cWR zkOm6AquvzBQ5F%;ma`&$^55#%Q!4dlOt-5kkIkybt@W{)2| z=MO5yHl&KOl*X@Km+_OSC?&ZC`!Zy7jzSB$i#SjDt%lrlKj%Ft;;reMfLOQLwGtec8d#u=BisN^KMQlcGHwQ9DI zFi>6$?woqJJ^^Bsth{0lHysIg&V_s4mx9=}>a7dF5g| z&iOD-y7h7X5+A;?yEIHN)yM%(L;@s(42;r%^6IlXQ-i&XWgD=V2^||kRD*iTyY*q- zwL+MFy&UXhBv>|+F`CMGG?^$SWyD|pjX5w z!7vwsdH{bY(x>1Ury!OHL{!f~ABqIcH2k^Q(`Ocz@kWh4FEWW&3ev)46xtzE)9VYt zcV|Dw$NBDFIJt>NRHYo_OeDtRG{{{6m+n92cWg+wglxmeD`!itm`V%z2ss`W8G>CI zjPxN+bBN2UkOR9V64*Hcc807rJ;^(mzO-D{O5E87<33Rf1uv zT7&1V{;q&pj4t)i45$t-{DxTPgtVWCSyqc#*}TO^ zB3oQwEk1K%j;&;*yN=EVrm%&)Y1zeM+FM&`dIo0*Sc^!itkr#8=gsaN(>e{C&3ry{ z3knEZdy0?w4DY4HTE*FUS0p<-i5){((DSa5Uqv%5W}bdH+--a#laCN*5UX6R&~&!7 zJ}i-KJFob-U$Jw4MujPA#;{>oXk=(rj8%0(^On&tewCQfe5W{;086XZx|kh3GoN4Y z9UTS?z11NSy#27PAB3G*MF}Lex0;p21a&MTky~n(Ke_g@%Q_ira%zCR{5tZe+shxP zAK1F9`^q1qOIXaa)(+#F1-WF%bv4+i(T5&TWh({KRLz2gCA}_~pW|i9}3^ids3)6qmis%fYMQ<*rPs^@zG+gJO23YXqrTmFNoU`>#1=1>4QfIJbrx;|f$9twzl4#j~#b}u)BtJyf zu#jwNWn<`}^QVuW7F6(CQQOaB)E1To7*>~g#dc2d&3U($T);Lij^fb85p|0su`w~EVcuxfn-vaD2@qEXyBEnsAcXz z_wopQhhpFh_vsE0KZ&P0ew+~Kqj9Qqds$*x%My_90OwXonW&$1>&e}6<06>6<7sBII{klQs)XN^SDPx&U4?Ta6AvoA(%*S9^z zg(oyhMgiX!RDXQ5#s^rB92tsdT>U=Lw!Qoken8hN_~E0+YXLv6 zYAvb!G2}gUds`W7fubsMp}kSV&VZo@Kj!ll%^*~yak1@@@R%JwaNt-))~W~a!5C>7 zkYiegUMmHjE5AX2JRQVx`=k16Na`g`U!ljhm%oIcUWzB&rLY<*e<8+Gf9Y267c6V} zukaHlJPdiufdj`CGjC|@48a3l{%YW<^7pAg7x2bFULW>1C3a(+eHM=yS*yrg?u)>IcMO#+bvd#dyDZU2j6e z!T|%J@(w)Ji(8MSZ7gfg77i}R727+Bz#Qh@iB?W5yOl7{DW{j)%2<6l7NgWH$b$yB zeHmStIxd}!*t zsdegHM=N&zs^H#;nwDbJ6dn#ZPA~IHLwxVnLKKiGL68E!3tBR^awWFDsGB2~Dul9U zuk5-<%NeqPH>DI#!%$HH-=)^HdR_6?^j-4^o_;F^PhO8a+two!%juC1$EYdXBRD!M z^GZWKva7=3v%^4wFA4a5fB4xtuoSO12w~6OxZ=bTmTcJG#Vd_>EGb4t$27tIXJT;T zvHz(y_GgyE{u?oB3bT*R?=r76#Qqg<9l_xGr?A0eW|16ZBOcp8wxgU!AZ!JU4i0HLK^VAw=r?Q0AtA!mquP+PP+{G+&Nbz{H z{1$jDf0*_HoE;rAV#5yEsOfIDAS8~0Z(|8(7HsPZZB*AdoAb6o&Ni~1pNlzXl*ce% z7IV%96DOefrX3DM#^~F0<`ATaB`1B44u2B&(*$gasw~ElM~cs~CoEWN~0ss3- zq2*!ca%#T`l2q?={HC+1g3~k`E)KwU0UlM>VsYVIVJLasD8SbV%nV>Ikf*)1IcEq{ zSWzQ>hP6T#r)))Ssi_V*n{i^LXZ^19IczQvu%Q0YJUX~3$$s`1$Z9!w7@={q@9Ol!DCxCdZT+ass8z;^v@W77? zY+i7xh$l9AIo;2I$^FcB`XCtfz`T$0po6Kv0(yKSJhzBjNaz?1DhN)k1Ual|Rn2PN zd-*SMh@cM4RdQMSN;pV`oWC=Ss@S8i1TxY*WG81UA3m z<3_1V*N;zu(#<$+YAK##{NlxFQum{=Cd66JVGzM3OY_tQXE(&MniZo{sIaW-X6KS~ zxp@&QxuvYCmDCFUn2Q{GS#?HDczLnhjXD!VUBT|zz8wY@&MxrDHBq}8$F>+j=zDj# zfn`P^`G~=ez$NCSh#dxaYTyzCNY87vBE*2}g{`D1;EksxAM;#-%4ByilJlPVCd8(i zgAWwbx`-yI3VbeHa;}86hdiHEs@5!x{4qDIl+vqN~y_IRi>;!7CKJPQk}1 z_&f!lqu}cle1(EA4^qI^0c@5Z!;DzoOo2tg z1quqZN{}gdhJpqKpP=A13jTqDzeiv@!_;5a#X4k{{6oFkP(RyHzuZv2*-+nVs6T3` zKWnhAYOrofC~q*j8;t4( zqq)H-ZZLWqjM@gHwZSNDFghEI$_Asc!6-JBfsks(%2XeH}vkc?j*-A++Cy(0)(-srnNpvFa~eaUG@pXX3h( zu9&#qKvzs$57HGA*E{HniR-;|#l-bNx?@<#ffwbvIoxaXmm+ zOk8K^iizuSx?1@Of4YMl5TRwc+9rNO!CtZ6r)@-NNm`^v)VhYDzJr)C=Un!~>TYa0&izX&~9xK-1 z>Y%%;9NtHrId0c08ms~o_+q0g4W5yhSD_TCg~O>moetyor1_Rd-_MKp&m{orwF}GM z3b&VSWbL+7$Ye@(2EB#)8fP7;HF&j~ojZA&R?MzbLw5z|x#b(8*D@0Y<5jccIlk;{ z6^lwvDp9?^Y~iW!=4psq@0?)FQI10V&RK>HJJBM1@2rx6gkbcA_>4Z^gV8oF%g^G8 zFq51>Yz4$+Bz+h9#h|4X7q&exx?%36_K;x&-s}7~_d?p=vVSc;v{zRKP2JBOH(u2T zz{Al1gYKcagZ*lJux}&-Y`wk>S-a`=9$LsBs@JR%Sop>04t63w*mP20cdrgu z@`uzN?5X%*?@9{nJ5~*B4>4BagUuxc_S#hgJKeo!e=R=P$C3h@S~akTx`X{te6TMh z1@^jC0t>f4-NAk`KG;7?3hbUfz~0_IvGSFn_#mEn@97TrZ{oxKT2gTLt|HtXO6uR@ z!~K_};F5=M_TsdRb^k3fdbh`@U9&#+vf}4SLA|~Ys4>=1^(_=-M?yJ4|eZaEk4*{QebafHLz3N z!9Eoq>=Q|WJ%dF#;r?z?aBu1ZZoE<3V}<i1#?Ew zU2@-ykM0{up_BSRcVqiH0?uH%WBWmTY~N1`TRJIhR(EWJ8)7et)*@>n>x4{F*p%+r zu8oiFnxwFeCxvakJGNWnV>^@-wuz*$nccCSi;wM0QrIT@z?Ny(CBkh>cZAjW2+K(! zJlF@q@pgpb!)2{I#P`RC`0GhQoazJO&Fv6fUliTpy%HbZ%SpkT?gL&28Rb1#?~d?u z@ezI|DTIgmK-j4RnfsLP@V*rv-rpq!Z>A4;9Xe3>O6iX9$MF&VXHp1n=>y@R_7T|X zI;A_%;o;b8m?30MWDRp`A3zVZ110Y%-NEgR4=$AyxWj#b>u@j+qfq8Hr8~eQ@c|xA z3gB(Y0VG!{-2pxjAK>|<0J4ur$u?yfTdW-vsq1&8JG=|=;nk9YcchR0n`$3@d?s|A zuylv{OnjJ)q+q_Q511YHDq8KZ$N@`tuzwUE>_=7xHe^wC+{ddp8-?u@GkD&p)$$d) n0Bd)>M3&swbanZ%e-8hw=5I9dKYT6FR|KB5J$;i0hmHRa(1Ra4 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/.doctrees/ssi-introduction.doctree b/rp-vp-kid/it/.doctrees/ssi-introduction.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9e05b7cce3b1529c529daa13403b5f874a5a8bcd GIT binary patch literal 30425 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/.doctrees/standards.doctree b/rp-vp-kid/it/.doctrees/standards.doctree new file mode 100644 index 0000000000000000000000000000000000000000..bd12e164ec8934a19e33d7bb101ee8ebc3f7c2dd GIT binary patch literal 25446 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 J_uqWa|39H~vVi~q literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/.doctrees/trust.doctree b/rp-vp-kid/it/.doctrees/trust.doctree new file mode 100644 index 0000000000000000000000000000000000000000..a9a27e61c985c909d0e57051a0a044e70a963eee GIT binary patch literal 30293 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 bKaYP_^VggBpRE??a{%wyJbgw7XNmt0_$}%* literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/.doctrees/wallet-instance-attestation.doctree b/rp-vp-kid/it/.doctrees/wallet-instance-attestation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..9eed0c1abb2de8d89fed65bfa59cb0e8b37245d7 GIT binary patch literal 30557 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/.doctrees/wallet-solution.doctree b/rp-vp-kid/it/.doctrees/wallet-solution.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4007e99f6852f35e32ab3908e82f62372312c961 GIT binary patch literal 30413 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/_images/Eo_circle_green_checkmark.svg b/rp-vp-kid/it/_images/Eo_circle_green_checkmark.svg new file mode 100644 index 000000000..19e0bd7f0 --- /dev/null +++ b/rp-vp-kid/it/_images/Eo_circle_green_checkmark.svg @@ -0,0 +1,2 @@ + diff --git a/rp-vp-kid/it/_images/Eo_circle_red_letter-x.svg b/rp-vp-kid/it/_images/Eo_circle_red_letter-x.svg new file mode 100644 index 000000000..4c3c8e785 --- /dev/null +++ b/rp-vp-kid/it/_images/Eo_circle_red_letter-x.svg @@ -0,0 +1 @@ + diff --git a/rp-vp-kid/it/_sources/backup-restore.rst.txt b/rp-vp-kid/it/_sources/backup-restore.rst.txt new file mode 100644 index 000000000..186042348 --- /dev/null +++ b/rp-vp-kid/it/_sources/backup-restore.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _backup-restore.rst: + +backup-restore.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_sources/contribute.rst.txt b/rp-vp-kid/it/_sources/contribute.rst.txt new file mode 100644 index 000000000..9d984dea8 --- /dev/null +++ b/rp-vp-kid/it/_sources/contribute.rst.txt @@ -0,0 +1,8 @@ +.. include:: ../common/common_definitions.rst + +.. _contribute.rst: + +contribute.rst ++++++++++++++++++++++++++++ + +Instruction to join in the development here. diff --git a/rp-vp-kid/it/_sources/defined-terms.rst.txt b/rp-vp-kid/it/_sources/defined-terms.rst.txt new file mode 100644 index 000000000..e0b9acdc3 --- /dev/null +++ b/rp-vp-kid/it/_sources/defined-terms.rst.txt @@ -0,0 +1,89 @@ +.. include:: ../common/common_definitions.rst + +.. _defined-terms.rst: + +defined-terms.rst ++++++++++++++++++++++++++++ + +Di seguito le descrizioni di acronimi e definizioni, correlati al presente documento utili ad approfondimenti su tematiche che completano l' it-wallet e i componenti con i quali interagisce. + + +Acronimi +-------- +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - **Acronimo** + - **Descrizione** + * - **OID4VP** + - OpenID for Verifiable Presentation + * - **PID** + - Person Identification Data + * - **VC** + - Verifiable Credential + * - **VP** + - Verifiable Presentation + * - **API** + - Application Programming Interface. Insieme componenti previsti per semplificare gli scenari di integrazione di uno specifico Sistema. + + +Definizioni +----------- + +.. list-table:: + :widths: 20 80 + :header-rows: 1 + + * - **Definizione** + - **Descrizione** + * - **Wallet Instance** + - Mobile App che gestisce, memorizza e protegge le Verifiable Credentials di un holder e ne consente la presentazione ad una Relying Party + * - **Relying Party** + - Entità che riceve da una Wallet Instance una o più VP e processa le stesse + + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_sources/index.rst.txt b/rp-vp-kid/it/_sources/index.rst.txt new file mode 100644 index 000000000..abe2399cd --- /dev/null +++ b/rp-vp-kid/it/_sources/index.rst.txt @@ -0,0 +1,55 @@ +.. include:: ../common/common_definitions.rst + +============================================== +The Italian EUDI Wallet implementation profile +============================================== + +[TODO INTRO] + +Introduzione + +cos'è eIDAS + +cos’è IT-Wallet + +scopo delle regole tecniche + + +In this documentation you can find the technical specification +for implementing the following components: + + - Entities of the ecosystem according to `EIDAS-ARF`_. + - Infrastructure of trust attesting realiability and eligibility of the participants. + - PID and EAAs data schemes and attribute sets. + - PID/EAA in MDL CBOR format. + - PID/EAA in `SD-JWT`_ format. + - Wallet Solution general architecture. + - Wallet Instance Attestation data model in `JWS`_ format. + - Issuance of PID/EAA according to `OpenID4VCI`_. + - Presentation of PID/EAA according to `OpenID4VP`_. + - Presentation of pseudonyms according to `SIOPv2`_. + - PID/EAA backup and restore mechanisms. + - PID/EAA revocation lists. + + +Index of content +---------------- + +.. toctree:: + :maxdepth: 2 + + ssi-introduction.rst + defined-terms.rst + trust.rst + pid-eaa-data.rst + pid-eaa-mdoc-cbor.rst + pid-eaa-sd-jwt.rst + wallet-solution.rst + wallet-instance-attestation.rst + issuance.rst + relying-party-solution.rst + pseudonyms.rst + backup-restore.rst + revocation-lists.rst + contribute.rst + standards.rst diff --git a/rp-vp-kid/it/_sources/issuance.rst.txt b/rp-vp-kid/it/_sources/issuance.rst.txt new file mode 100644 index 000000000..1effd9399 --- /dev/null +++ b/rp-vp-kid/it/_sources/issuance.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _issuance.rst: + +issuance.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_sources/pid-eaa-data.rst.txt b/rp-vp-kid/it/_sources/pid-eaa-data.rst.txt new file mode 100644 index 000000000..8ab0305c9 --- /dev/null +++ b/rp-vp-kid/it/_sources/pid-eaa-data.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _pid-eaa-data.rst: + +pid-eaa-data.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_sources/pid-eaa-mdoc-cbor.rst.txt b/rp-vp-kid/it/_sources/pid-eaa-mdoc-cbor.rst.txt new file mode 100644 index 000000000..d96df2fff --- /dev/null +++ b/rp-vp-kid/it/_sources/pid-eaa-mdoc-cbor.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _pid-eaa-mdoc-cbor.rst: + +pid-eaa-mdoc-cbor.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_sources/pid-eaa-sd-jwt.rst.txt b/rp-vp-kid/it/_sources/pid-eaa-sd-jwt.rst.txt new file mode 100644 index 000000000..b4daf4770 --- /dev/null +++ b/rp-vp-kid/it/_sources/pid-eaa-sd-jwt.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _pid-eaa-sd-jwt.rst: + +pid-eaa-sd-jwt.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_sources/pseudonyms.rst.txt b/rp-vp-kid/it/_sources/pseudonyms.rst.txt new file mode 100644 index 000000000..7b20567f9 --- /dev/null +++ b/rp-vp-kid/it/_sources/pseudonyms.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _pseudonyms.rst: + +pseudonyms.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_sources/revocation-lists.rst.txt b/rp-vp-kid/it/_sources/revocation-lists.rst.txt new file mode 100644 index 000000000..49cc7b174 --- /dev/null +++ b/rp-vp-kid/it/_sources/revocation-lists.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _revocation-lists.rst: + +revocation-lists.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_sources/ssi-introduction.rst.txt b/rp-vp-kid/it/_sources/ssi-introduction.rst.txt new file mode 100644 index 000000000..bf8e0a9e6 --- /dev/null +++ b/rp-vp-kid/it/_sources/ssi-introduction.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _ssi-introduction.rst: + +ssi-introduction.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_sources/standards.rst.txt b/rp-vp-kid/it/_sources/standards.rst.txt new file mode 100644 index 000000000..924e882fc --- /dev/null +++ b/rp-vp-kid/it/_sources/standards.rst.txt @@ -0,0 +1,8 @@ +.. include:: ../common/common_definitions.rst + +.. _standards.rst: + +Standards ++++++++++ + +TODO diff --git a/rp-vp-kid/it/_sources/trust.rst.txt b/rp-vp-kid/it/_sources/trust.rst.txt new file mode 100644 index 000000000..aa613216a --- /dev/null +++ b/rp-vp-kid/it/_sources/trust.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _trust.rst: + +trust.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_sources/wallet-instance-attestation.rst.txt b/rp-vp-kid/it/_sources/wallet-instance-attestation.rst.txt new file mode 100644 index 000000000..35d4b69c0 --- /dev/null +++ b/rp-vp-kid/it/_sources/wallet-instance-attestation.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _wallet-instance-attestation.rst: + +wallet-instance-attestation.rst ++++++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_sources/wallet-solution.rst.txt b/rp-vp-kid/it/_sources/wallet-solution.rst.txt new file mode 100644 index 000000000..bb3964a70 --- /dev/null +++ b/rp-vp-kid/it/_sources/wallet-solution.rst.txt @@ -0,0 +1,57 @@ +.. include:: ../common/common_definitions.rst + +.. _wallet-solution.rst: + +wallet-solution.rst ++++++++++++++++++++++++++++ + +[What is it] + +[What it is usefull for] + +[Example] + +General Properties +------------------ + +[TODO] + + +Requirements +------------ + + - req 1 + - req 2 + + +Attributes +---------- + +[Table with parameters/attributes] + +.. list-table:: + :widths: 20 60 + :header-rows: 1 + + * - **Claim** + - **Description** + * - key + - value + + +Implementation considerations +----------------------------- + +TODO + + +Libraries and code snippets +--------------------------- + +TODO + + +External references +------------------- + +TODO diff --git a/rp-vp-kid/it/_static/_sphinx_javascript_frameworks_compat.js b/rp-vp-kid/it/_static/_sphinx_javascript_frameworks_compat.js new file mode 100644 index 000000000..8549469dc --- /dev/null +++ b/rp-vp-kid/it/_static/_sphinx_javascript_frameworks_compat.js @@ -0,0 +1,134 @@ +/* + * _sphinx_javascript_frameworks_compat.js + * ~~~~~~~~~~ + * + * Compatability shim for jQuery and underscores.js. + * + * WILL BE REMOVED IN Sphinx 6.0 + * xref RemovedInSphinx60Warning + * + */ + +/** + * select a different prefix for underscore + */ +$u = _.noConflict(); + + +/** + * small helper function to urldecode strings + * + * See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL + */ +jQuery.urldecode = function(x) { + if (!x) { + return x + } + return decodeURIComponent(x.replace(/\+/g, ' ')); +}; + +/** + * small helper function to urlencode strings + */ +jQuery.urlencode = encodeURIComponent; + +/** + * This function returns the parsed url parameters of the + * current request. Multiple values per key are supported, + * it will always return arrays of strings for the value parts. + */ +jQuery.getQueryParameters = function(s) { + if (typeof s === 'undefined') + s = document.location.search; + var parts = s.substr(s.indexOf('?') + 1).split('&'); + var result = {}; + for (var i = 0; i < parts.length; i++) { + var tmp = parts[i].split('=', 2); + var key = jQuery.urldecode(tmp[0]); + var value = jQuery.urldecode(tmp[1]); + if (key in result) + result[key].push(value); + else + result[key] = [value]; + } + return result; +}; + +/** + * highlight a given string on a jquery object by wrapping it in + * span elements with the given class name. + */ +jQuery.fn.highlightText = function(text, className) { + function highlight(node, addItems) { + if (node.nodeType === 3) { + var val = node.nodeValue; + var pos = val.toLowerCase().indexOf(text); + if (pos >= 0 && + !jQuery(node.parentNode).hasClass(className) && + !jQuery(node.parentNode).hasClass("nohighlight")) { + var span; + var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.className = className; + } + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + node.parentNode.insertBefore(span, node.parentNode.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling)); + node.nodeValue = val.substr(0, pos); + if (isInSVG) { + var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect"); + var bbox = node.parentElement.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute('class', className); + addItems.push({ + "parent": node.parentNode, + "target": rect}); + } + } + } + else if (!jQuery(node).is("button, select, textarea")) { + jQuery.each(node.childNodes, function() { + highlight(this, addItems); + }); + } + } + var addItems = []; + var result = this.each(function() { + highlight(this, addItems); + }); + for (var i = 0; i < addItems.length; ++i) { + jQuery(addItems[i].parent).before(addItems[i].target); + } + return result; +}; + +/* + * backward compatibility for jQuery.browser + * This will be supported until firefox bug is fixed. + */ +if (!jQuery.browser) { + jQuery.uaMatch = function(ua) { + ua = ua.toLowerCase(); + + var match = /(chrome)[ \/]([\w.]+)/.exec(ua) || + /(webkit)[ \/]([\w.]+)/.exec(ua) || + /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) || + /(msie) ([\w.]+)/.exec(ua) || + ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) || + []; + + return { + browser: match[ 1 ] || "", + version: match[ 2 ] || "0" + }; + }; + jQuery.browser = {}; + jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true; +} diff --git a/rp-vp-kid/it/_static/basic.css b/rp-vp-kid/it/_static/basic.css new file mode 100644 index 000000000..9039e027c --- /dev/null +++ b/rp-vp-kid/it/_static/basic.css @@ -0,0 +1,932 @@ +/* + * basic.css + * ~~~~~~~~~ + * + * Sphinx stylesheet -- basic theme. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +/* -- main layout ----------------------------------------------------------- */ + +div.clearer { + clear: both; +} + +div.section::after { + display: block; + content: ''; + clear: left; +} + +/* -- relbar ---------------------------------------------------------------- */ + +div.related { + width: 100%; + font-size: 90%; +} + +div.related h3 { + display: none; +} + +div.related ul { + margin: 0; + padding: 0 0 0 10px; + list-style: none; +} + +div.related li { + display: inline; +} + +div.related li.right { + float: right; + margin-right: 5px; +} + +/* -- sidebar --------------------------------------------------------------- */ + +div.sphinxsidebarwrapper { + padding: 10px 5px 0 10px; +} + +div.sphinxsidebar { + float: left; + width: 230px; + margin-left: -100%; + font-size: 90%; + word-wrap: break-word; + overflow-wrap : break-word; +} + +div.sphinxsidebar ul { + list-style: none; +} + +div.sphinxsidebar ul ul, +div.sphinxsidebar ul.want-points { + margin-left: 20px; + list-style: square; +} + +div.sphinxsidebar ul ul { + margin-top: 0; + margin-bottom: 0; +} + +div.sphinxsidebar form { + margin-top: 10px; +} + +div.sphinxsidebar input { + border: 1px solid #98dbcc; + font-family: sans-serif; + font-size: 1em; +} + +div.sphinxsidebar #searchbox form.search { + overflow: hidden; +} + +div.sphinxsidebar #searchbox input[type="text"] { + float: left; + width: 80%; + padding: 0.25em; + box-sizing: border-box; +} + +div.sphinxsidebar #searchbox input[type="submit"] { + float: left; + width: 20%; + border-left: none; + padding: 0.25em; + box-sizing: border-box; +} + + +img { + border: 0; + max-width: 100%; +} + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li p.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 90%; + margin-left: auto; + margin-right: auto; +} + +table.contentstable p.biglink { + line-height: 150%; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable { + width: 100%; +} + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable ul { + margin-top: 0; + margin-bottom: 0; + list-style-type: none; +} + +table.indextable > tbody > tr > td > ul { + padding-left: 0em; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +div.modindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +div.genindex-jumpbox { + border-top: 1px solid #ddd; + border-bottom: 1px solid #ddd; + margin: 1em 0 1em 0; + padding: 0.4em; +} + +/* -- domain module index --------------------------------------------------- */ + +table.modindextable td { + padding: 2px; + border-collapse: collapse; +} + +/* -- general body styles --------------------------------------------------- */ + +div.body { + min-width: 360px; + max-width: 800px; +} + +div.body p, div.body dd, div.body li, div.body blockquote { + -moz-hyphens: auto; + -ms-hyphens: auto; + -webkit-hyphens: auto; + hyphens: auto; +} + +a.headerlink { + visibility: hidden; +} + +a.brackets:before, +span.brackets > a:before{ + content: "["; +} + +a.brackets:after, +span.brackets > a:after { + content: "]"; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink, +caption:hover > a.headerlink, +p.caption:hover > a.headerlink, +div.code-block-caption:hover > a.headerlink { + visibility: visible; +} + +div.body p.caption { + text-align: inherit; +} + +div.body td { + text-align: left; +} + +.first { + margin-top: 0 !important; +} + +p.rubric { + margin-top: 30px; + font-weight: bold; +} + +img.align-left, figure.align-left, .figure.align-left, object.align-left { + clear: left; + float: left; + margin-right: 1em; +} + +img.align-right, figure.align-right, .figure.align-right, object.align-right { + clear: right; + float: right; + margin-left: 1em; +} + +img.align-center, figure.align-center, .figure.align-center, object.align-center { + display: block; + margin-left: auto; + margin-right: auto; +} + +img.align-default, figure.align-default, .figure.align-default { + display: block; + margin-left: auto; + margin-right: auto; +} + +.align-left { + text-align: left; +} + +.align-center { + text-align: center; +} + +.align-default { + text-align: center; +} + +.align-right { + text-align: right; +} + +/* -- sidebars -------------------------------------------------------------- */ + +div.sidebar, +aside.sidebar { + margin: 0 0 0.5em 1em; + border: 1px solid #ddb; + padding: 7px; + background-color: #ffe; + width: 40%; + float: right; + clear: right; + overflow-x: auto; +} + +p.sidebar-title { + font-weight: bold; +} + +div.admonition, div.topic, aside.topic, blockquote { + clear: left; +} + +/* -- topics ---------------------------------------------------------------- */ + +div.topic, aside.topic { + border: 1px solid #ccc; + padding: 7px; + margin: 10px 0 10px 0; +} + +p.topic-title { + font-size: 1.1em; + font-weight: bold; + margin-top: 10px; +} + +/* -- admonitions ----------------------------------------------------------- */ + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 7px; +} + +div.admonition dt { + font-weight: bold; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; +} + +div.body p.centered { + text-align: center; + margin-top: 25px; +} + +/* -- content of sidebars/topics/admonitions -------------------------------- */ + +div.sidebar > :last-child, +aside.sidebar > :last-child, +div.topic > :last-child, +aside.topic > :last-child, +div.admonition > :last-child { + margin-bottom: 0; +} + +div.sidebar::after, +aside.sidebar::after, +div.topic::after, +aside.topic::after, +div.admonition::after, +blockquote::after { + display: block; + content: ''; + clear: both; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + margin-top: 10px; + margin-bottom: 10px; + border: 0; + border-collapse: collapse; +} + +table.align-center { + margin-left: auto; + margin-right: auto; +} + +table.align-default { + margin-left: auto; + margin-right: auto; +} + +table caption span.caption-number { + font-style: italic; +} + +table caption span.caption-text { +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + +th > :first-child, +td > :first-child { + margin-top: 0px; +} + +th > :last-child, +td > :last-child { + margin-bottom: 0px; +} + +/* -- figures --------------------------------------------------------------- */ + +div.figure, figure { + margin: 0.5em; + padding: 0.5em; +} + +div.figure p.caption, figcaption { + padding: 0.3em; +} + +div.figure p.caption span.caption-number, +figcaption span.caption-number { + font-style: italic; +} + +div.figure p.caption span.caption-text, +figcaption span.caption-text { +} + +/* -- field list styles ----------------------------------------------------- */ + +table.field-list td, table.field-list th { + border: 0 !important; +} + +.field-list ul { + margin: 0; + padding-left: 1em; +} + +.field-list p { + margin: 0; +} + +.field-name { + -moz-hyphens: manual; + -ms-hyphens: manual; + -webkit-hyphens: manual; + hyphens: manual; +} + +/* -- hlist styles ---------------------------------------------------------- */ + +table.hlist { + margin: 1em 0; +} + +table.hlist td { + vertical-align: top; +} + +/* -- object description styles --------------------------------------------- */ + +.sig { + font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace; +} + +.sig-name, code.descname { + background-color: transparent; + font-weight: bold; +} + +.sig-name { + font-size: 1.1em; +} + +code.descname { + font-size: 1.2em; +} + +.sig-prename, code.descclassname { + background-color: transparent; +} + +.optional { + font-size: 1.3em; +} + +.sig-paren { + font-size: larger; +} + +.sig-param.n { + font-style: italic; +} + +/* C++ specific styling */ + +.sig-inline.c-texpr, +.sig-inline.cpp-texpr { + font-family: unset; +} + +.sig.c .k, .sig.c .kt, +.sig.cpp .k, .sig.cpp .kt { + color: #0033B3; +} + +.sig.c .m, +.sig.cpp .m { + color: #1750EB; +} + +.sig.c .s, .sig.c .sc, +.sig.cpp .s, .sig.cpp .sc { + color: #067D17; +} + + +/* -- other body styles ----------------------------------------------------- */ + +ol.arabic { + list-style: decimal; +} + +ol.loweralpha { + list-style: lower-alpha; +} + +ol.upperalpha { + list-style: upper-alpha; +} + +ol.lowerroman { + list-style: lower-roman; +} + +ol.upperroman { + list-style: upper-roman; +} + +:not(li) > ol > li:first-child > :first-child, +:not(li) > ul > li:first-child > :first-child { + margin-top: 0px; +} + +:not(li) > ol > li:last-child > :last-child, +:not(li) > ul > li:last-child > :last-child { + margin-bottom: 0px; +} + +ol.simple ol p, +ol.simple ul p, +ul.simple ol p, +ul.simple ul p { + margin-top: 0; +} + +ol.simple > li:not(:first-child) > p, +ul.simple > li:not(:first-child) > p { + margin-top: 0; +} + +ol.simple p, +ul.simple p { + margin-bottom: 0; +} + +/* Docutils 0.17 and older (footnotes & citations) */ +dl.footnote > dt, +dl.citation > dt { + float: left; + margin-right: 0.5em; +} + +dl.footnote > dd, +dl.citation > dd { + margin-bottom: 0em; +} + +dl.footnote > dd:after, +dl.citation > dd:after { + content: ""; + clear: both; +} + +/* Docutils 0.18+ (footnotes & citations) */ +aside.footnote > span, +div.citation > span { + float: left; +} +aside.footnote > span:last-of-type, +div.citation > span:last-of-type { + padding-right: 0.5em; +} +aside.footnote > p { + margin-left: 2em; +} +div.citation > p { + margin-left: 4em; +} +aside.footnote > p:last-of-type, +div.citation > p:last-of-type { + margin-bottom: 0em; +} +aside.footnote > p:last-of-type:after, +div.citation > p:last-of-type:after { + content: ""; + clear: both; +} + +/* Footnotes & citations ends */ + +dl.field-list { + display: grid; + grid-template-columns: fit-content(30%) auto; +} + +dl.field-list > dt { + font-weight: bold; + word-break: break-word; + padding-left: 0.5em; + padding-right: 5px; +} + +dl.field-list > dt:after { + content: ":"; +} + +dl.field-list > dd { + padding-left: 0.5em; + margin-top: 0em; + margin-left: 0em; + margin-bottom: 0em; +} + +dl { + margin-bottom: 15px; +} + +dd > :first-child { + margin-top: 0px; +} + +dd ul, dd table { + margin-bottom: 10px; +} + +dd { + margin-top: 3px; + margin-bottom: 10px; + margin-left: 30px; +} + +dl > dd:last-child, +dl > dd:last-child > :last-child { + margin-bottom: 0; +} + +dt:target, span.highlighted { + background-color: #fbe54e; +} + +rect.highlighted { + fill: #fbe54e; +} + +dl.glossary dt { + font-weight: bold; + font-size: 1.1em; +} + +.versionmodified { + font-style: italic; +} + +.system-message { + background-color: #fda; + padding: 5px; + border: 3px solid red; +} + +.footnote:target { + background-color: #ffa; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +.guilabel, .menuselection { + font-family: sans-serif; +} + +.accelerator { + text-decoration: underline; +} + +.classifier { + font-style: oblique; +} + +.classifier:before { + font-style: normal; + margin: 0 0.5em; + content: ":"; + display: inline-block; +} + +abbr, acronym { + border-bottom: dotted 1px; + cursor: help; +} + +/* -- code displays --------------------------------------------------------- */ + +pre { + overflow: auto; + overflow-y: hidden; /* fixes display issues on Chrome browsers */ +} + +pre, div[class*="highlight-"] { + clear: both; +} + +span.pre { + -moz-hyphens: none; + -ms-hyphens: none; + -webkit-hyphens: none; + hyphens: none; + white-space: nowrap; +} + +div[class*="highlight-"] { + margin: 1em 0; +} + +td.linenos pre { + border: 0; + background-color: transparent; + color: #aaa; +} + +table.highlighttable { + display: block; +} + +table.highlighttable tbody { + display: block; +} + +table.highlighttable tr { + display: flex; +} + +table.highlighttable td { + margin: 0; + padding: 0; +} + +table.highlighttable td.linenos { + padding-right: 0.5em; +} + +table.highlighttable td.code { + flex: 1; + overflow: hidden; +} + +.highlight .hll { + display: block; +} + +div.highlight pre, +table.highlighttable pre { + margin: 0; +} + +div.code-block-caption + div { + margin-top: 0; +} + +div.code-block-caption { + margin-top: 1em; + padding: 2px 5px; + font-size: small; +} + +div.code-block-caption code { + background-color: transparent; +} + +table.highlighttable td.linenos, +span.linenos, +div.highlight span.gp { /* gp: Generic.Prompt */ + user-select: none; + -webkit-user-select: text; /* Safari fallback only */ + -webkit-user-select: none; /* Chrome/Safari */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* IE10+ */ +} + +div.code-block-caption span.caption-number { + padding: 0.1em 0.3em; + font-style: italic; +} + +div.code-block-caption span.caption-text { +} + +div.literal-block-wrapper { + margin: 1em 0; +} + +code.xref, a code { + background-color: transparent; + font-weight: bold; +} + +h1 code, h2 code, h3 code, h4 code, h5 code, h6 code { + background-color: transparent; +} + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family: sans-serif; +} + +div.viewcode-block:target { + margin: -1px -10px; + padding: 0 10px; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +span.eqno a.headerlink { + position: absolute; + z-index: 1; +} + +div.math:hover a.headerlink { + visibility: visible; +} + +/* -- printout stylesheet --------------------------------------------------- */ + +@media print { + div.document, + div.documentwrapper, + div.bodywrapper { + margin: 0 !important; + width: 100%; + } + + div.sphinxsidebar, + div.related, + div.footer, + #top-link { + display: none; + } +} \ No newline at end of file diff --git a/rp-vp-kid/it/_static/css/theme.css b/rp-vp-kid/it/_static/css/theme.css new file mode 100644 index 000000000..6c29bebea --- /dev/null +++ b/rp-vp-kid/it/_static/css/theme.css @@ -0,0 +1 @@ +@charset "UTF-8";@import url("https://fonts.googleapis.com/css?family=Lora:400,700");@import url("https://fonts.googleapis.com/css?family=Roboto+Mono:400,700");@import url("https://fonts.googleapis.com/css?family=Titillium+Web:300,400,600,700");.primary-bg{background-color:#06c}.primary-color{color:#06c}.primary-border-color,.primary-border-color.border{border-color:#06c!important}.white-bg{background-color:#fff}.white-color{color:#fff}.white-border-color-,.white-border-color-.border{border-color:#fff!important}.primary-bg-a1{background-color:#bfdfff}.primary-color-a1{color:#bfdfff}.primary-border-color-a1,.primary-border-color-a1.border{border-color:#bfdfff!important}.primary-bg-a2{background-color:#93c4f5}.primary-color-a2{color:#93c4f5}.primary-border-color-a2,.primary-border-color-a2.border{border-color:#93c4f5!important}.primary-bg-a3{background-color:#6aaaeb}.primary-color-a3{color:#6aaaeb}.primary-border-color-a3,.primary-border-color-a3.border{border-color:#6aaaeb!important}.primary-bg-a4{background-color:#4392e0}.primary-color-a4{color:#4392e0}.primary-border-color-a4,.primary-border-color-a4.border{border-color:#4392e0!important}.primary-bg-a5{background-color:#207bd6}.primary-color-a5{color:#207bd6}.primary-border-color-a5,.primary-border-color-a5.border{border-color:#207bd6!important}.primary-bg-a6{background-color:#06c}.primary-color-a6{color:#06c}.primary-border-color-a6,.primary-border-color-a6.border{border-color:#06c!important}.primary-bg-a7{background-color:#0059b3}.primary-color-a7{color:#0059b3}.primary-border-color-a7,.primary-border-color-a7.border{border-color:#0059b3!important}.primary-bg-a8{background-color:#004d99}.primary-color-a8{color:#004d99}.primary-border-color-a8,.primary-border-color-a8.border{border-color:#004d99!important}.primary-bg-a9{background-color:#004080}.primary-color-a9{color:#004080}.primary-border-color-a9,.primary-border-color-a9.border{border-color:#004080!important}.primary-bg-a10{background-color:#036}.primary-color-a10{color:#036}.primary-border-color-a10,.primary-border-color-a10.border{border-color:#036!important}.primary-bg-a11{background-color:#00264d}.primary-color-a11{color:#00264d}.primary-border-color-a11,.primary-border-color-a11.border{border-color:#00264d!important}.primary-bg-a12{background-color:#001a33}.primary-color-a12{color:#001a33}.primary-border-color-a12,.primary-border-color-a12.border{border-color:#001a33!important}.primary-bg-b1{background-color:#06c}.primary-color-b1{color:#06c}.primary-border-color-b1,.primary-border-color-b1.border{border-color:#06c!important}.primary-bg-b2{background-color:#1262b3}.primary-color-b2{color:#1262b3}.primary-border-color-b2,.primary-border-color-b2.border{border-color:#1262b3!important}.primary-bg-b3{background-color:#1f5c99}.primary-color-b3{color:#1f5c99}.primary-border-color-b3,.primary-border-color-b3.border{border-color:#1f5c99!important}.primary-bg-b4{background-color:#265380}.primary-color-b4{color:#265380}.primary-border-color-b4,.primary-border-color-b4.border{border-color:#265380!important}.primary-bg-b5{background-color:#294766}.primary-color-b5{color:#294766}.primary-border-color-b5,.primary-border-color-b5.border{border-color:#294766!important}.primary-bg-b6{background-color:#26394d}.primary-color-b6{color:#26394d}.primary-border-color-b6,.primary-border-color-b6.border{border-color:#26394d!important}.primary-bg-b7{background-color:#1f2933}.primary-color-b7{color:#1f2933}.primary-border-color-b7,.primary-border-color-b7.border{border-color:#1f2933!important}.primary-bg-b8{background-color:#12161a}.primary-color-b8{color:#12161a}.primary-border-color-b8,.primary-border-color-b8.border{border-color:#12161a!important}.primary-bg-c1{background-color:#dce9f5}.primary-color-c1{color:#dce9f5}.primary-border-color-c1,.primary-border-color-c1.border{border-color:#dce9f5!important}.primary-bg-c2{background-color:#c4dcf5}.primary-color-c2{color:#c4dcf5}.primary-border-color-c2,.primary-border-color-c2.border{border-color:#c4dcf5!important}.primary-bg-c3{background-color:#abd0f5}.primary-color-c3{color:#abd0f5}.primary-border-color-c3,.primary-border-color-c3.border{border-color:#abd0f5!important}.primary-bg-c4{background-color:#93c4f5}.primary-color-c4{color:#93c4f5}.primary-border-color-c4,.primary-border-color-c4.border{border-color:#93c4f5!important}.primary-bg-c5{background-color:#7ab8f5}.primary-color-c5{color:#7ab8f5}.primary-border-color-c5,.primary-border-color-c5.border{border-color:#7ab8f5!important}.primary-bg-c6{background-color:#62abf5}.primary-color-c6{color:#62abf5}.primary-border-color-c6,.primary-border-color-c6.border{border-color:#62abf5!important}.primary-bg-c7{background-color:#499ff5}.primary-color-c7{color:#499ff5}.primary-border-color-c7,.primary-border-color-c7.border{border-color:#499ff5!important}.primary-bg-c8{background-color:#3193f5}.primary-color-c8{color:#3193f5}.primary-border-color-c8,.primary-border-color-c8.border{border-color:#3193f5!important}.primary-bg-c9{background-color:#1887f5}.primary-color-c9{color:#1887f5}.primary-border-color-c9,.primary-border-color-c9.border{border-color:#1887f5!important}.primary-bg-c10{background-color:#007af5}.primary-color-c10{color:#007af5}.primary-border-color-c10,.primary-border-color-c10.border{border-color:#007af5!important}.primary-bg-c11{background-color:#0070e0}.primary-color-c11{color:#0070e0}.primary-border-color-c11,.primary-border-color-c11.border{border-color:#0070e0!important}.primary-bg-c12{background-color:#06c}.primary-color-c12{color:#06c}.primary-border-color-c12,.primary-border-color-c12.border{border-color:#06c!important}.analogue-1-bg-a1{background-color:#e7e6ff}.analogue-1-color-a1{color:#e7e6ff}.analogue-1-border-color-a1,.analogue-1-border-color-a1.border{border-color:#e7e6ff!important}.analogue-1-bg-a2{background-color:#bbb8f5}.analogue-1-color-a2{color:#bbb8f5}.analogue-1-border-color-a2,.analogue-1-border-color-a2.border{border-color:#bbb8f5!important}.analogue-1-bg-a3{background-color:#918deb}.analogue-1-color-a3{color:#918deb}.analogue-1-border-color-a3,.analogue-1-border-color-a3.border{border-color:#918deb!important}.analogue-1-bg-a4{background-color:#6b65e0}.analogue-1-color-a4{color:#6b65e0}.analogue-1-border-color-a4,.analogue-1-border-color-a4.border{border-color:#6b65e0!important}.analogue-1-bg-a5{background-color:#4840d6}.analogue-1-color-a5{color:#4840d6}.analogue-1-border-color-a5,.analogue-1-border-color-a5.border{border-color:#4840d6!important}.analogue-1-bg-a6{background-color:#271fcc}.analogue-1-color-a6{color:#271fcc}.analogue-1-border-color-a6,.analogue-1-border-color-a6.border{border-color:#271fcc!important}.analogue-1-bg-a7{background-color:#221bb3}.analogue-1-color-a7{color:#221bb3}.analogue-1-border-color-a7,.analogue-1-border-color-a7.border{border-color:#221bb3!important}.analogue-1-bg-a8{background-color:#1d1799}.analogue-1-color-a8{color:#1d1799}.analogue-1-border-color-a8,.analogue-1-border-color-a8.border{border-color:#1d1799!important}.analogue-1-bg-a9{background-color:#191380}.analogue-1-color-a9{color:#191380}.analogue-1-border-color-a9,.analogue-1-border-color-a9.border{border-color:#191380!important}.analogue-1-bg-a10{background-color:#140f66}.analogue-1-color-a10{color:#140f66}.analogue-1-border-color-a10,.analogue-1-border-color-a10.border{border-color:#140f66!important}.analogue-1-bg-a11{background-color:#0f0b4d}.analogue-1-color-a11{color:#0f0b4d}.analogue-1-border-color-a11,.analogue-1-border-color-a11.border{border-color:#0f0b4d!important}.analogue-1-bg-a12{background-color:#0a0833}.analogue-1-color-a12{color:#0a0833}.analogue-1-border-color-a12,.analogue-1-border-color-a12.border{border-color:#0a0833!important}.analogue-2-bg-a1{background-color:#ccfffd}.analogue-2-color-a1{color:#ccfffd}.analogue-2-border-color-a1,.analogue-2-border-color-a1.border{border-color:#ccfffd!important}.analogue-2-bg-a2{background-color:#9ff5f2}.analogue-2-color-a2{color:#9ff5f2}.analogue-2-border-color-a2,.analogue-2-border-color-a2.border{border-color:#9ff5f2!important}.analogue-2-bg-a3{background-color:#75ebe7}.analogue-2-color-a3{color:#75ebe7}.analogue-2-border-color-a3,.analogue-2-border-color-a3.border{border-color:#75ebe7!important}.analogue-2-bg-a4{background-color:#4fe0dc}.analogue-2-color-a4{color:#4fe0dc}.analogue-2-border-color-a4,.analogue-2-border-color-a4.border{border-color:#4fe0dc!important}.analogue-2-bg-a5{background-color:#2bd6d0}.analogue-2-color-a5{color:#2bd6d0}.analogue-2-border-color-a5,.analogue-2-border-color-a5.border{border-color:#2bd6d0!important}.analogue-2-bg-a6{background-color:#0accc6}.analogue-2-color-a6{color:#0accc6}.analogue-2-border-color-a6,.analogue-2-border-color-a6.border{border-color:#0accc6!important}.analogue-2-bg-a7{background-color:#09b3ad}.analogue-2-color-a7{color:#09b3ad}.analogue-2-border-color-a7,.analogue-2-border-color-a7.border{border-color:#09b3ad!important}.analogue-2-bg-a8{background-color:#089994}.analogue-2-color-a8{color:#089994}.analogue-2-border-color-a8,.analogue-2-border-color-a8.border{border-color:#089994!important}.analogue-2-bg-a9{background-color:#06807b}.analogue-2-color-a9{color:#06807b}.analogue-2-border-color-a9,.analogue-2-border-color-a9.border{border-color:#06807b!important}.analogue-2-bg-a10{background-color:#056663}.analogue-2-color-a10{color:#056663}.analogue-2-border-color-a10,.analogue-2-border-color-a10.border{border-color:#056663!important}.analogue-2-bg-a11{background-color:#044d4a}.analogue-2-color-a11{color:#044d4a}.analogue-2-border-color-a11,.analogue-2-border-color-a11.border{border-color:#044d4a!important}.analogue-2-bg-a12{background-color:#033331}.analogue-2-color-a12{color:#033331}.analogue-2-border-color-a12,.analogue-2-border-color-a12.border{border-color:#033331!important}.complementary-1-bg{background-color:#f73e5a}.complementary-1-color{color:#f90}.complementary-1-border-color-,.complementary-1-border-color-.border{border-color:#f73e5a!important}.complementary-1-bg-a1{background-color:#fffcfd}.complementary-1-color-a1{color:#fffcfd}.complementary-1-border-color-a1,.complementary-1-border-color-a1.border{border-color:#fffcfd!important}.complementary-1-bg-a2{background-color:#f5d0d6}.complementary-1-color-a2{color:#f5d0d6}.complementary-1-border-color-a2,.complementary-1-border-color-a2.border{border-color:#f5d0d6!important}.complementary-1-bg-a3{background-color:#eba4af}.complementary-1-color-a3{color:#eba4af}.complementary-1-border-color-a3,.complementary-1-border-color-a3.border{border-color:#eba4af!important}.complementary-1-bg-a4{background-color:#e07b8b}.complementary-1-color-a4{color:#e07b8b}.complementary-1-border-color-a4,.complementary-1-border-color-a4.border{border-color:#e07b8b!important}.complementary-1-bg-a5{background-color:#d65669}.complementary-1-color-a5{color:#d65669}.complementary-1-border-color-a5,.complementary-1-border-color-a5.border{border-color:#d65669!important}.complementary-1-bg-a6{background-color:#cc334a}.complementary-1-color-a6{color:#cc334a}.complementary-1-border-color-a6,.complementary-1-border-color-a6.border{border-color:#cc334a!important}.complementary-1-bg-a7{background-color:#b32d41}.complementary-1-color-a7{color:#b32d41}.complementary-1-border-color-a7,.complementary-1-border-color-a7.border{border-color:#b32d41!important}.complementary-1-bg-a8{background-color:#992637}.complementary-1-color-a8{color:#992637}.complementary-1-border-color-a8,.complementary-1-border-color-a8.border{border-color:#992637!important}.complementary-1-bg-a9{background-color:#80202e}.complementary-1-color-a9{color:#80202e}.complementary-1-border-color-a9,.complementary-1-border-color-a9.border{border-color:#80202e!important}.complementary-1-bg-a10{background-color:#661a25}.complementary-1-color-a10{color:#661a25}.complementary-1-border-color-a10,.complementary-1-border-color-a10.border{border-color:#661a25!important}.complementary-1-bg-a11{background-color:#4d131c}.complementary-1-color-a11{color:#4d131c}.complementary-1-border-color-a11,.complementary-1-border-color-a11.border{border-color:#4d131c!important}.complementary-1-bg-a12{background-color:#330d12}.complementary-1-color-a12{color:#330d12}.complementary-1-border-color-a12,.complementary-1-border-color-a12.border{border-color:#330d12!important}.complementary-2-bg{background-color:#f90}.complementary-2-color{color:#f90}.complementary-2-border-color-,.complementary-2-border-color-.border{border-color:#f90!important}.complementary-2-bg-a1{background-color:#ffe6bf}.complementary-2-color-a1{color:#ffe6bf}.complementary-2-border-color-a1,.complementary-2-border-color-a1.border{border-color:#ffe6bf!important}.complementary-2-bg-a2{background-color:#f5ce93}.complementary-2-color-a2{color:#f5ce93}.complementary-2-border-color-a2,.complementary-2-border-color-a2.border{border-color:#f5ce93!important}.complementary-2-bg-a3{background-color:#ebb76a}.complementary-2-color-a3{color:#ebb76a}.complementary-2-border-color-a3,.complementary-2-border-color-a3.border{border-color:#ebb76a!important}.complementary-2-bg-a4{background-color:#e0a243}.complementary-2-color-a4{color:#e0a243}.complementary-2-border-color-a4,.complementary-2-border-color-a4.border{border-color:#e0a243!important}.complementary-2-bg-a5{background-color:#d68d20}.complementary-2-color-a5{color:#d68d20}.complementary-2-border-color-a5,.complementary-2-border-color-a5.border{border-color:#d68d20!important}.complementary-2-bg-a6{background-color:#cc7a00}.complementary-2-color-a6{color:#cc7a00}.complementary-2-border-color-a6,.complementary-2-border-color-a6.border{border-color:#cc7a00!important}.complementary-2-bg-a7{background-color:#b36b00}.complementary-2-color-a7{color:#b36b00}.complementary-2-border-color-a7,.complementary-2-border-color-a7.border{border-color:#b36b00!important}.complementary-2-bg-a8{background-color:#995c00}.complementary-2-color-a8{color:#995c00}.complementary-2-border-color-a8,.complementary-2-border-color-a8.border{border-color:#995c00!important}.complementary-2-bg-a9{background-color:#804d00}.complementary-2-color-a9{color:#804d00}.complementary-2-border-color-a9,.complementary-2-border-color-a9.border{border-color:#804d00!important}.complementary-2-bg-a10{background-color:#663d00}.complementary-2-color-a10{color:#663d00}.complementary-2-border-color-a10,.complementary-2-border-color-a10.border{border-color:#663d00!important}.complementary-2-bg-a11{background-color:#4d2e00}.complementary-2-color-a11{color:#4d2e00}.complementary-2-border-color-a11,.complementary-2-border-color-a11.border{border-color:#4d2e00!important}.complementary-2-bg-a12{background-color:#331f00}.complementary-2-color-a12{color:#331f00}.complementary-2-border-color-a12,.complementary-2-border-color-a12.border{border-color:#331f00!important}.complementary-3-bg{background-color:#00cf86}.complementary-3-color{color:#00cf86}.complementary-3-border-color-,.complementary-3-border-color-.border{border-color:#00cf86!important}.complementary-3-bg-a1{background-color:#bfffe9}.complementary-3-color-a1{color:#bfffe9}.complementary-3-border-color-a1,.complementary-3-border-color-a1.border{border-color:#bfffe9!important}.complementary-3-bg-a2{background-color:#93f5d3}.complementary-3-color-a2{color:#93f5d3}.complementary-3-border-color-a2,.complementary-3-border-color-a2.border{border-color:#93f5d3!important}.complementary-3-bg-a3{background-color:#6aebbd}.complementary-3-color-a3{color:#6aebbd}.complementary-3-border-color-a3,.complementary-3-border-color-a3.border{border-color:#6aebbd!important}.complementary-3-bg-a4{background-color:#43e0a9}.complementary-3-color-a4{color:#43e0a9}.complementary-3-border-color-a4,.complementary-3-border-color-a4.border{border-color:#43e0a9!important}.complementary-3-bg-a5{background-color:#20d696}.complementary-3-color-a5{color:#20d696}.complementary-3-border-color-a5,.complementary-3-border-color-a5.border{border-color:#20d696!important}.complementary-3-bg-a6{background-color:#00cc85}.complementary-3-color-a6{color:#00cc85}.complementary-3-border-color-a6,.complementary-3-border-color-a6.border{border-color:#00cc85!important}.complementary-3-bg-a7{background-color:#00b374}.complementary-3-color-a7{color:#00b374}.complementary-3-border-color-a7,.complementary-3-border-color-a7.border{border-color:#00b374!important}.complementary-3-bg-a8{background-color:#009963}.complementary-3-color-a8{color:#009963}.complementary-3-border-color-a8,.complementary-3-border-color-a8.border{border-color:#009963!important}.complementary-3-bg-a9{background-color:#008053}.complementary-3-color-a9{color:#008053}.complementary-3-border-color-a9,.complementary-3-border-color-a9.border{border-color:#008053!important}.complementary-3-bg-a10{background-color:#006642}.complementary-3-color-a10{color:#006642}.complementary-3-border-color-a10,.complementary-3-border-color-a10.border{border-color:#006642!important}.complementary-3-bg-a11{background-color:#004d32}.complementary-3-color-a11{color:#004d32}.complementary-3-border-color-a11,.complementary-3-border-color-a11.border{border-color:#004d32!important}.complementary-3-bg-a12{background-color:#003321}.complementary-3-color-a12{color:#003321}.complementary-3-border-color-a12,.complementary-3-border-color-a12.border{border-color:#003321!important}.analogue-1-bg{background-color:#3126ff}.analogue-1-color{color:#3126ff}.analogue-1-border-color-,.analogue-1-border-color-.border{border-color:#3126ff!important}.analogue-1-bg-b1{background-color:#3126ff}.analogue-1-color-b1{color:#3126ff}.analogue-1-border-color-b1,.analogue-1-border-color-b1.border{border-color:#3126ff!important}.analogue-1-bg-b2{background-color:#4239e6}.analogue-1-color-b2{color:#4239e6}.analogue-1-border-color-b2,.analogue-1-border-color-b2.border{border-color:#4239e6!important}.analogue-1-bg-b3{background-color:#4e47cc}.analogue-1-color-b3{color:#4e47cc}.analogue-1-border-color-b3,.analogue-1-border-color-b3.border{border-color:#4e47cc!important}.analogue-1-bg-b4{background-color:#5550b3}.analogue-1-color-b4{color:#5550b3}.analogue-1-border-color-b4,.analogue-1-border-color-b4.border{border-color:#5550b3!important}.analogue-1-bg-b5{background-color:#585499}.analogue-1-color-b5{color:#585499}.analogue-1-border-color-b5,.analogue-1-border-color-b5.border{border-color:#585499!important}.analogue-1-bg-b6{background-color:#555380}.analogue-1-color-b6{color:#555380}.analogue-1-border-color-b6,.analogue-1-border-color-b6.border{border-color:#555380!important}.analogue-1-bg-b7{background-color:#4e4d66}.analogue-1-color-b7{color:#4e4d66}.analogue-1-border-color-b7,.analogue-1-border-color-b7.border{border-color:#4e4d66!important}.analogue-1-bg-b8{background-color:#42414d}.analogue-1-color-b8{color:#42414d}.analogue-1-border-color-b8,.analogue-1-border-color-b8.border{border-color:#42414d!important}.analogue-2-bg{background-color:#0bd9d2}.analogue-2-color{color:#0bd9d2}.analogue-2-border-color-,.analogue-2-border-color-.border{border-color:#0bd9d2!important}.analogue-2-bg-b1{background-color:#0bd9d2}.analogue-2-color-b1{color:#0bd9d2}.analogue-2-border-color-b1,.analogue-2-border-color-b1.border{border-color:#0bd9d2!important}.analogue-2-bg-b2{background-color:#1dbfba}.analogue-2-color-b2{color:#1dbfba}.analogue-2-border-color-b2,.analogue-2-border-color-b2.border{border-color:#1dbfba!important}.analogue-2-bg-b3{background-color:#29a6a2}.analogue-2-color-b3{color:#29a6a2}.analogue-2-border-color-b3,.analogue-2-border-color-b3.border{border-color:#29a6a2!important}.analogue-2-bg-b4{background-color:#318c89}.analogue-2-color-b4{color:#318c89}.analogue-2-border-color-b4,.analogue-2-border-color-b4.border{border-color:#318c89!important}.analogue-2-bg-b5{background-color:#347371}.analogue-2-color-b5{color:#347371}.analogue-2-border-color-b5,.analogue-2-border-color-b5.border{border-color:#347371!important}.analogue-2-bg-b6{background-color:#315958}.analogue-2-color-b6{color:#315958}.analogue-2-border-color-b6,.analogue-2-border-color-b6.border{border-color:#315958!important}.analogue-2-bg-b7{background-color:#29403f}.analogue-2-color-b7{color:#29403f}.analogue-2-border-color-b7,.analogue-2-border-color-b7.border{border-color:#29403f!important}.analogue-2-bg-b8{background-color:#1d2626}.analogue-2-color-b8{color:#1d2626}.analogue-2-border-color-b8,.analogue-2-border-color-b8.border{border-color:#1d2626!important}.complementary-1-bg-b1{background-color:#f73e5a}.complementary-1-color-b1{color:#f73e5a}.complementary-1-border-color-b1,.complementary-1-border-color-b1.border{border-color:#f73e5a!important}.complementary-1-bg-b2{background-color:#de4e63}.complementary-1-color-b2{color:#de4e63}.complementary-1-border-color-b2,.complementary-1-border-color-b2.border{border-color:#de4e63!important}.complementary-1-bg-b3{background-color:#c45869}.complementary-1-color-b3{color:#c45869}.complementary-1-border-color-b3,.complementary-1-border-color-b3.border{border-color:#c45869!important}.complementary-1-bg-b4{background-color:#ab5e69}.complementary-1-color-b4{color:#ab5e69}.complementary-1-border-color-b4,.complementary-1-border-color-b4.border{border-color:#ab5e69!important}.complementary-1-bg-b5{background-color:#915e66}.complementary-1-color-b5{color:#915e66}.complementary-1-border-color-b5,.complementary-1-border-color-b5.border{border-color:#915e66!important}.complementary-1-bg-b6{background-color:#785a5e}.complementary-1-color-b6{color:#785a5e}.complementary-1-border-color-b6,.complementary-1-border-color-b6.border{border-color:#785a5e!important}.complementary-1-bg-b7{background-color:#5e5052}.complementary-1-color-b7{color:#5e5052}.complementary-1-border-color-b7,.complementary-1-border-color-b7.border{border-color:#5e5052!important}.complementary-1-bg-b8{background-color:#454142}.complementary-1-color-b8{color:#454142}.complementary-1-border-color-b8,.complementary-1-border-color-b8.border{border-color:#454142!important}.complementary-2-bg-b1{background-color:#f90}.complementary-2-color-b1{color:#f90}.complementary-2-border-color-b1,.complementary-2-border-color-b1.border{border-color:#f90!important}.complementary-2-bg-b2{background-color:#e69317}.complementary-2-color-b2{color:#e69317}.complementary-2-border-color-b2,.complementary-2-border-color-b2.border{border-color:#e69317!important}.complementary-2-bg-b3{background-color:#cc8b29}.complementary-2-color-b3{color:#cc8b29}.complementary-2-border-color-b3,.complementary-2-border-color-b3.border{border-color:#cc8b29!important}.complementary-2-bg-b4{background-color:#b38136}.complementary-2-color-b4{color:#b38136}.complementary-2-border-color-b4,.complementary-2-border-color-b4.border{border-color:#b38136!important}.complementary-2-bg-b5{background-color:#99743d}.complementary-2-color-b5{color:#99743d}.complementary-2-border-color-b5,.complementary-2-border-color-b5.border{border-color:#99743d!important}.complementary-2-bg-b6{background-color:#806640}.complementary-2-color-b6{color:#806640}.complementary-2-border-color-b6,.complementary-2-border-color-b6.border{border-color:#806640!important}.complementary-2-bg-b7{background-color:#66563d}.complementary-2-color-b7{color:#66563d}.complementary-2-border-color-b7,.complementary-2-border-color-b7.border{border-color:#66563d!important}.complementary-2-bg-b8{background-color:#4d4336}.complementary-2-color-b8{color:#4d4336}.complementary-2-border-color-b8,.complementary-2-border-color-b8.border{border-color:#4d4336!important}.complementary-3-bg-b1{background-color:#00cf86}.complementary-3-color-b1{color:#00cf86}.complementary-3-border-color-b1,.complementary-3-border-color-b1.border{border-color:#00cf86!important}.complementary-3-bg-b2{background-color:#12b57c}.complementary-3-color-b2{color:#12b57c}.complementary-3-border-color-b2,.complementary-3-border-color-b2.border{border-color:#12b57c!important}.complementary-3-bg-b3{background-color:#1f9c70}.complementary-3-color-b3{color:#1f9c70}.complementary-3-border-color-b3,.complementary-3-border-color-b3.border{border-color:#1f9c70!important}.complementary-3-bg-b4{background-color:#278262}.complementary-3-color-b4{color:#278262}.complementary-3-border-color-b4,.complementary-3-border-color-b4.border{border-color:#278262!important}.complementary-3-bg-b5{background-color:#2a6953}.complementary-3-color-b5{color:#2a6953}.complementary-3-border-color-b5,.complementary-3-border-color-b5.border{border-color:#2a6953!important}.complementary-3-bg-b6{background-color:#284f41}.complementary-3-color-b6{color:#284f41}.complementary-3-border-color-b6,.complementary-3-border-color-b6.border{border-color:#284f41!important}.complementary-3-bg-b7{background-color:#20362e}.complementary-3-color-b7{color:#20362e}.complementary-3-border-color-b7,.complementary-3-border-color-b7.border{border-color:#20362e!important}.complementary-3-bg-b8{background-color:#141c19}.complementary-3-color-b8{color:#141c19}.complementary-3-border-color-b8,.complementary-3-border-color-b8.border{border-color:#141c19!important}.neutral-1-bg{background-color:#17324d}.neutral-1-color{color:#17324d}.neutral-1-border-color-,.neutral-1-border-color-.border{border-color:#17324d!important}.neutral-1-bg-a1{background-color:#ebeced}.neutral-1-color-a1{color:#ebeced}.neutral-1-border-color-a1,.neutral-1-border-color-a1.border{border-color:#ebeced!important}.neutral-1-bg-a2{background-color:#d9dadb}.neutral-1-color-a2{color:#d9dadb}.neutral-1-border-color-a2,.neutral-1-border-color-a2.border{border-color:#d9dadb!important}.neutral-1-bg-a3{background-color:#c5c7c9}.neutral-1-color-a3{color:#c5c7c9}.neutral-1-border-color-a3,.neutral-1-border-color-a3.border{border-color:#c5c7c9!important}.neutral-1-bg-a4{background-color:#adb2b8}.neutral-1-color-a4{color:#adb2b8}.neutral-1-border-color-a4,.neutral-1-border-color-a4.border{border-color:#adb2b8!important}.neutral-1-bg-a5{background-color:#959da6}.neutral-1-color-a5{color:#959da6}.neutral-1-border-color-a5,.neutral-1-border-color-a5.border{border-color:#959da6!important}.neutral-1-bg-a6{background-color:#768594}.neutral-1-color-a6{color:#768594}.neutral-1-border-color-a6,.neutral-1-border-color-a6.border{border-color:#768594!important}.neutral-1-bg-a7{background-color:#5b6f82}.neutral-1-color-a7{color:#5b6f82}.neutral-1-border-color-a7,.neutral-1-border-color-a7.border{border-color:#5b6f82!important}.neutral-1-bg-a8{background-color:#435a70}.neutral-1-color-a8{color:#435a70}.neutral-1-border-color-a8,.neutral-1-border-color-a8.border{border-color:#435a70!important}.neutral-1-bg-a9{background-color:#2f475e}.neutral-1-color-a9{color:#2f475e}.neutral-1-border-color-a9,.neutral-1-border-color-a9.border{border-color:#2f475e!important}.neutral-1-bg-a10{background-color:#17324d}.neutral-1-color-a10{color:#17324d}.neutral-1-border-color-a10,.neutral-1-border-color-a10.border{border-color:#17324d!important}.neutral-2-bg{background-color:#e6ecf2}.neutral-2-color{color:#e6ecf2}.neutral-2-border-color-{border-color:#e6ecf2}.neutral-2-bg-b1{background-color:#e6ecf2}.neutral-2-color-b1{color:#e6ecf2}.neutral-2-border-color-b1,.neutral-2-border-color-b1.border{border-color:#e6ecf2!important}.neutral-2-bg-b2{background-color:#c2c7cc}.neutral-2-color-b2{color:#c2c7cc}.neutral-2-border-color-b2,.neutral-2-border-color-b2.border{border-color:#c2c7cc!important}.neutral-2-bg-b3{background-color:#9da2a6}.neutral-2-color-b3{color:#9da2a6}.neutral-2-border-color-b3,.neutral-2-border-color-b3.border{border-color:#9da2a6!important}.neutral-2-bg-b4{background-color:#797c80}.neutral-2-color-b4{color:#797c80}.neutral-2-border-color-b4,.neutral-2-border-color-b4.border{border-color:#797c80!important}.neutral-2-bg-b5{background-color:#565759}.neutral-2-color-b5{color:#565759}.neutral-2-border-color-b5,.neutral-2-border-color-b5.border{border-color:#565759!important}.neutral-2-bg-b6{background-color:#2f3133}.neutral-2-color-b6{color:#2f3133}.neutral-2-border-color-b6,.neutral-2-border-color-b6.border{border-color:#2f3133!important}.neutral-2-bg-b7{background-color:#0c0c0d}.neutral-2-color-b7{color:#0c0c0d}.neutral-2-border-color-b7,.neutral-2-border-color-b7.border{border-color:#0c0c0d!important}.neutral-2-bg-a1{background-color:#e6ecf2}.neutral-2-color-a1{color:#e6ecf2}.neutral-2-border-color-a1,.neutral-2-border-color-a1.border{border-color:#e6ecf2!important}.neutral-2-bg-a2{background-color:#bcc4cc}.neutral-2-color-a2{color:#bcc4cc}.neutral-2-border-color-a2,.neutral-2-border-color-a2.border{border-color:#bcc4cc!important}.neutral-2-bg-a3{background-color:#9aa0a6}.neutral-2-color-a3{color:#9aa0a6}.neutral-2-border-color-a3,.neutral-2-border-color-a3.border{border-color:#9aa0a6!important}.neutral-2-bg-a4{background-color:#777b80}.neutral-2-color-a4{color:#777b80}.neutral-2-border-color-a4,.neutral-2-border-color-a4.border{border-color:#777b80!important}.neutral-2-bg-a5{background-color:#535659}.neutral-2-color-a5{color:#535659}.neutral-2-border-color-a5,.neutral-2-border-color-a5.border{border-color:#535659!important}.neutral-2-bg-a6{background-color:#2f3133}.neutral-2-color-a6{color:#2f3133}.neutral-2-border-color-a6,.neutral-2-border-color-a6.border{border-color:#2f3133!important}.neutral-2-bg-a7{background-color:#17181a}.neutral-2-color-a7{color:#17181a}.neutral-2-border-color-a7,.neutral-2-border-color-a7.border{border-color:#17181a!important}.lightgrey-bg-a1{background-color:#e8f2fc}.lightgrey-color-a1{color:#e8f2fc}.lightgrey-border-color-a1,.lightgrey-border-color-a1.border{border-color:#e8f2fc!important}.lightgrey-bg-a2{background-color:#edf5fc}.lightgrey-color-a2{color:#edf5fc}.lightgrey-border-color-a2,.lightgrey-border-color-a2.border{border-color:#edf5fc!important}.lightgrey-bg-a3{background-color:#f2f7fc}.lightgrey-color-a3{color:#f2f7fc}.lightgrey-border-color-a3,.lightgrey-border-color-a3.border{border-color:#f2f7fc!important}.lightgrey-bg-a4{background-color:#f5f9fc}.lightgrey-color-a4{color:#f5f9fc}.lightgrey-border-color-a4,.lightgrey-border-color-a4.border{border-color:#f5f9fc!important}.lightgrey-bg-b1{background-color:#e6f0fa}.lightgrey-color-b1{color:#e6f0fa}.lightgrey-border-color-b1,.lightgrey-border-color-b1.border{border-color:#e6f0fa!important}.lightgrey-bg-b2{background-color:#ebf2fa}.lightgrey-color-b2{color:#ebf2fa}.lightgrey-border-color-b2,.lightgrey-border-color-b2.border{border-color:#ebf2fa!important}.lightgrey-bg-b3{background-color:#edf4fa}.lightgrey-color-b3{color:#edf4fa}.lightgrey-border-color-b3,.lightgrey-border-color-b3.border{border-color:#edf4fa!important}.lightgrey-bg-b4{background-color:#f2f6fa}.lightgrey-color-b4{color:#f2f6fa}.lightgrey-border-color-b4,.lightgrey-border-color-b4.border{border-color:#f2f6fa!important}.lightgrey-bg-c1{background-color:#f7f9fa}.lightgrey-color-c1{color:#f7f9fa}.lightgrey-border-color-c1,.lightgrey-border-color-c1.border{border-color:#f7f9fa!important}.lightgrey-bg-c2{background-color:#f5f6f7}.lightgrey-color-c2{color:#f5f6f7}.lightgrey-border-color-c2,.lightgrey-border-color-c2.border{border-color:#f5f6f7!important}:root{--blue:#0073e6;--indigo:#554dff;--purple:#9e99ff;--pink:#ffb3bf;--red:#f73e5a;--orange:#f90;--yellow:#ffda73;--green:#00cc85;--teal:#0bd9d2;--cyan:#00fff7;--white:#fff;--gray:#656566;--gray-dark:#323333;--italia:#06c;--gray-secondary:#5c6f82;--gray-tertiary:#5a768a;--gray-quaternary:#fcfdff;--primary:#0073e6;--secondary:#5c6f82;--success:#00cc85;--info:#979899;--warning:#f90;--danger:#f73e5a;--light:#e9e6f2;--dark:#17324d;--100:#e3e4e6;--200:#cacacc;--300:#b1b1b3;--400:#979899;--500:#7e7f80;--600:#656566;--700:#4c4c4d;--800:#323333;--900:#19191a;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:"Titillium Web",Geneva,Tahoma,sans-serif;--font-family-monospace:"Roboto Mono",monospace}@media print{*,:after,:before{text-shadow:none!important;-webkit-box-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]:after{content:" (" attr(title) ")"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #7e7f80;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}.container,body{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #b1b1b3!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#d6dce3}.table .thead-dark th{color:inherit;border-color:#d6dce3}}*,:after,:before{-webkit-box-sizing:border-box;box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:Titillium Web,Geneva,Tahoma,sans-serif;font-size:16px;font-size:1rem;font-weight:300;line-height:1.5;color:#19191a;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:8px}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;text-decoration-skip-ink:none}address{font-style:normal;line-height:inherit}address,dl,ol,ul{margin-bottom:1rem}dl,ol,ul{margin-top:0}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#0073e6;text-decoration:none;background-color:transparent}a:hover{color:#004d99;text-decoration:underline}a:not([href]):not([tabindex]),a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:Roboto Mono,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{border-style:none}img,svg{vertical-align:middle}svg{overflow:hidden}table{border-collapse:collapse}caption{padding-top:1em;padding-bottom:1em;color:#5a768a;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:24px;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:8px;font-weight:700;line-height:1.2}.h1,h1{font-size:40px;font-size:2.5rem}.h2,h2{font-size:32px;font-size:2rem}.h3,h3{font-size:28px;font-size:1.75rem}.h4,h4{font-size:24px;font-size:1.5rem}.h5,h5{font-size:20px;font-size:1.25rem}.h6,h6{font-size:16px;font-size:1rem}.lead{font-size:20px;font-size:1.25rem;font-weight:300}.display-1{font-size:56px;font-size:3.5rem}.display-1,.display-2{font-weight:700;line-height:1.2}.display-2{font-size:40px;font-size:2.5rem}.display-3{font-size:24px;font-size:1.5rem}.display-3,.display-4{font-weight:700;line-height:1.2}.display-4{font-size:20px;font-size:1.25rem}hr{margin-top:16px;margin-bottom:16px;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:12.432px;font-size:.777rem}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-inline,.list-unstyled{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:16px;font-size:20px;font-size:1.25rem}.blockquote-footer{display:block;font-size:12.432px;font-size:.777rem}.blockquote-footer:before{content:"\2014\00A0"}.img-fluid,.img-thumbnail{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #b1b1b3;border-radius:4px;-webkit-box-shadow:0 1px 2px rgba(0,0,0,.075);box-shadow:0 1px 2px rgba(0,0,0,.075)}.figure{display:inline-block}.figure-img{margin-bottom:8px;line-height:1}.figure-caption{font-size:90%;color:#656566}code{font-size:87.5%;color:#17324d;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#19191a;border-radius:2px;-webkit-box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25);box-shadow:inset 0 -.1rem 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;-webkit-box-shadow:none;box-shadow:none}pre{display:block;font-size:87.5%;color:#19191a}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:6px;padding-left:6px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:6px;padding-left:6px;margin-right:auto;margin-left:auto}.row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-6px;margin-left:-6px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-10,.col-11,.col-12,.col-auto,.col-lg,.col-lg-1,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-auto,.col-md,.col-md-1,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-10,.col-md-11,.col-md-12,.col-md-auto,.col-sm,.col-sm-1,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-auto{position:relative;width:100%;padding-right:6px;padding-left:6px}.col{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1,.col-auto{-webkit-box-flex:0}.col-1{-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-2{-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-2,.col-3{-webkit-box-flex:0}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-4,.col-5{-webkit-box-flex:0}.col-5{-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-6,.col-7{-webkit-box-flex:0}.col-7{-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-8{-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-8,.col-9{-webkit-box-flex:0}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-10,.col-11{-webkit-box-flex:0}.col-11{-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-1{margin-left:8.3333333333%}.offset-2{margin-left:16.6666666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.3333333333%}.offset-5{margin-left:41.6666666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.3333333333%}.offset-8{margin-left:66.6666666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.3333333333%}.offset-11{margin-left:91.6666666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-sm-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-sm-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-sm-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-sm-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-sm-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-sm-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-sm-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-sm-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-sm-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-sm-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-sm-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-sm-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-sm-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-sm-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-sm-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-sm-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-sm-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-sm-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-sm-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-sm-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-sm-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-sm-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.3333333333%}.offset-sm-2{margin-left:16.6666666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.3333333333%}.offset-sm-5{margin-left:41.6666666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.3333333333%}.offset-sm-8{margin-left:66.6666666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.3333333333%}.offset-sm-11{margin-left:91.6666666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-md-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-md-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-md-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-md-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-md-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-md-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-md-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-md-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-md-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-md-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-md-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-md-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-md-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-md-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-md-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-md-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-md-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-md-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-md-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-md-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-md-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-md-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.3333333333%}.offset-md-2{margin-left:16.6666666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.3333333333%}.offset-md-5{margin-left:41.6666666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.3333333333%}.offset-md-8{margin-left:66.6666666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.3333333333%}.offset-md-11{margin-left:91.6666666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-lg-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-lg-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-lg-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-lg-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-lg-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-lg-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-lg-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-lg-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-lg-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-lg-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-lg-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-lg-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-lg-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-lg-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-lg-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-lg-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-lg-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-lg-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-lg-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-lg-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-lg-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-lg-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.3333333333%}.offset-lg-2{margin-left:16.6666666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.3333333333%}.offset-lg-5{margin-left:41.6666666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.3333333333%}.offset-lg-8{margin-left:66.6666666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.3333333333%}.offset-lg-11{margin-left:91.6666666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-webkit-box-flex:0;-ms-flex:0 0 8.3333333333%;flex:0 0 8.3333333333%;max-width:8.3333333333%}.col-xl-2{-webkit-box-flex:0;-ms-flex:0 0 16.6666666667%;flex:0 0 16.6666666667%;max-width:16.6666666667%}.col-xl-3{-webkit-box-flex:0;-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-webkit-box-flex:0;-ms-flex:0 0 33.3333333333%;flex:0 0 33.3333333333%;max-width:33.3333333333%}.col-xl-5{-webkit-box-flex:0;-ms-flex:0 0 41.6666666667%;flex:0 0 41.6666666667%;max-width:41.6666666667%}.col-xl-6{-webkit-box-flex:0;-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-webkit-box-flex:0;-ms-flex:0 0 58.3333333333%;flex:0 0 58.3333333333%;max-width:58.3333333333%}.col-xl-8{-webkit-box-flex:0;-ms-flex:0 0 66.6666666667%;flex:0 0 66.6666666667%;max-width:66.6666666667%}.col-xl-9{-webkit-box-flex:0;-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-webkit-box-flex:0;-ms-flex:0 0 83.3333333333%;flex:0 0 83.3333333333%;max-width:83.3333333333%}.col-xl-11{-webkit-box-flex:0;-ms-flex:0 0 91.6666666667%;flex:0 0 91.6666666667%;max-width:91.6666666667%}.col-xl-12{-webkit-box-flex:0;-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-webkit-box-ordinal-group:0;-ms-flex-order:-1;order:-1}.order-xl-last{-webkit-box-ordinal-group:14;-ms-flex-order:13;order:13}.order-xl-0{-webkit-box-ordinal-group:1;-ms-flex-order:0;order:0}.order-xl-1{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1}.order-xl-2{-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2}.order-xl-3{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3}.order-xl-4{-webkit-box-ordinal-group:5;-ms-flex-order:4;order:4}.order-xl-5{-webkit-box-ordinal-group:6;-ms-flex-order:5;order:5}.order-xl-6{-webkit-box-ordinal-group:7;-ms-flex-order:6;order:6}.order-xl-7{-webkit-box-ordinal-group:8;-ms-flex-order:7;order:7}.order-xl-8{-webkit-box-ordinal-group:9;-ms-flex-order:8;order:8}.order-xl-9{-webkit-box-ordinal-group:10;-ms-flex-order:9;order:9}.order-xl-10{-webkit-box-ordinal-group:11;-ms-flex-order:10;order:10}.order-xl-11{-webkit-box-ordinal-group:12;-ms-flex-order:11;order:11}.order-xl-12{-webkit-box-ordinal-group:13;-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.3333333333%}.offset-xl-2{margin-left:16.6666666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.3333333333%}.offset-xl-5{margin-left:41.6666666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.3333333333%}.offset-xl-8{margin-left:66.6666666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.3333333333%}.offset-xl-11{margin-left:91.6666666667%}}.table{width:100%;margin-bottom:16px;color:#19191a}.table td,.table th{padding:1em;vertical-align:top;border-top:1px solid #d6dce3}.table thead th{vertical-align:bottom;border-bottom:2px solid #d6dce3}.table tbody+tbody{border-top:2px solid #d6dce3}.table-sm td,.table-sm th{padding:.3rem}.table-bordered,.table-bordered td,.table-bordered th{border:1px solid #d6dce3}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:#f6f7f9}.table-hover tbody tr:hover{color:#19191a;background-color:#e5f1fa}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8d8f8}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7ab6f2}.table-hover .table-primary:hover,.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#a1cbf6}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d1d7dc}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#aab4be}.table-hover .table-secondary:hover,.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c3cad1}.table-success,.table-success>td,.table-success>th{background-color:#b8f1dd}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#7ae4c0}.table-hover .table-success:hover,.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#a3edd3}.table-info,.table-info>td,.table-info>th{background-color:#e2e2e2}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#c9c9ca}.table-hover .table-info:hover,.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#d5d5d5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffe2b8}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffca7a}.table-hover .table-warning:hover,.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffd89f}.table-danger,.table-danger>td,.table-danger>th{background-color:#fdc9d1}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#fb9ba9}.table-hover .table-danger:hover,.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#fcb0bc}.table-light,.table-light>td,.table-light>th{background-color:#f9f8fb}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#f4f2f8}.table-hover .table-light:hover,.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ebe8f2}.table-dark,.table-dark>td,.table-dark>th{background-color:#bec6cd}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#8694a2}.table-hover .table-dark:hover,.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b0b9c2}.table-100,.table-100>td,.table-100>th{background-color:#f7f7f8}.table-100 tbody+tbody,.table-100 td,.table-100 th,.table-100 thead th{border-color:#f0f1f2}.table-hover .table-100:hover,.table-hover .table-100:hover>td,.table-hover .table-100:hover>th{background-color:#e9e9ec}.table-200,.table-200>td,.table-200>th{background-color:#f0f0f1}.table-200 tbody+tbody,.table-200 td,.table-200 th,.table-200 thead th{border-color:#e3e3e4}.table-hover .table-200:hover,.table-hover .table-200:hover>td,.table-hover .table-200:hover>th{background-color:#e3e3e5}.table-300,.table-300>td,.table-300>th{background-color:#e9e9ea}.table-300 tbody+tbody,.table-300 td,.table-300 th,.table-300 thead th{border-color:#d6d6d7}.table-hover .table-300:hover,.table-hover .table-300:hover>td,.table-hover .table-300:hover>th{background-color:#dcdcde}.table-400,.table-400>td,.table-400>th{background-color:#e2e2e2}.table-400 tbody+tbody,.table-400 td,.table-400 th,.table-400 thead th{border-color:#c9c9ca}.table-hover .table-400:hover,.table-hover .table-400:hover>td,.table-hover .table-400:hover>th{background-color:#d5d5d5}.table-500,.table-500>td,.table-500>th{background-color:#dbdbdb}.table-500 tbody+tbody,.table-500 td,.table-500 th,.table-500 thead th{border-color:#bcbcbd}.table-hover .table-500:hover,.table-hover .table-500:hover>td,.table-hover .table-500:hover>th{background-color:#cecece}.table-600,.table-600>td,.table-600>th{background-color:#d4d4d4}.table-600 tbody+tbody,.table-600 td,.table-600 th,.table-600 thead th{border-color:#afafaf}.table-hover .table-600:hover,.table-hover .table-600:hover>td,.table-hover .table-600:hover>th{background-color:#c7c7c7}.table-700,.table-700>td,.table-700>th{background-color:#cdcdcd}.table-700 tbody+tbody,.table-700 td,.table-700 th,.table-700 thead th{border-color:#a2a2a2}.table-hover .table-700:hover,.table-hover .table-700:hover>td,.table-hover .table-700:hover>th{background-color:silver}.table-800,.table-800>td,.table-800>th{background-color:#c6c6c6}.table-800 tbody+tbody,.table-800 td,.table-800 th,.table-800 thead th{border-color:#949595}.table-hover .table-800:hover,.table-hover .table-800:hover>td,.table-hover .table-800:hover>th{background-color:#b9b9b9}.table-900,.table-900>td,.table-900>th{background-color:#bfbfbf}.table-900 tbody+tbody,.table-900 td,.table-900 th,.table-900 thead th{border-color:#878788}.table-hover .table-900:hover,.table-hover .table-900:hover>td,.table-hover .table-900:hover>th{background-color:#b2b2b2}.table-active,.table-active>td,.table-active>th{background-color:#e5f1fa}.table-hover .table-active:hover,.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:#d0e5f6}.table .thead-dark th{color:#fff;background-color:#323333;border-color:#464646}.table .thead-light th{color:#4c4c4d;background-color:#cacacc;border-color:#d6dce3}.table-dark{color:#fff;background-color:#323333}.table-dark td,.table-dark th,.table-dark thead th{border-color:#464646}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:hsla(0,0%,100%,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:hsla(0,0%,100%,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:16px;font-size:1rem;font-weight:300;line-height:1.5;color:#4c4c4d;background-color:#fff;background-clip:padding-box;border:1px solid #979899;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{-webkit-transition:none;transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#4c4c4d;background-color:#fff;border-color:#5c6f82;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.25);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.25)}.form-control::-webkit-input-placeholder{color:#656566;opacity:1}.form-control::-moz-placeholder{color:#656566;opacity:1}.form-control::-ms-input-placeholder{color:#656566;opacity:1}.form-control::placeholder{color:#656566;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#cacacc;opacity:1}select.form-control:focus::-ms-value{color:#4c4c4d;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:20px;font-size:1.25rem;line-height:1.556}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:14px;font-size:.875rem;line-height:1.428}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#19191a;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.428em + .5rem + 2px);padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.428;border-radius:2px}.form-control-lg{height:calc(1.556em + 1rem + 2px);padding:.5rem 1rem;font-size:20px;font-size:1.25rem;line-height:1.556;border-radius:8px}select.form-control[multiple],select.form-control[size],textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#5a768a}.form-check-label{margin-bottom:0}.form-check-inline{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#00cc85}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:1rem;margin-top:.1rem;font-size:14px;font-size:.875rem;line-height:1.5;color:#19191a;background-color:#00cc85;border-radius:4px}.form-control.is-valid,.was-validated .form-control:valid{border-color:#00cc85;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2300cc85' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#00cc85;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23323333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Cpath fill='%2300cc85' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#00cc85}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#00cc85}.custom-control-input.is-valid~.custom-control-label:before,.was-validated .custom-control-input:valid~.custom-control-label:before{border-color:#00cc85}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label:before,.was-validated .custom-control-input:valid:checked~.custom-control-label:before{border-color:#00ffa6;background-color:#00ffa6}.custom-control-input.is-valid:focus~.custom-control-label:before,.was-validated .custom-control-input:valid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#00cc85}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#00cc85;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.25);box-shadow:0 0 0 .2rem rgba(0,204,133,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#f73e5a}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:1rem;margin-top:.1rem;font-size:14px;font-size:.875rem;line-height:1.5;color:#19191a;background-color:#f73e5a;border-radius:4px}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#f73e5a;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f73e5a' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:100% calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#f73e5a;padding-right:calc((3em + 2.25rem)/4 + 1.75rem);background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3E%3Cpath fill='%23323333' d='M2 0L0 2h4zm0 5L0 3h4z'/%3E%3C/svg%3E") no-repeat right .75rem center/8px 10px,url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='-2 -2 7 7'%3E%3Cpath stroke='%23f73e5a' d='M0 0l3 3m0-3L0 3'/%3E%3Ccircle r='.5'/%3E%3Ccircle cx='3' r='.5'/%3E%3Ccircle cy='3' r='.5'/%3E%3Ccircle cx='3' cy='3' r='.5'/%3E%3C/svg%3E") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#f73e5a}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#f73e5a}.custom-control-input.is-invalid~.custom-control-label:before,.was-validated .custom-control-input:invalid~.custom-control-label:before{border-color:#f73e5a}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label:before,.was-validated .custom-control-input:invalid:checked~.custom-control-label:before{border-color:#f96f84;background-color:#f96f84}.custom-control-input.is-invalid:focus~.custom-control-label:before,.was-validated .custom-control-input:invalid:focus~.custom-control-label:before{-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label:before,.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label:before,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#f73e5a}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#f73e5a;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.25);box-shadow:0 0 0 .2rem rgba(247,62,90,.25)}.form-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{-ms-flex-align:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .form-group,.form-inline label{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;align-items:center;margin-bottom:0}.form-inline .form-group{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:600;color:#19191a;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:0 solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:4px;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{-webkit-transition:none;transition:none}}.btn:hover{color:#19191a;text-decoration:none}.btn.focus,.btn:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25);box-shadow:0 0 0 .2rem rgba(0,115,230,.25)}.btn.disabled,.btn:disabled{opacity:.65;-webkit-box-shadow:none;box-shadow:none}.btn:not(:disabled):not(.disabled).active,.btn:not(:disabled):not(.disabled):active{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn:not(:disabled):not(.disabled).active:focus,.btn:not(:disabled):not(.disabled):active:focus{-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25),inset 0 3px 5px rgba(0,0,0,.125);box-shadow:0 0 0 .2rem rgba(0,115,230,.25),inset 0 3px 5px rgba(0,0,0,.125)}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#0073e6;border-color:#0073e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-primary:hover{color:#fff;background-color:#0060bf;border-color:#0059b3}.btn-primary.focus,.btn-primary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#0073e6;border-color:#0073e6}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0059b3;border-color:#0053a6}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.btn-secondary{color:#fff;background-color:#5c6f82;border-color:#5c6f82;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-secondary:hover{color:#fff;background-color:#4c5c6c;border-color:#475664}.btn-secondary.focus,.btn-secondary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(92,111,130,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#5c6f82;border-color:#5c6f82}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#475664;border-color:#424f5d}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5)}.btn-success{color:#19191a;background-color:#00cc85;border-color:#00cc85;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-success:hover{color:#fff;background-color:#00a66c;border-color:#009963}.btn-success.focus,.btn-success:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,204,133,.5)}.btn-success.disabled,.btn-success:disabled{color:#19191a;background-color:#00cc85;border-color:#00cc85}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#009963;border-color:#008c5b}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5)}.btn-info{color:#19191a;background-color:#979899;border-color:#979899;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-info:hover{color:#19191a;background-color:#848586;border-color:#7e7e80}.btn-info.focus,.btn-info:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5)}.btn-info.disabled,.btn-info:disabled{color:#19191a;background-color:#979899;border-color:#979899}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#19191a;background-color:#7e7e80;border-color:#777879}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-warning{color:#19191a;background-color:#f90;border-color:#f90;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-warning:hover{color:#19191a;background-color:#d98200;border-color:#cc7a00}.btn-warning.focus,.btn-warning:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(255,153,0,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#19191a;background-color:#f90;border-color:#f90}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#19191a;background-color:#cc7a00;border-color:#bf7300}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5)}.btn-danger{color:#19191a;background-color:#f73e5a;border-color:#f73e5a;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-danger:hover{color:#fff;background-color:#f6193a;border-color:#f50d30}.btn-danger.focus,.btn-danger:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(247,62,90,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#19191a;background-color:#f73e5a;border-color:#f73e5a}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#f50d30;border-color:#ec092b}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5)}.btn-light{color:#19191a;background-color:#e9e6f2;border-color:#e9e6f2;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-light:hover{color:#19191a;background-color:#d3cde5;border-color:#ccc4e1}.btn-light.focus,.btn-light:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(233,230,242,.5)}.btn-light.disabled,.btn-light:disabled{color:#19191a;background-color:#e9e6f2;border-color:#e9e6f2}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#19191a;background-color:#ccc4e1;border-color:#c4bcdd}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5)}.btn-dark{color:#fff;background-color:#17324d;border-color:#17324d;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-dark:hover{color:#fff;background-color:#0e1f2f;border-color:#0b1825}.btn-dark.focus,.btn-dark:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(23,50,77,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#17324d;border-color:#17324d}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#0b1825;border-color:#08121b}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5)}.btn-100{color:#19191a;background-color:#e3e4e6;border-color:#e3e4e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-100:hover{color:#19191a;background-color:#cfd0d3;border-color:#c9cacd}.btn-100.focus,.btn-100:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(227,228,230,.5)}.btn-100.disabled,.btn-100:disabled{color:#19191a;background-color:#e3e4e6;border-color:#e3e4e6}.btn-100:not(:disabled):not(.disabled).active,.btn-100:not(:disabled):not(.disabled):active,.show>.btn-100.dropdown-toggle{color:#19191a;background-color:#c9cacd;border-color:#c2c3c7}.btn-100:not(:disabled):not(.disabled).active:focus,.btn-100:not(:disabled):not(.disabled):active:focus,.show>.btn-100.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5)}.btn-200{color:#19191a;background-color:#cacacc;border-color:#cacacc;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-200:hover{color:#19191a;background-color:#b6b7b9;border-color:#b0b1b3}.btn-200.focus,.btn-200:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(202,202,204,.5)}.btn-200.disabled,.btn-200:disabled{color:#19191a;background-color:#cacacc;border-color:#cacacc}.btn-200:not(:disabled):not(.disabled).active,.btn-200:not(:disabled):not(.disabled):active,.show>.btn-200.dropdown-toggle{color:#19191a;background-color:#b0b1b3;border-color:#a9aaad}.btn-200:not(:disabled):not(.disabled).active:focus,.btn-200:not(:disabled):not(.disabled):active:focus,.show>.btn-200.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5)}.btn-300{color:#19191a;background-color:#b1b1b3;border-color:#b1b1b3;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-300:hover{color:#19191a;background-color:#9d9ea0;border-color:#979899}.btn-300.focus,.btn-300:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(177,177,179,.5)}.btn-300.disabled,.btn-300:disabled{color:#19191a;background-color:#b1b1b3;border-color:#b1b1b3}.btn-300:not(:disabled):not(.disabled).active,.btn-300:not(:disabled):not(.disabled):active,.show>.btn-300.dropdown-toggle{color:#19191a;background-color:#979899;border-color:#909193}.btn-300:not(:disabled):not(.disabled).active:focus,.btn-300:not(:disabled):not(.disabled):active:focus,.show>.btn-300.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5)}.btn-400{color:#19191a;background-color:#979899;border-color:#979899;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-400:hover{color:#19191a;background-color:#848586;border-color:#7e7e80}.btn-400.focus,.btn-400:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(151,152,153,.5)}.btn-400.disabled,.btn-400:disabled{color:#19191a;background-color:#979899;border-color:#979899}.btn-400:not(:disabled):not(.disabled).active,.btn-400:not(:disabled):not(.disabled):active,.show>.btn-400.dropdown-toggle{color:#19191a;background-color:#7e7e80;border-color:#777879}.btn-400:not(:disabled):not(.disabled).active:focus,.btn-400:not(:disabled):not(.disabled):active:focus,.show>.btn-400.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-500{color:#19191a;background-color:#7e7f80;border-color:#7e7f80;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-500:hover{color:#fff;background-color:#6b6b6c;border-color:#656566}.btn-500.focus,.btn-500:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(126,127,128,.5)}.btn-500.disabled,.btn-500:disabled{color:#19191a;background-color:#7e7f80;border-color:#7e7f80}.btn-500:not(:disabled):not(.disabled).active,.btn-500:not(:disabled):not(.disabled):active,.show>.btn-500.dropdown-toggle{color:#fff;background-color:#656566;border-color:#5f5f5f}.btn-500:not(:disabled):not(.disabled).active:focus,.btn-500:not(:disabled):not(.disabled):active:focus,.show>.btn-500.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5)}.btn-600{color:#fff;background-color:#656566;border-color:#656566;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-600:hover{color:#fff;background-color:#525253;border-color:#4c4c4c}.btn-600.focus,.btn-600:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(101,101,102,.5)}.btn-600.disabled,.btn-600:disabled{color:#fff;background-color:#656566;border-color:#656566}.btn-600:not(:disabled):not(.disabled).active,.btn-600:not(:disabled):not(.disabled):active,.show>.btn-600.dropdown-toggle{color:#fff;background-color:#4c4c4c;border-color:#454546}.btn-600:not(:disabled):not(.disabled).active:focus,.btn-600:not(:disabled):not(.disabled):active:focus,.show>.btn-600.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5)}.btn-700{color:#fff;background-color:#4c4c4d;border-color:#4c4c4d;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-700:hover{color:#fff;background-color:#393939;border-color:#323233}.btn-700.focus,.btn-700:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(76,76,77,.5)}.btn-700.disabled,.btn-700:disabled{color:#fff;background-color:#4c4c4d;border-color:#4c4c4d}.btn-700:not(:disabled):not(.disabled).active,.btn-700:not(:disabled):not(.disabled):active,.show>.btn-700.dropdown-toggle{color:#fff;background-color:#323233;border-color:#2c2c2c}.btn-700:not(:disabled):not(.disabled).active:focus,.btn-700:not(:disabled):not(.disabled):active:focus,.show>.btn-700.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5)}.btn-800{color:#fff;background-color:#323333;border-color:#323333;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-800:hover{color:#fff;background-color:#1f2020;border-color:#191919}.btn-800.focus,.btn-800:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(50,51,51,.5)}.btn-800.disabled,.btn-800:disabled{color:#fff;background-color:#323333;border-color:#323333}.btn-800:not(:disabled):not(.disabled).active,.btn-800:not(:disabled):not(.disabled):active,.show>.btn-800.dropdown-toggle{color:#fff;background-color:#191919;border-color:#131313}.btn-800:not(:disabled):not(.disabled).active:focus,.btn-800:not(:disabled):not(.disabled):active:focus,.show>.btn-800.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5)}.btn-900{color:#fff;background-color:#19191a;border-color:#19191a;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075)}.btn-900:hover{color:#fff;background-color:#060606;border-color:#000}.btn-900.focus,.btn-900:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(25,25,26,.5)}.btn-900.disabled,.btn-900:disabled{color:#fff;background-color:#19191a;border-color:#19191a}.btn-900:not(:disabled):not(.disabled).active,.btn-900:not(:disabled):not(.disabled):active,.show>.btn-900.dropdown-toggle{color:#fff;background-color:#000;border-color:#000}.btn-900:not(:disabled):not(.disabled).active:focus,.btn-900:not(:disabled):not(.disabled):active:focus,.show>.btn-900.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5)}.btn-outline-primary{color:#0073e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #0073e6;box-shadow:inset 0 0 0 1px #0073e6}.btn-outline-primary:hover{color:#0959aa;-webkit-box-shadow:inset 0 0 0 1px #0959aa;box-shadow:inset 0 0 0 1px #0959aa}.btn-outline-primary.focus,.btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 1px #0073e6,0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 0 0 1px #0073e6,0 0 0 .2rem rgba(0,115,230,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#0073e6;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#0073e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #0073e6;box-shadow:inset 0 0 0 1px #0073e6}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.btn-outline-secondary{color:#5c6f82;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #5c6f82;box-shadow:inset 0 0 0 1px #5c6f82}.btn-outline-secondary:hover{color:#50565c;-webkit-box-shadow:inset 0 0 0 1px #50565c;box-shadow:inset 0 0 0 1px #50565c}.btn-outline-secondary.focus,.btn-outline-secondary:focus{-webkit-box-shadow:inset 0 0 0 1px #5c6f82,0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 0 0 1px #5c6f82,0 0 0 .2rem rgba(92,111,130,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#5c6f82;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#5c6f82;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #5c6f82;box-shadow:inset 0 0 0 1px #5c6f82}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(92,111,130,.5)}.btn-outline-success{color:#00cc85;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #00cc85;box-shadow:inset 0 0 0 1px #00cc85}.btn-outline-success:hover{color:#089161;-webkit-box-shadow:inset 0 0 0 1px #089161;box-shadow:inset 0 0 0 1px #089161}.btn-outline-success.focus,.btn-outline-success:focus{-webkit-box-shadow:inset 0 0 0 1px #00cc85,0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 0 0 1px #00cc85,0 0 0 .2rem rgba(0,204,133,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#00cc85;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#00cc85;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #00cc85;box-shadow:inset 0 0 0 1px #00cc85}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,204,133,.5)}.btn-outline-info{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-info:hover{color:#7f7f7f;-webkit-box-shadow:inset 0 0 0 1px #7f7f7f;box-shadow:inset 0 0 0 1px #7f7f7f}.btn-outline-info.focus,.btn-outline-info:focus{-webkit-box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#979899;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-warning{color:#f90;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f90;box-shadow:inset 0 0 0 1px #f90}.btn-outline-warning:hover{color:#c2780a;-webkit-box-shadow:inset 0 0 0 1px #c2780a;box-shadow:inset 0 0 0 1px #c2780a}.btn-outline-warning.focus,.btn-outline-warning:focus{-webkit-box-shadow:inset 0 0 0 1px #f90,0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 0 0 1px #f90,0 0 0 .2rem rgba(255,153,0,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#f90;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#f90;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f90;box-shadow:inset 0 0 0 1px #f90}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(255,153,0,.5)}.btn-outline-danger{color:#f73e5a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f73e5a;box-shadow:inset 0 0 0 1px #f73e5a}.btn-outline-danger:hover{color:#e91938;-webkit-box-shadow:inset 0 0 0 1px #e91938;box-shadow:inset 0 0 0 1px #e91938}.btn-outline-danger.focus,.btn-outline-danger:focus{-webkit-box-shadow:inset 0 0 0 1px #f73e5a,0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 0 0 1px #f73e5a,0 0 0 .2rem rgba(247,62,90,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#f73e5a;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#f73e5a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #f73e5a;box-shadow:inset 0 0 0 1px #f73e5a}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(247,62,90,.5)}.btn-outline-light{color:#e9e6f2;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e9e6f2;box-shadow:inset 0 0 0 1px #e9e6f2}.btn-outline-light:hover{color:#cec9dd;-webkit-box-shadow:inset 0 0 0 1px #cec9dd;box-shadow:inset 0 0 0 1px #cec9dd}.btn-outline-light.focus,.btn-outline-light:focus{-webkit-box-shadow:inset 0 0 0 1px #e9e6f2,0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 0 0 1px #e9e6f2,0 0 0 .2rem rgba(233,230,242,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#e9e6f2;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#e9e6f2;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e9e6f2;box-shadow:inset 0 0 0 1px #e9e6f2}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(233,230,242,.5)}.btn-outline-dark{color:#17324d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #17324d;box-shadow:inset 0 0 0 1px #17324d}.btn-outline-dark:hover{color:#0e1823;-webkit-box-shadow:inset 0 0 0 1px #0e1823;box-shadow:inset 0 0 0 1px #0e1823}.btn-outline-dark.focus,.btn-outline-dark:focus{-webkit-box-shadow:inset 0 0 0 1px #17324d,0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 0 0 1px #17324d,0 0 0 .2rem rgba(23,50,77,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#17324d;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#17324d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #17324d;box-shadow:inset 0 0 0 1px #17324d}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(23,50,77,.5)}.btn-outline-100{color:#e3e4e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e3e4e6;box-shadow:inset 0 0 0 1px #e3e4e6}.btn-outline-100:hover{color:#cbcbcb;-webkit-box-shadow:inset 0 0 0 1px #cbcbcb;box-shadow:inset 0 0 0 1px #cbcbcb}.btn-outline-100.focus,.btn-outline-100:focus{-webkit-box-shadow:inset 0 0 0 1px #e3e4e6,0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 0 0 1px #e3e4e6,0 0 0 .2rem rgba(227,228,230,.5)}.btn-outline-100.disabled,.btn-outline-100:disabled{color:#e3e4e6;background-color:transparent}.btn-outline-100:not(:disabled):not(.disabled).active,.btn-outline-100:not(:disabled):not(.disabled):active,.show>.btn-outline-100.dropdown-toggle{color:#e3e4e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e3e4e6;box-shadow:inset 0 0 0 1px #e3e4e6}.btn-outline-100:not(:disabled):not(.disabled).active:focus,.btn-outline-100:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-100.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(227,228,230,.5)}.btn-outline-200{color:#cacacc;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #cacacc;box-shadow:inset 0 0 0 1px #cacacc}.btn-outline-200:hover{color:#b1b1b1;-webkit-box-shadow:inset 0 0 0 1px #b1b1b1;box-shadow:inset 0 0 0 1px #b1b1b1}.btn-outline-200.focus,.btn-outline-200:focus{-webkit-box-shadow:inset 0 0 0 1px #cacacc,0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 0 0 1px #cacacc,0 0 0 .2rem rgba(202,202,204,.5)}.btn-outline-200.disabled,.btn-outline-200:disabled{color:#cacacc;background-color:transparent}.btn-outline-200:not(:disabled):not(.disabled).active,.btn-outline-200:not(:disabled):not(.disabled):active,.show>.btn-outline-200.dropdown-toggle{color:#cacacc;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #cacacc;box-shadow:inset 0 0 0 1px #cacacc}.btn-outline-200:not(:disabled):not(.disabled).active:focus,.btn-outline-200:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-200.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(202,202,204,.5)}.btn-outline-300{color:#b1b1b3;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #b1b1b3;box-shadow:inset 0 0 0 1px #b1b1b3}.btn-outline-300:hover{color:#989898;-webkit-box-shadow:inset 0 0 0 1px #989898;box-shadow:inset 0 0 0 1px #989898}.btn-outline-300.focus,.btn-outline-300:focus{-webkit-box-shadow:inset 0 0 0 1px #b1b1b3,0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 0 0 1px #b1b1b3,0 0 0 .2rem rgba(177,177,179,.5)}.btn-outline-300.disabled,.btn-outline-300:disabled{color:#b1b1b3;background-color:transparent}.btn-outline-300:not(:disabled):not(.disabled).active,.btn-outline-300:not(:disabled):not(.disabled):active,.show>.btn-outline-300.dropdown-toggle{color:#b1b1b3;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #b1b1b3;box-shadow:inset 0 0 0 1px #b1b1b3}.btn-outline-300:not(:disabled):not(.disabled).active:focus,.btn-outline-300:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-300.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(177,177,179,.5)}.btn-outline-400{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-400:hover{color:#7f7f7f;-webkit-box-shadow:inset 0 0 0 1px #7f7f7f;box-shadow:inset 0 0 0 1px #7f7f7f}.btn-outline-400.focus,.btn-outline-400:focus{-webkit-box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 0 0 1px #979899,0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-400.disabled,.btn-outline-400:disabled{color:#979899;background-color:transparent}.btn-outline-400:not(:disabled):not(.disabled).active,.btn-outline-400:not(:disabled):not(.disabled):active,.show>.btn-outline-400.dropdown-toggle{color:#979899;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #979899;box-shadow:inset 0 0 0 1px #979899}.btn-outline-400:not(:disabled):not(.disabled).active:focus,.btn-outline-400:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-400.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(151,152,153,.5)}.btn-outline-500{color:#7e7f80;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #7e7f80;box-shadow:inset 0 0 0 1px #7e7f80}.btn-outline-500:hover{color:#656565;-webkit-box-shadow:inset 0 0 0 1px #656565;box-shadow:inset 0 0 0 1px #656565}.btn-outline-500.focus,.btn-outline-500:focus{-webkit-box-shadow:inset 0 0 0 1px #7e7f80,0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 0 0 1px #7e7f80,0 0 0 .2rem rgba(126,127,128,.5)}.btn-outline-500.disabled,.btn-outline-500:disabled{color:#7e7f80;background-color:transparent}.btn-outline-500:not(:disabled):not(.disabled).active,.btn-outline-500:not(:disabled):not(.disabled):active,.show>.btn-outline-500.dropdown-toggle{color:#7e7f80;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #7e7f80;box-shadow:inset 0 0 0 1px #7e7f80}.btn-outline-500:not(:disabled):not(.disabled).active:focus,.btn-outline-500:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-500.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(126,127,128,.5)}.btn-outline-600{color:#656566;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #656566;box-shadow:inset 0 0 0 1px #656566}.btn-outline-600:hover{color:#4c4c4c;-webkit-box-shadow:inset 0 0 0 1px #4c4c4c;box-shadow:inset 0 0 0 1px #4c4c4c}.btn-outline-600.focus,.btn-outline-600:focus{-webkit-box-shadow:inset 0 0 0 1px #656566,0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 0 0 1px #656566,0 0 0 .2rem rgba(101,101,102,.5)}.btn-outline-600.disabled,.btn-outline-600:disabled{color:#656566;background-color:transparent}.btn-outline-600:not(:disabled):not(.disabled).active,.btn-outline-600:not(:disabled):not(.disabled):active,.show>.btn-outline-600.dropdown-toggle{color:#656566;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #656566;box-shadow:inset 0 0 0 1px #656566}.btn-outline-600:not(:disabled):not(.disabled).active:focus,.btn-outline-600:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-600.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(101,101,102,.5)}.btn-outline-700{color:#4c4c4d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #4c4c4d;box-shadow:inset 0 0 0 1px #4c4c4d}.btn-outline-700:hover{color:#333;-webkit-box-shadow:inset 0 0 0 1px #333;box-shadow:inset 0 0 0 1px #333}.btn-outline-700.focus,.btn-outline-700:focus{-webkit-box-shadow:inset 0 0 0 1px #4c4c4d,0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 0 0 1px #4c4c4d,0 0 0 .2rem rgba(76,76,77,.5)}.btn-outline-700.disabled,.btn-outline-700:disabled{color:#4c4c4d;background-color:transparent}.btn-outline-700:not(:disabled):not(.disabled).active,.btn-outline-700:not(:disabled):not(.disabled):active,.show>.btn-outline-700.dropdown-toggle{color:#4c4c4d;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #4c4c4d;box-shadow:inset 0 0 0 1px #4c4c4d}.btn-outline-700:not(:disabled):not(.disabled).active:focus,.btn-outline-700:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-700.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(76,76,77,.5)}.btn-outline-800{color:#323333;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #323333;box-shadow:inset 0 0 0 1px #323333}.btn-outline-800:hover{color:#191919;-webkit-box-shadow:inset 0 0 0 1px #191919;box-shadow:inset 0 0 0 1px #191919}.btn-outline-800.focus,.btn-outline-800:focus{-webkit-box-shadow:inset 0 0 0 1px #323333,0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 0 0 1px #323333,0 0 0 .2rem rgba(50,51,51,.5)}.btn-outline-800.disabled,.btn-outline-800:disabled{color:#323333;background-color:transparent}.btn-outline-800:not(:disabled):not(.disabled).active,.btn-outline-800:not(:disabled):not(.disabled):active,.show>.btn-outline-800.dropdown-toggle{color:#323333;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #323333;box-shadow:inset 0 0 0 1px #323333}.btn-outline-800:not(:disabled):not(.disabled).active:focus,.btn-outline-800:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-800.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(50,51,51,.5)}.btn-outline-900{color:#19191a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #19191a;box-shadow:inset 0 0 0 1px #19191a}.btn-outline-900:hover{color:#000;-webkit-box-shadow:inset 0 0 0 1px #000;box-shadow:inset 0 0 0 1px #000}.btn-outline-900.focus,.btn-outline-900:focus{-webkit-box-shadow:inset 0 0 0 1px #19191a,0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 0 0 1px #19191a,0 0 0 .2rem rgba(25,25,26,.5)}.btn-outline-900.disabled,.btn-outline-900:disabled{color:#19191a;background-color:transparent}.btn-outline-900:not(:disabled):not(.disabled).active,.btn-outline-900:not(:disabled):not(.disabled):active,.show>.btn-outline-900.dropdown-toggle{color:#19191a;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #19191a;box-shadow:inset 0 0 0 1px #19191a}.btn-outline-900:not(:disabled):not(.disabled).active:focus,.btn-outline-900:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-900.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(25,25,26,.5)}.btn-link{font-weight:400;color:#0073e6;text-decoration:none}.btn-link:hover{color:#004d99;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;-webkit-box-shadow:none;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#656566;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.125rem;border-radius:8px}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;border-radius:2px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{-webkit-transition:opacity .15s linear;transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{-webkit-transition:none;transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition:height .35s ease;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{-webkit-transition:none;transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty:after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:16px;font-size:1rem;color:#19191a;text-align:left;list-style:none;background-clip:padding-box;border:0 solid transparent;border-radius:4px;-webkit-box-shadow:0 0 30px 5px rgba(0,0,0,.05);box-shadow:0 0 30px 5px rgba(0,0,0,.05)}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty:after{margin-left:0}.dropright .dropdown-toggle:after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle:after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";display:none}.dropleft .dropdown-toggle:before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty:after{margin-left:0}.dropleft .dropdown-toggle:before{vertical-align:0}.dropdown-divider{height:0;margin:8px 0;overflow:hidden;border-top:1px solid #cacacc}.dropdown-item{display:block;width:100%;padding:12px 24px;clear:both;font-weight:400;color:#17324d;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#17324d;text-decoration:none;background-color:#e6ecf2}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#0073e6}.dropdown-item.disabled,.dropdown-item:disabled{color:#656566;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 24px;margin-bottom:0;font-size:14px;font-size:.875rem;color:#17324d;white-space:nowrap}.dropdown-item-text{display:block;padding:12px 24px;color:#17324d}.btn-group,.btn-group-vertical{position:relative;display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:1}.btn-toolbar{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:0}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split:after,.dropright .dropdown-toggle-split:after,.dropup .dropdown-toggle-split:after{margin-left:0}.dropleft .dropdown-toggle-split:before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group.show .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.show .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn-group-vertical{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:0}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio],.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label:after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-webkit-box;display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:16px;font-size:1rem;font-weight:400;line-height:1.5;color:#4c4c4d;text-align:center;white-space:nowrap;background-color:#cacacc;border:1px solid #979899;border-radius:4px}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.556em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:20px;font-size:1.25rem;line-height:1.556;border-radius:8px}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.428em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.428;border-radius:2px}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.nav{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#656566;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #b1b1b3}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:4px;border-top-right-radius:4px}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#cacacc #cacacc #b1b1b3}.nav-tabs .nav-link.disabled{color:#656566;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#4c4c4d;background-color:#fff;border-color:#b1b1b3 #b1b1b3 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:4px}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#0073e6}.nav-fill .nav-item{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;padding:8px 16px}.navbar,.navbar>.container,.navbar>.container-fluid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.5rem;padding-bottom:.5rem;margin-right:16px;font-size:16px;font-size:1rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;-webkit-box-align:center;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:20px;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:0}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:"";background:no-repeat 50%;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm,.navbar-expand-sm .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md,.navbar-expand-md .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg,.navbar-expand-lg .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl,.navbar-expand-xl .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row nowrap;flex-flow:row nowrap;-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand,.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3E%3C/svg%3E")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a,.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand,.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:hsla(0,0%,100%,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:hsla(0,0%,100%,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:hsla(0,0%,100%,.5);border-color:transparent}.navbar-dark .navbar-toggler-icon{background-image:url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTkuMiIgaGVpZ2h0PSIxNiIgdmlld0JveD0iMCAwIDEyIDEwIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxwYXRoIGQ9Ik0wIDRoMTJ2MkgwVjR6bTAtNGg4djJIMFYwem0wIDhoOHYySDBWOHoiIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0iZXZlbm9kZCIvPjwvc3ZnPg==)}.navbar-dark .navbar-text{color:hsla(0,0%,100%,.5)}.navbar-dark .navbar-text a,.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:0}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:0;border-top-right-radius:0}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:0;border-bottom-left-radius:0}.card-body{-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:2rem}.card-title{margin-bottom:1rem}.card-subtitle{margin-top:-.5rem}.card-subtitle,.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:2rem}.card-header{padding:1rem 2rem;margin-bottom:0;background-color:transparent;border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:-1px -1px 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:1rem 2rem;background-color:transparent;border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 -1px -1px}.card-header-tabs{margin-bottom:-1rem;border-bottom:0}.card-header-pills,.card-header-tabs{margin-right:-1rem;margin-left:-1rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:-1px}.card-img-top{width:100%;border-top-left-radius:-1px;border-top-right-radius:-1px}.card-img-bottom{width:100%;border-bottom-right-radius:-1px;border-bottom-left-radius:-1px}.card-deck{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:6px}@media (min-width:576px){.card-deck{-webkit-box-orient:horizontal;-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-6px;margin-left:-6px}.card-deck,.card-deck .card{-webkit-box-direction:normal}.card-deck .card{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;-webkit-box-orient:vertical;-ms-flex-direction:column;flex-direction:column;margin-right:6px;margin-bottom:0;margin-left:6px}}.card-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:6px}@media (min-width:576px){.card-group{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-webkit-box-flex:1;-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:1rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:transparent;border-radius:0}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item:before{display:inline-block;padding-right:.5rem;color:#656566;content:"/"}.breadcrumb-item+.breadcrumb-item:hover:before{text-decoration:underline;text-decoration:none}.breadcrumb-item.active{color:#656566}.pagination{display:-webkit-box;display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:4px}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#0073e6;background-color:#fff;border:1px solid #b1b1b3}.page-link:hover{z-index:2;color:#004d99;text-decoration:none;background-color:#cacacc;border-color:#b1b1b3}.page-link:focus{z-index:2;outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.25);box-shadow:0 0 0 .2rem rgba(0,115,230,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:4px;border-bottom-left-radius:4px}.page-item:last-child .page-link{border-top-right-radius:4px;border-bottom-right-radius:4px}.page-item.active .page-link{z-index:1;color:#fff;background-color:#0073e6;border-color:#0073e6}.page-item.disabled .page-link{color:#656566;pointer-events:none;cursor:auto;background-color:#fff;border-color:#b1b1b3}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:20px;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:8px;border-bottom-left-radius:8px}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:8px;border-bottom-right-radius:8px}.pagination-sm .page-link{padding:.25rem .5rem;font-size:14px;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:2px;border-bottom-left-radius:2px}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:2px;border-bottom-right-radius:2px}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:4px;-webkit-transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,-webkit-box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{-webkit-transition:none;transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#0073e6}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0059b3}a.badge-primary.focus,a.badge-primary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,115,230,.5);box-shadow:0 0 0 .2rem rgba(0,115,230,.5)}.badge-secondary{color:#fff;background-color:#5c6f82}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#475664}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(92,111,130,.5);box-shadow:0 0 0 .2rem rgba(92,111,130,.5)}.badge-success{color:#19191a;background-color:#00cc85}a.badge-success:focus,a.badge-success:hover{color:#19191a;background-color:#009963}a.badge-success.focus,a.badge-success:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(0,204,133,.5);box-shadow:0 0 0 .2rem rgba(0,204,133,.5)}.badge-info{color:#19191a;background-color:#979899}a.badge-info:focus,a.badge-info:hover{color:#19191a;background-color:#7e7e80}a.badge-info.focus,a.badge-info:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(151,152,153,.5);box-shadow:0 0 0 .2rem rgba(151,152,153,.5)}.badge-warning{color:#19191a;background-color:#f90}a.badge-warning:focus,a.badge-warning:hover{color:#19191a;background-color:#cc7a00}a.badge-warning.focus,a.badge-warning:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(255,153,0,.5);box-shadow:0 0 0 .2rem rgba(255,153,0,.5)}.badge-danger{color:#19191a;background-color:#f73e5a}a.badge-danger:focus,a.badge-danger:hover{color:#19191a;background-color:#f50d30}a.badge-danger.focus,a.badge-danger:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(247,62,90,.5);box-shadow:0 0 0 .2rem rgba(247,62,90,.5)}.badge-light{color:#19191a;background-color:#e9e6f2}a.badge-light:focus,a.badge-light:hover{color:#19191a;background-color:#ccc4e1}a.badge-light.focus,a.badge-light:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(233,230,242,.5);box-shadow:0 0 0 .2rem rgba(233,230,242,.5)}.badge-dark{color:#fff;background-color:#17324d}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#0b1825}a.badge-dark.focus,a.badge-dark:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(23,50,77,.5);box-shadow:0 0 0 .2rem rgba(23,50,77,.5)}.badge-100{color:#19191a;background-color:#e3e4e6}a.badge-100:focus,a.badge-100:hover{color:#19191a;background-color:#c9cacd}a.badge-100.focus,a.badge-100:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(227,228,230,.5);box-shadow:0 0 0 .2rem rgba(227,228,230,.5)}.badge-200{color:#19191a;background-color:#cacacc}a.badge-200:focus,a.badge-200:hover{color:#19191a;background-color:#b0b1b3}a.badge-200.focus,a.badge-200:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(202,202,204,.5);box-shadow:0 0 0 .2rem rgba(202,202,204,.5)}.badge-300{color:#19191a;background-color:#b1b1b3}a.badge-300:focus,a.badge-300:hover{color:#19191a;background-color:#979899}a.badge-300.focus,a.badge-300:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(177,177,179,.5);box-shadow:0 0 0 .2rem rgba(177,177,179,.5)}.badge-400{color:#19191a;background-color:#979899}a.badge-400:focus,a.badge-400:hover{color:#19191a;background-color:#7e7e80}a.badge-400.focus,a.badge-400:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(151,152,153,.5);box-shadow:0 0 0 .2rem rgba(151,152,153,.5)}.badge-500{color:#19191a;background-color:#7e7f80}a.badge-500:focus,a.badge-500:hover{color:#19191a;background-color:#656566}a.badge-500.focus,a.badge-500:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(126,127,128,.5);box-shadow:0 0 0 .2rem rgba(126,127,128,.5)}.badge-600{color:#fff;background-color:#656566}a.badge-600:focus,a.badge-600:hover{color:#fff;background-color:#4c4c4c}a.badge-600.focus,a.badge-600:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(101,101,102,.5);box-shadow:0 0 0 .2rem rgba(101,101,102,.5)}.badge-700{color:#fff;background-color:#4c4c4d}a.badge-700:focus,a.badge-700:hover{color:#fff;background-color:#323233}a.badge-700.focus,a.badge-700:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(76,76,77,.5);box-shadow:0 0 0 .2rem rgba(76,76,77,.5)}.badge-800{color:#fff;background-color:#323333}a.badge-800:focus,a.badge-800:hover{color:#fff;background-color:#191919}a.badge-800.focus,a.badge-800:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(50,51,51,.5);box-shadow:0 0 0 .2rem rgba(50,51,51,.5)}.badge-900{color:#fff;background-color:#19191a}a.badge-900:focus,a.badge-900:hover{color:#fff;background-color:#000}a.badge-900.focus,a.badge-900:focus{outline:0;-webkit-box-shadow:0 0 0 .2rem rgba(25,25,26,.5);box-shadow:0 0 0 .2rem rgba(25,25,26,.5)}@-webkit-keyframes progress-bar-stripes{0%{background-position:16px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{0%{background-position:16px 0}to{background-position:0 0}}.progress{height:16px;overflow:hidden;font-size:12px;font-size:.75rem;background-color:#cacacc;border-radius:0;-webkit-box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1);box-shadow:inset 0 .1rem .1rem rgba(0,0,0,.1)}.progress,.progress-bar{display:-webkit-box;display:-ms-flexbox;display:flex}.progress-bar{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#0073e6;-webkit-transition:width .6s ease;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{-webkit-transition:none;transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,hsla(0,0%,100%,.15) 25%,transparent 0,transparent 50%,hsla(0,0%,100%,.15) 0,hsla(0,0%,100%,.15) 75%,transparent 0,transparent);background-size:16px 16px}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.media-body{-webkit-box-flex:1;-ms-flex:1;flex:1}.list-group{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#0073e6;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#00264d;text-decoration:none}.list-group-item-action:active{color:#19191a;background-color:#cacacc}.list-group-item{position:relative;display:block;padding:1rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:4px;border-top-right-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}.list-group-item.disabled,.list-group-item:disabled{color:#656566;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#0073e6;border-color:#0073e6}.list-group-horizontal{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-webkit-box-orient:horizontal;-webkit-box-direction:normal;-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:4px;border-bottom-left-radius:4px;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:4px;border-bottom-right-radius:4px;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#003c78;background-color:#b8d8f8}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#003c78;background-color:#a1cbf6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#003c78;border-color:#003c78}.list-group-item-secondary{color:#303a44;background-color:#d1d7dc}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#303a44;background-color:#c3cad1}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#303a44;border-color:#303a44}.list-group-item-success{color:#006a45;background-color:#b8f1dd}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#006a45;background-color:#a3edd3}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#006a45;border-color:#006a45}.list-group-item-info{color:#4f4f50;background-color:#e2e2e2}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#4f4f50;background-color:#d5d5d5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#4f4f50;border-color:#4f4f50}.list-group-item-warning{color:#855000;background-color:#ffe2b8}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#855000;background-color:#ffd89f}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#855000;border-color:#855000}.list-group-item-danger{color:#80202f;background-color:#fdc9d1}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#80202f;background-color:#fcb0bc}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#80202f;border-color:#80202f}.list-group-item-light{color:#79787e;background-color:#f9f8fb}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#79787e;background-color:#ebe8f2}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#79787e;border-color:#79787e}.list-group-item-dark{color:#0c1a28;background-color:#bec6cd}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#0c1a28;background-color:#b0b9c2}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#0c1a28;border-color:#0c1a28}.list-group-item-100{color:#767778;background-color:#f7f7f8}.list-group-item-100.list-group-item-action:focus,.list-group-item-100.list-group-item-action:hover{color:#767778;background-color:#e9e9ec}.list-group-item-100.list-group-item-action.active{color:#fff;background-color:#767778;border-color:#767778}.list-group-item-200{color:#69696a;background-color:#f0f0f1}.list-group-item-200.list-group-item-action:focus,.list-group-item-200.list-group-item-action:hover{color:#69696a;background-color:#e3e3e5}.list-group-item-200.list-group-item-action.active{color:#fff;background-color:#69696a;border-color:#69696a}.list-group-item-300{color:#5c5c5d;background-color:#e9e9ea}.list-group-item-300.list-group-item-action:focus,.list-group-item-300.list-group-item-action:hover{color:#5c5c5d;background-color:#dcdcde}.list-group-item-300.list-group-item-action.active{color:#fff;background-color:#5c5c5d;border-color:#5c5c5d}.list-group-item-400{color:#4f4f50;background-color:#e2e2e2}.list-group-item-400.list-group-item-action:focus,.list-group-item-400.list-group-item-action:hover{color:#4f4f50;background-color:#d5d5d5}.list-group-item-400.list-group-item-action.active{color:#fff;background-color:#4f4f50;border-color:#4f4f50}.list-group-item-500{color:#424243;background-color:#dbdbdb}.list-group-item-500.list-group-item-action:focus,.list-group-item-500.list-group-item-action:hover{color:#424243;background-color:#cecece}.list-group-item-500.list-group-item-action.active{color:#fff;background-color:#424243;border-color:#424243}.list-group-item-600{color:#353535;background-color:#d4d4d4}.list-group-item-600.list-group-item-action:focus,.list-group-item-600.list-group-item-action:hover{color:#353535;background-color:#c7c7c7}.list-group-item-600.list-group-item-action.active{color:#fff;background-color:#353535;border-color:#353535}.list-group-item-700{color:#282828;background-color:#cdcdcd}.list-group-item-700.list-group-item-action:focus,.list-group-item-700.list-group-item-action:hover{color:#282828;background-color:silver}.list-group-item-700.list-group-item-action.active{color:#fff;background-color:#282828;border-color:#282828}.list-group-item-800{color:#1a1b1b;background-color:#c6c6c6}.list-group-item-800.list-group-item-action:focus,.list-group-item-800.list-group-item-action:hover{color:#1a1b1b;background-color:#b9b9b9}.list-group-item-800.list-group-item-action.active{color:#fff;background-color:#1a1b1b;border-color:#1a1b1b}.list-group-item-900{color:#0d0d0e;background-color:#bfbfbf}.list-group-item-900.list-group-item-action:focus,.list-group-item-900.list-group-item-action:hover{color:#0d0d0e;background-color:#b2b2b2}.list-group-item-900.list-group-item-action.active{color:#fff;background-color:#0d0d0e;border-color:#0d0d0e}.close{float:right;font-size:24px;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translateY(-50px);transform:translateY(-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{-webkit-transition:none;transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-webkit-box;display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered:before{display:block;height:calc(100vh - 1rem);content:""}.modal-dialog-centered.modal-dialog-scrollable{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable:before{content:none}.modal-content{position:relative;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:8px;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.5);box-shadow:0 .25rem .5rem rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.8}.modal-header{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;padding:1.5rem;border-bottom:0 solid #b1b1b3;border-top-left-radius:8px;border-top-right-radius:8px}.modal-header .close{padding:1.5rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-webkit-box-flex:1;-ms-flex:1 1 auto;flex:1 1 auto;padding:1.5rem}.modal-footer{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;padding:1.5rem;border-top:0 solid #b1b1b3;border-bottom-right-radius:8px;border-bottom-left-radius:8px}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.5rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3rem)}.modal-dialog-centered{min-height:calc(100% - 3rem)}.modal-dialog-centered:before{height:calc(100vh - 3rem)}.modal-content{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.5);box-shadow:0 .5rem 1rem rgba(0,0,0,.5)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:Titillium Web,Geneva,Tahoma,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:14px;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:1}.tooltip .arrow{position:absolute;display:block;width:12.8px;width:.8rem;height:6.4px;height:.4rem}.tooltip .arrow:before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow:before,.bs-tooltip-top .arrow:before{top:0;border-width:.4rem .4rem 0;border-top-color:#004a4d}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:6.4px;width:.4rem;height:12.8px;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow:before,.bs-tooltip-right .arrow:before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#004a4d}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow:before,.bs-tooltip-bottom .arrow:before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#004a4d}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:6.4px;width:.4rem;height:12.8px;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow:before,.bs-tooltip-left .arrow:before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#004a4d}.tooltip-inner{max-width:32em;padding:1rem;color:#fff;text-align:center;background-color:#004a4d;border-radius:4px}.popover{top:0;left:0;z-index:1060;max-width:276px;font-family:Titillium Web,Geneva,Tahoma,sans-serif;font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:14px;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:8px;-webkit-box-shadow:0 .25rem .5rem rgba(0,0,0,.2);box-shadow:0 .25rem .5rem rgba(0,0,0,.2)}.popover,.popover .arrow{position:absolute;display:block}.popover .arrow{width:16px;width:1rem;height:8px;height:.5rem;margin:0 8px}.popover .arrow:after,.popover .arrow:before{position:absolute;display:block;content:"";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=top]>.arrow:before,.bs-popover-top>.arrow:before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow:after,.bs-popover-top>.arrow:after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc(-.5rem + -1px);width:8px;width:.5rem;height:16px;height:1rem;margin:8px 0}.bs-popover-auto[x-placement^=right]>.arrow:before,.bs-popover-right>.arrow:before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow:after,.bs-popover-right>.arrow:after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc(-.5rem + -1px)}.bs-popover-auto[x-placement^=bottom]>.arrow:before,.bs-popover-bottom>.arrow:before{top:0;border-width:0 .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow:after,.bs-popover-bottom>.arrow:after{top:1px;border-width:0 .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header:before,.bs-popover-bottom .popover-header:before{position:absolute;top:0;left:50%;display:block;width:16px;width:1rem;margin-left:-.5rem;content:"";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc(-.5rem + -1px);width:8px;width:.5rem;height:16px;height:1rem;margin:8px 0}.bs-popover-auto[x-placement^=left]>.arrow:before,.bs-popover-left>.arrow:before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow:after,.bs-popover-left>.arrow:after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:16px;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:7px;border-top-right-radius:7px}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#19191a}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner:after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transition:-webkit-transform .6s ease-in-out;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{-webkit-transition:none;transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;-webkit-transition-property:opacity;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;-webkit-transition:opacity 0s .6s;transition:opacity 0s .6s}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{-webkit-transition:none;transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;width:auto;color:#5c6f82;text-align:center;opacity:1;-webkit-transition:opacity .15s ease;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{-webkit-transition:none;transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#5c6f82;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:32px;height:32px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 8 8'%3E%3Cpath d='M5.25 0l-4 4 4 4 1.5-1.5L4.25 4l2.5-2.5L5.25 0z'/%3E%3C/svg%3E")}.carousel-control-next-icon{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 8 8'%3E%3Cpath d='M2.75 0l-1.5 1.5L3.75 4l-2.5 2.5L2.75 8l4-4-4-4z'/%3E%3C/svg%3E")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:auto;margin-left:auto;list-style:none}.carousel-indicators li{-webkit-box-sizing:content-box;box-sizing:content-box;-webkit-box-flex:0;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;-webkit-transition:opacity .6s ease;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{-webkit-transition:none;transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#0073e6!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0059b3!important}.bg-secondary{background-color:#5c6f82!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#475664!important}.bg-success{background-color:#00cc85!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#009963!important}.bg-info{background-color:#979899!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#7e7e80!important}.bg-warning{background-color:#f90!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#cc7a00!important}.bg-danger{background-color:#f73e5a!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#f50d30!important}.bg-light{background-color:#e9e6f2!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#ccc4e1!important}.bg-dark{background-color:#17324d!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#0b1825!important}.bg-100{background-color:#e3e4e6!important}a.bg-100:focus,a.bg-100:hover,button.bg-100:focus,button.bg-100:hover{background-color:#c9cacd!important}.bg-200{background-color:#cacacc!important}a.bg-200:focus,a.bg-200:hover,button.bg-200:focus,button.bg-200:hover{background-color:#b0b1b3!important}.bg-300{background-color:#b1b1b3!important}.bg-400,a.bg-300:focus,a.bg-300:hover,button.bg-300:focus,button.bg-300:hover{background-color:#979899!important}a.bg-400:focus,a.bg-400:hover,button.bg-400:focus,button.bg-400:hover{background-color:#7e7e80!important}.bg-500{background-color:#7e7f80!important}.bg-600,a.bg-500:focus,a.bg-500:hover,button.bg-500:focus,button.bg-500:hover{background-color:#656566!important}a.bg-600:focus,a.bg-600:hover,button.bg-600:focus,button.bg-600:hover{background-color:#4c4c4c!important}.bg-700{background-color:#4c4c4d!important}a.bg-700:focus,a.bg-700:hover,button.bg-700:focus,button.bg-700:hover{background-color:#323233!important}.bg-800{background-color:#323333!important}a.bg-800:focus,a.bg-800:hover,button.bg-800:focus,button.bg-800:hover{background-color:#191919!important}.bg-900{background-color:#19191a!important}a.bg-900:focus,a.bg-900:hover,button.bg-900:focus,button.bg-900:hover{background-color:#000!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #b1b1b3!important}.border-top{border-top:1px solid #b1b1b3!important}.border-right{border-right:1px solid #b1b1b3!important}.border-bottom{border-bottom:1px solid #b1b1b3!important}.border-left{border-left:1px solid #b1b1b3!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#0073e6!important}.border-secondary{border-color:#5c6f82!important}.border-success{border-color:#00cc85!important}.border-info{border-color:#979899!important}.border-warning{border-color:#f90!important}.border-danger{border-color:#f73e5a!important}.border-light{border-color:#e9e6f2!important}.border-dark{border-color:#17324d!important}.border-100{border-color:#e3e4e6!important}.border-200{border-color:#cacacc!important}.border-300{border-color:#b1b1b3!important}.border-400{border-color:#979899!important}.border-500{border-color:#7e7f80!important}.border-600{border-color:#656566!important}.border-700{border-color:#4c4c4d!important}.border-800{border-color:#323333!important}.border-900{border-color:#19191a!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:2px!important}.rounded{border-radius:4px!important}.rounded-top{border-top-left-radius:4px!important}.rounded-right,.rounded-top{border-top-right-radius:4px!important}.rounded-bottom,.rounded-right{border-bottom-right-radius:4px!important}.rounded-bottom,.rounded-left{border-bottom-left-radius:4px!important}.rounded-left{border-top-left-radius:4px!important}.rounded-lg{border-radius:8px!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix:after{display:block;clear:both;content:""}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-webkit-box!important;display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-webkit-inline-box!important;display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive:before{display:block;content:""}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9:before{padding-top:42.8571428571%}.embed-responsive-16by9:before{padding-top:56.25%}.embed-responsive-4by3:before{padding-top:75%}.embed-responsive-1by1:before{padding-top:100%}.flex-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-column,.flex-row{-webkit-box-direction:normal!important}.flex-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-webkit-box-orient:horizontal!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse,.flex-row-reverse{-webkit-box-direction:reverse!important}.flex-column-reverse{-webkit-box-orient:vertical!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column,.flex-sm-row{-webkit-box-direction:normal!important}.flex-sm-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column,.flex-md-row{-webkit-box-direction:normal!important}.flex-md-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column,.flex-lg-row{-webkit-box-direction:normal!important}.flex-lg-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-webkit-box-orient:horizontal!important;-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column,.flex-xl-row{-webkit-box-direction:normal!important}.flex-xl-column{-webkit-box-orient:vertical!important;-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-webkit-box-orient:horizontal!important;-webkit-box-direction:reverse!important;-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-webkit-box-orient:vertical!important;-webkit-box-direction:reverse!important;-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-webkit-box-flex:1!important;-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-webkit-box-flex:0!important;-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-webkit-box-flex:1!important;-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-webkit-box-pack:start!important;-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-webkit-box-pack:end!important;-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-webkit-box-pack:center!important;-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-webkit-box-pack:justify!important;-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-webkit-box-align:start!important;-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-webkit-box-align:end!important;-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-webkit-box-align:center!important;-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-webkit-box-align:baseline!important;-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-webkit-box-align:stretch!important;-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{top:0}.fixed-bottom,.fixed-top{position:fixed;right:0;left:0;z-index:1030}.fixed-bottom{bottom:0}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{-webkit-box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important;box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{-webkit-box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important;box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{-webkit-box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important;box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{-webkit-box-shadow:none!important;box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link:after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:"";background-color:transparent}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:4px!important}.mt-1,.my-1{margin-top:4px!important}.mr-1,.mx-1{margin-right:4px!important}.mb-1,.my-1{margin-bottom:4px!important}.ml-1,.mx-1{margin-left:4px!important}.m-2{margin:8px!important}.mt-2,.my-2{margin-top:8px!important}.mr-2,.mx-2{margin-right:8px!important}.mb-2,.my-2{margin-bottom:8px!important}.ml-2,.mx-2{margin-left:8px!important}.m-3{margin:16px!important}.mt-3,.my-3{margin-top:16px!important}.mr-3,.mx-3{margin-right:16px!important}.mb-3,.my-3{margin-bottom:16px!important}.ml-3,.mx-3{margin-left:16px!important}.m-4{margin:24px!important}.mt-4,.my-4{margin-top:24px!important}.mr-4,.mx-4{margin-right:24px!important}.mb-4,.my-4{margin-bottom:24px!important}.ml-4,.mx-4{margin-left:24px!important}.m-5{margin:48px!important}.mt-5,.my-5{margin-top:48px!important}.mr-5,.mx-5{margin-right:48px!important}.mb-5,.my-5{margin-bottom:48px!important}.ml-5,.mx-5{margin-left:48px!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:4px!important}.pt-1,.py-1{padding-top:4px!important}.pr-1,.px-1{padding-right:4px!important}.pb-1,.py-1{padding-bottom:4px!important}.pl-1,.px-1{padding-left:4px!important}.p-2{padding:8px!important}.pt-2,.py-2{padding-top:8px!important}.pr-2,.px-2{padding-right:8px!important}.pb-2,.py-2{padding-bottom:8px!important}.pl-2,.px-2{padding-left:8px!important}.p-3{padding:16px!important}.pt-3,.py-3{padding-top:16px!important}.pr-3,.px-3{padding-right:16px!important}.pb-3,.py-3{padding-bottom:16px!important}.pl-3,.px-3{padding-left:16px!important}.p-4{padding:24px!important}.pt-4,.py-4{padding-top:24px!important}.pr-4,.px-4{padding-right:24px!important}.pb-4,.py-4{padding-bottom:24px!important}.pl-4,.px-4{padding-left:24px!important}.p-5{padding:48px!important}.pt-5,.py-5{padding-top:48px!important}.pr-5,.px-5{padding-right:48px!important}.pb-5,.py-5{padding-bottom:48px!important}.pl-5,.px-5{padding-left:48px!important}.m-n1{margin:-4px!important}.mt-n1,.my-n1{margin-top:-4px!important}.mr-n1,.mx-n1{margin-right:-4px!important}.mb-n1,.my-n1{margin-bottom:-4px!important}.ml-n1,.mx-n1{margin-left:-4px!important}.m-n2{margin:-8px!important}.mt-n2,.my-n2{margin-top:-8px!important}.mr-n2,.mx-n2{margin-right:-8px!important}.mb-n2,.my-n2{margin-bottom:-8px!important}.ml-n2,.mx-n2{margin-left:-8px!important}.m-n3{margin:-16px!important}.mt-n3,.my-n3{margin-top:-16px!important}.mr-n3,.mx-n3{margin-right:-16px!important}.mb-n3,.my-n3{margin-bottom:-16px!important}.ml-n3,.mx-n3{margin-left:-16px!important}.m-n4{margin:-24px!important}.mt-n4,.my-n4{margin-top:-24px!important}.mr-n4,.mx-n4{margin-right:-24px!important}.mb-n4,.my-n4{margin-bottom:-24px!important}.ml-n4,.mx-n4{margin-left:-24px!important}.m-n5{margin:-48px!important}.mt-n5,.my-n5{margin-top:-48px!important}.mr-n5,.mx-n5{margin-right:-48px!important}.mb-n5,.my-n5{margin-bottom:-48px!important}.ml-n5,.mx-n5{margin-left:-48px!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:4px!important}.mt-sm-1,.my-sm-1{margin-top:4px!important}.mr-sm-1,.mx-sm-1{margin-right:4px!important}.mb-sm-1,.my-sm-1{margin-bottom:4px!important}.ml-sm-1,.mx-sm-1{margin-left:4px!important}.m-sm-2{margin:8px!important}.mt-sm-2,.my-sm-2{margin-top:8px!important}.mr-sm-2,.mx-sm-2{margin-right:8px!important}.mb-sm-2,.my-sm-2{margin-bottom:8px!important}.ml-sm-2,.mx-sm-2{margin-left:8px!important}.m-sm-3{margin:16px!important}.mt-sm-3,.my-sm-3{margin-top:16px!important}.mr-sm-3,.mx-sm-3{margin-right:16px!important}.mb-sm-3,.my-sm-3{margin-bottom:16px!important}.ml-sm-3,.mx-sm-3{margin-left:16px!important}.m-sm-4{margin:24px!important}.mt-sm-4,.my-sm-4{margin-top:24px!important}.mr-sm-4,.mx-sm-4{margin-right:24px!important}.mb-sm-4,.my-sm-4{margin-bottom:24px!important}.ml-sm-4,.mx-sm-4{margin-left:24px!important}.m-sm-5{margin:48px!important}.mt-sm-5,.my-sm-5{margin-top:48px!important}.mr-sm-5,.mx-sm-5{margin-right:48px!important}.mb-sm-5,.my-sm-5{margin-bottom:48px!important}.ml-sm-5,.mx-sm-5{margin-left:48px!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:4px!important}.pt-sm-1,.py-sm-1{padding-top:4px!important}.pr-sm-1,.px-sm-1{padding-right:4px!important}.pb-sm-1,.py-sm-1{padding-bottom:4px!important}.pl-sm-1,.px-sm-1{padding-left:4px!important}.p-sm-2{padding:8px!important}.pt-sm-2,.py-sm-2{padding-top:8px!important}.pr-sm-2,.px-sm-2{padding-right:8px!important}.pb-sm-2,.py-sm-2{padding-bottom:8px!important}.pl-sm-2,.px-sm-2{padding-left:8px!important}.p-sm-3{padding:16px!important}.pt-sm-3,.py-sm-3{padding-top:16px!important}.pr-sm-3,.px-sm-3{padding-right:16px!important}.pb-sm-3,.py-sm-3{padding-bottom:16px!important}.pl-sm-3,.px-sm-3{padding-left:16px!important}.p-sm-4{padding:24px!important}.pt-sm-4,.py-sm-4{padding-top:24px!important}.pr-sm-4,.px-sm-4{padding-right:24px!important}.pb-sm-4,.py-sm-4{padding-bottom:24px!important}.pl-sm-4,.px-sm-4{padding-left:24px!important}.p-sm-5{padding:48px!important}.pt-sm-5,.py-sm-5{padding-top:48px!important}.pr-sm-5,.px-sm-5{padding-right:48px!important}.pb-sm-5,.py-sm-5{padding-bottom:48px!important}.pl-sm-5,.px-sm-5{padding-left:48px!important}.m-sm-n1{margin:-4px!important}.mt-sm-n1,.my-sm-n1{margin-top:-4px!important}.mr-sm-n1,.mx-sm-n1{margin-right:-4px!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-4px!important}.ml-sm-n1,.mx-sm-n1{margin-left:-4px!important}.m-sm-n2{margin:-8px!important}.mt-sm-n2,.my-sm-n2{margin-top:-8px!important}.mr-sm-n2,.mx-sm-n2{margin-right:-8px!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-8px!important}.ml-sm-n2,.mx-sm-n2{margin-left:-8px!important}.m-sm-n3{margin:-16px!important}.mt-sm-n3,.my-sm-n3{margin-top:-16px!important}.mr-sm-n3,.mx-sm-n3{margin-right:-16px!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-16px!important}.ml-sm-n3,.mx-sm-n3{margin-left:-16px!important}.m-sm-n4{margin:-24px!important}.mt-sm-n4,.my-sm-n4{margin-top:-24px!important}.mr-sm-n4,.mx-sm-n4{margin-right:-24px!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-24px!important}.ml-sm-n4,.mx-sm-n4{margin-left:-24px!important}.m-sm-n5{margin:-48px!important}.mt-sm-n5,.my-sm-n5{margin-top:-48px!important}.mr-sm-n5,.mx-sm-n5{margin-right:-48px!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-48px!important}.ml-sm-n5,.mx-sm-n5{margin-left:-48px!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:4px!important}.mt-md-1,.my-md-1{margin-top:4px!important}.mr-md-1,.mx-md-1{margin-right:4px!important}.mb-md-1,.my-md-1{margin-bottom:4px!important}.ml-md-1,.mx-md-1{margin-left:4px!important}.m-md-2{margin:8px!important}.mt-md-2,.my-md-2{margin-top:8px!important}.mr-md-2,.mx-md-2{margin-right:8px!important}.mb-md-2,.my-md-2{margin-bottom:8px!important}.ml-md-2,.mx-md-2{margin-left:8px!important}.m-md-3{margin:16px!important}.mt-md-3,.my-md-3{margin-top:16px!important}.mr-md-3,.mx-md-3{margin-right:16px!important}.mb-md-3,.my-md-3{margin-bottom:16px!important}.ml-md-3,.mx-md-3{margin-left:16px!important}.m-md-4{margin:24px!important}.mt-md-4,.my-md-4{margin-top:24px!important}.mr-md-4,.mx-md-4{margin-right:24px!important}.mb-md-4,.my-md-4{margin-bottom:24px!important}.ml-md-4,.mx-md-4{margin-left:24px!important}.m-md-5{margin:48px!important}.mt-md-5,.my-md-5{margin-top:48px!important}.mr-md-5,.mx-md-5{margin-right:48px!important}.mb-md-5,.my-md-5{margin-bottom:48px!important}.ml-md-5,.mx-md-5{margin-left:48px!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:4px!important}.pt-md-1,.py-md-1{padding-top:4px!important}.pr-md-1,.px-md-1{padding-right:4px!important}.pb-md-1,.py-md-1{padding-bottom:4px!important}.pl-md-1,.px-md-1{padding-left:4px!important}.p-md-2{padding:8px!important}.pt-md-2,.py-md-2{padding-top:8px!important}.pr-md-2,.px-md-2{padding-right:8px!important}.pb-md-2,.py-md-2{padding-bottom:8px!important}.pl-md-2,.px-md-2{padding-left:8px!important}.p-md-3{padding:16px!important}.pt-md-3,.py-md-3{padding-top:16px!important}.pr-md-3,.px-md-3{padding-right:16px!important}.pb-md-3,.py-md-3{padding-bottom:16px!important}.pl-md-3,.px-md-3{padding-left:16px!important}.p-md-4{padding:24px!important}.pt-md-4,.py-md-4{padding-top:24px!important}.pr-md-4,.px-md-4{padding-right:24px!important}.pb-md-4,.py-md-4{padding-bottom:24px!important}.pl-md-4,.px-md-4{padding-left:24px!important}.p-md-5{padding:48px!important}.pt-md-5,.py-md-5{padding-top:48px!important}.pr-md-5,.px-md-5{padding-right:48px!important}.pb-md-5,.py-md-5{padding-bottom:48px!important}.pl-md-5,.px-md-5{padding-left:48px!important}.m-md-n1{margin:-4px!important}.mt-md-n1,.my-md-n1{margin-top:-4px!important}.mr-md-n1,.mx-md-n1{margin-right:-4px!important}.mb-md-n1,.my-md-n1{margin-bottom:-4px!important}.ml-md-n1,.mx-md-n1{margin-left:-4px!important}.m-md-n2{margin:-8px!important}.mt-md-n2,.my-md-n2{margin-top:-8px!important}.mr-md-n2,.mx-md-n2{margin-right:-8px!important}.mb-md-n2,.my-md-n2{margin-bottom:-8px!important}.ml-md-n2,.mx-md-n2{margin-left:-8px!important}.m-md-n3{margin:-16px!important}.mt-md-n3,.my-md-n3{margin-top:-16px!important}.mr-md-n3,.mx-md-n3{margin-right:-16px!important}.mb-md-n3,.my-md-n3{margin-bottom:-16px!important}.ml-md-n3,.mx-md-n3{margin-left:-16px!important}.m-md-n4{margin:-24px!important}.mt-md-n4,.my-md-n4{margin-top:-24px!important}.mr-md-n4,.mx-md-n4{margin-right:-24px!important}.mb-md-n4,.my-md-n4{margin-bottom:-24px!important}.ml-md-n4,.mx-md-n4{margin-left:-24px!important}.m-md-n5{margin:-48px!important}.mt-md-n5,.my-md-n5{margin-top:-48px!important}.mr-md-n5,.mx-md-n5{margin-right:-48px!important}.mb-md-n5,.my-md-n5{margin-bottom:-48px!important}.ml-md-n5,.mx-md-n5{margin-left:-48px!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:4px!important}.mt-lg-1,.my-lg-1{margin-top:4px!important}.mr-lg-1,.mx-lg-1{margin-right:4px!important}.mb-lg-1,.my-lg-1{margin-bottom:4px!important}.ml-lg-1,.mx-lg-1{margin-left:4px!important}.m-lg-2{margin:8px!important}.mt-lg-2,.my-lg-2{margin-top:8px!important}.mr-lg-2,.mx-lg-2{margin-right:8px!important}.mb-lg-2,.my-lg-2{margin-bottom:8px!important}.ml-lg-2,.mx-lg-2{margin-left:8px!important}.m-lg-3{margin:16px!important}.mt-lg-3,.my-lg-3{margin-top:16px!important}.mr-lg-3,.mx-lg-3{margin-right:16px!important}.mb-lg-3,.my-lg-3{margin-bottom:16px!important}.ml-lg-3,.mx-lg-3{margin-left:16px!important}.m-lg-4{margin:24px!important}.mt-lg-4,.my-lg-4{margin-top:24px!important}.mr-lg-4,.mx-lg-4{margin-right:24px!important}.mb-lg-4,.my-lg-4{margin-bottom:24px!important}.ml-lg-4,.mx-lg-4{margin-left:24px!important}.m-lg-5{margin:48px!important}.mt-lg-5,.my-lg-5{margin-top:48px!important}.mr-lg-5,.mx-lg-5{margin-right:48px!important}.mb-lg-5,.my-lg-5{margin-bottom:48px!important}.ml-lg-5,.mx-lg-5{margin-left:48px!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:4px!important}.pt-lg-1,.py-lg-1{padding-top:4px!important}.pr-lg-1,.px-lg-1{padding-right:4px!important}.pb-lg-1,.py-lg-1{padding-bottom:4px!important}.pl-lg-1,.px-lg-1{padding-left:4px!important}.p-lg-2{padding:8px!important}.pt-lg-2,.py-lg-2{padding-top:8px!important}.pr-lg-2,.px-lg-2{padding-right:8px!important}.pb-lg-2,.py-lg-2{padding-bottom:8px!important}.pl-lg-2,.px-lg-2{padding-left:8px!important}.p-lg-3{padding:16px!important}.pt-lg-3,.py-lg-3{padding-top:16px!important}.pr-lg-3,.px-lg-3{padding-right:16px!important}.pb-lg-3,.py-lg-3{padding-bottom:16px!important}.pl-lg-3,.px-lg-3{padding-left:16px!important}.p-lg-4{padding:24px!important}.pt-lg-4,.py-lg-4{padding-top:24px!important}.pr-lg-4,.px-lg-4{padding-right:24px!important}.pb-lg-4,.py-lg-4{padding-bottom:24px!important}.pl-lg-4,.px-lg-4{padding-left:24px!important}.p-lg-5{padding:48px!important}.pt-lg-5,.py-lg-5{padding-top:48px!important}.pr-lg-5,.px-lg-5{padding-right:48px!important}.pb-lg-5,.py-lg-5{padding-bottom:48px!important}.pl-lg-5,.px-lg-5{padding-left:48px!important}.m-lg-n1{margin:-4px!important}.mt-lg-n1,.my-lg-n1{margin-top:-4px!important}.mr-lg-n1,.mx-lg-n1{margin-right:-4px!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-4px!important}.ml-lg-n1,.mx-lg-n1{margin-left:-4px!important}.m-lg-n2{margin:-8px!important}.mt-lg-n2,.my-lg-n2{margin-top:-8px!important}.mr-lg-n2,.mx-lg-n2{margin-right:-8px!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-8px!important}.ml-lg-n2,.mx-lg-n2{margin-left:-8px!important}.m-lg-n3{margin:-16px!important}.mt-lg-n3,.my-lg-n3{margin-top:-16px!important}.mr-lg-n3,.mx-lg-n3{margin-right:-16px!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-16px!important}.ml-lg-n3,.mx-lg-n3{margin-left:-16px!important}.m-lg-n4{margin:-24px!important}.mt-lg-n4,.my-lg-n4{margin-top:-24px!important}.mr-lg-n4,.mx-lg-n4{margin-right:-24px!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-24px!important}.ml-lg-n4,.mx-lg-n4{margin-left:-24px!important}.m-lg-n5{margin:-48px!important}.mt-lg-n5,.my-lg-n5{margin-top:-48px!important}.mr-lg-n5,.mx-lg-n5{margin-right:-48px!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-48px!important}.ml-lg-n5,.mx-lg-n5{margin-left:-48px!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:4px!important}.mt-xl-1,.my-xl-1{margin-top:4px!important}.mr-xl-1,.mx-xl-1{margin-right:4px!important}.mb-xl-1,.my-xl-1{margin-bottom:4px!important}.ml-xl-1,.mx-xl-1{margin-left:4px!important}.m-xl-2{margin:8px!important}.mt-xl-2,.my-xl-2{margin-top:8px!important}.mr-xl-2,.mx-xl-2{margin-right:8px!important}.mb-xl-2,.my-xl-2{margin-bottom:8px!important}.ml-xl-2,.mx-xl-2{margin-left:8px!important}.m-xl-3{margin:16px!important}.mt-xl-3,.my-xl-3{margin-top:16px!important}.mr-xl-3,.mx-xl-3{margin-right:16px!important}.mb-xl-3,.my-xl-3{margin-bottom:16px!important}.ml-xl-3,.mx-xl-3{margin-left:16px!important}.m-xl-4{margin:24px!important}.mt-xl-4,.my-xl-4{margin-top:24px!important}.mr-xl-4,.mx-xl-4{margin-right:24px!important}.mb-xl-4,.my-xl-4{margin-bottom:24px!important}.ml-xl-4,.mx-xl-4{margin-left:24px!important}.m-xl-5{margin:48px!important}.mt-xl-5,.my-xl-5{margin-top:48px!important}.mr-xl-5,.mx-xl-5{margin-right:48px!important}.mb-xl-5,.my-xl-5{margin-bottom:48px!important}.ml-xl-5,.mx-xl-5{margin-left:48px!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:4px!important}.pt-xl-1,.py-xl-1{padding-top:4px!important}.pr-xl-1,.px-xl-1{padding-right:4px!important}.pb-xl-1,.py-xl-1{padding-bottom:4px!important}.pl-xl-1,.px-xl-1{padding-left:4px!important}.p-xl-2{padding:8px!important}.pt-xl-2,.py-xl-2{padding-top:8px!important}.pr-xl-2,.px-xl-2{padding-right:8px!important}.pb-xl-2,.py-xl-2{padding-bottom:8px!important}.pl-xl-2,.px-xl-2{padding-left:8px!important}.p-xl-3{padding:16px!important}.pt-xl-3,.py-xl-3{padding-top:16px!important}.pr-xl-3,.px-xl-3{padding-right:16px!important}.pb-xl-3,.py-xl-3{padding-bottom:16px!important}.pl-xl-3,.px-xl-3{padding-left:16px!important}.p-xl-4{padding:24px!important}.pt-xl-4,.py-xl-4{padding-top:24px!important}.pr-xl-4,.px-xl-4{padding-right:24px!important}.pb-xl-4,.py-xl-4{padding-bottom:24px!important}.pl-xl-4,.px-xl-4{padding-left:24px!important}.p-xl-5{padding:48px!important}.pt-xl-5,.py-xl-5{padding-top:48px!important}.pr-xl-5,.px-xl-5{padding-right:48px!important}.pb-xl-5,.py-xl-5{padding-bottom:48px!important}.pl-xl-5,.px-xl-5{padding-left:48px!important}.m-xl-n1{margin:-4px!important}.mt-xl-n1,.my-xl-n1{margin-top:-4px!important}.mr-xl-n1,.mx-xl-n1{margin-right:-4px!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-4px!important}.ml-xl-n1,.mx-xl-n1{margin-left:-4px!important}.m-xl-n2{margin:-8px!important}.mt-xl-n2,.my-xl-n2{margin-top:-8px!important}.mr-xl-n2,.mx-xl-n2{margin-right:-8px!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-8px!important}.ml-xl-n2,.mx-xl-n2{margin-left:-8px!important}.m-xl-n3{margin:-16px!important}.mt-xl-n3,.my-xl-n3{margin-top:-16px!important}.mr-xl-n3,.mx-xl-n3{margin-right:-16px!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-16px!important}.ml-xl-n3,.mx-xl-n3{margin-left:-16px!important}.m-xl-n4{margin:-24px!important}.mt-xl-n4,.my-xl-n4{margin-top:-24px!important}.mr-xl-n4,.mx-xl-n4{margin-right:-24px!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-24px!important}.ml-xl-n4,.mx-xl-n4{margin-left:-24px!important}.m-xl-n5{margin:-48px!important}.mt-xl-n5,.my-xl-n5{margin-top:-48px!important}.mr-xl-n5,.mx-xl-n5{margin-right:-48px!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-48px!important}.ml-xl-n5,.mx-xl-n5{margin-left:-48px!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:Roboto Mono,monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#004d99!important}a.text-primary:focus,a.text-primary:hover{color:#004080!important}.text-secondary{color:#3d4955!important}a.text-secondary:focus,a.text-secondary:hover{color:#323c46!important}.text-success{color:#008053!important}a.text-success:focus,a.text-success:hover{color:#006642!important}.text-info{color:#717273!important}a.text-info:focus,a.text-info:hover{color:#646566!important}.text-warning{color:#a36200!important}a.text-warning:focus,a.text-warning:hover{color:#995c00!important}.text-danger{color:#e00929!important}a.text-danger:focus,a.text-danger:hover{color:#c70825!important}.text-light{color:#bdb4d8!important}a.text-light:focus,a.text-light:hover{color:#aea3d0!important}.text-dark{color:#050b12!important}a.text-dark:focus,a.text-dark:hover{color:#000!important}.text-100{color:#bbbdc1!important}a.text-100:focus,a.text-100:hover{color:#aeb0b5!important}.text-200{color:#a3a4a7!important}a.text-200:focus,a.text-200:hover{color:#96979a!important}.text-300{color:#8a8b8d!important}a.text-300:focus,a.text-300:hover{color:#7d7e80!important}.text-400{color:#717273!important}a.text-400:focus,a.text-400:hover{color:#646566!important}.text-500{color:#585859!important}a.text-500:focus,a.text-500:hover{color:#4b4c4c!important}.text-600{color:#3f3f40!important}a.text-600:focus,a.text-600:hover{color:#323233!important}.text-700{color:#262626!important}a.text-700:focus,a.text-700:hover{color:#191919!important}.text-800{color:#0c0c0d!important}.text-900,a.text-800:focus,a.text-800:hover,a.text-900:focus,a.text-900:hover{color:#000!important}.text-body{color:#19191a!important}.text-muted{color:#5a768a!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:hsla(0,0%,100%,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}body,html{font-size:16px;line-height:1.5}@media (min-width:576px){body,html{font-size:18px;line-height:1.555}}.h1,h1{letter-spacing:-1px}@media (min-width:576px){.h1,h1{font-size:2.666rem;letter-spacing:-1.3px;line-height:1.25}}.h2,h2{line-height:1.25}@media (min-width:576px){.h2,h2{font-size:2.222rem;line-height:1.2;letter-spacing:-2px}}.h3,h3{line-height:1.1428}@media (min-width:576px){.h3,h3{font-size:1.777rem;line-height:1.25}}.h4,h4{line-height:1.1666}@media (min-width:576px){.h4,h4{font-size:1.555rem;line-height:1.428;font-weight:600}}.h5,h5{font-weight:400}@media (min-width:576px){.h5,h5{font-size:1.333rem}}.h6,h6{font-weight:600;line-height:1.5}.display-1{font-size:49.776px;font-size:3.111rem}@media (min-width:576px){.display-1{font-size:3.111rem;line-height:1.428}}.blockquote,blockquote{font-family:Lora,Georgia,serif;margin:1.5rem 0}caption{font-size:12.432px;font-size:.777rem;line-height:1.4285}b,strong{font-weight:600}.small,small{font-size:15px;font-size:.9375rem;font-weight:400}@media (min-width:576px){.small,small{font-size:.8888rem}}.x-small{font-size:14px;font-size:.875rem;font-weight:400}@media (min-width:576px){.x-small{font-size:.7777rem}}.blockquote-footer{color:#656566}.bg-dark .blockquote-footer{color:#979899}.row.variable-gutters{margin-right:-6px;margin-left:-6px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:6px;padding-left:6px}@media (min-width:576px){.row.variable-gutters{margin-right:-6px;margin-left:-6px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:6px;padding-left:6px}}@media (min-width:768px){.row.variable-gutters{margin-right:-10px;margin-left:-10px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:10px;padding-left:10px}}@media (min-width:992px){.row.variable-gutters{margin-right:-10px;margin-left:-10px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:10px;padding-left:10px}}@media (min-width:1200px){.row.variable-gutters{margin-right:-14px;margin-left:-14px}.row.variable-gutters>.col,.row.variable-gutters>[class*=col-]{padding-right:14px;padding-left:14px}}.table td,.table th{text-align:left;border-bottom:1px solid #d6dce3;border-top:none}.breadcrumb-container .breadcrumb{padding:24px;border-radius:0}.breadcrumb-container .breadcrumb .breadcrumb-item{padding-left:0}.breadcrumb-container .breadcrumb .breadcrumb-item+.breadcrumb-item:before{display:none}.breadcrumb-container .breadcrumb .breadcrumb-item i{padding-right:.5em}.breadcrumb-container .breadcrumb .breadcrumb-item a{color:#5b6f82;font-weight:600}.breadcrumb-container .breadcrumb .breadcrumb-item.active a{font-weight:400;pointer-events:none}.breadcrumb-container .breadcrumb .breadcrumb-item span.separator{display:inline-block;font-weight:600;padding:0 .5em}.breadcrumb-container .breadcrumb.dark{background:#435a70}.breadcrumb-container .breadcrumb.dark .breadcrumb-item a,.breadcrumb-container .breadcrumb.dark .breadcrumb-item span.separator{color:#fff}.breadcrumb-container .breadcrumb.dark .breadcrumb-item i{color:#0bd9d2}.modal-content,.modal-header{border-radius:0}[data-toggle=collapse] .collapse-icon:before{content:"";display:inline-block;width:0;height:0;border-top:.5rem solid;border-right:.5rem solid transparent;border-bottom:0;border-left:.5rem solid transparent;vertical-align:3px;vertical-align:.1875rem}[data-toggle=collapse].collapsed .collapse-icon:before{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.collapse-div{border-bottom:1px solid #e3e4e6}.collapse-div .collapse-div{border:1px solid #e3e4e6;border-top:0}.collapse-header{position:relative}.collapse-header [data-toggle=collapse]{width:100%;text-align:left;border:0;background-color:transparent;border-top:1px solid #e3e4e6;padding:14px 24px;cursor:pointer;color:#5c6f82;font-weight:600}.collapse-header [data-toggle=collapse][aria-expanded=false]{color:#0073e6}.collapse-header [data-toggle=collapse][aria-expanded=false]:after{content:"\e818"}.collapse-header [data-toggle=collapse][aria-expanded=true]:before{height:2px;width:56px;border-radius:2px;background-color:#0073e6;position:absolute;top:0;display:block;content:"";left:20px}.collapse-header [data-toggle=collapse][aria-expanded=false]:hover:after,.collapse-header [data-toggle=collapse][aria-expanded=true]:hover:after{text-decoration:none}.collapse-header [data-toggle=collapse]:after{content:"\e810";font-family:italia-icon-font;font-style:normal;font-weight:400;float:right;text-decoration:inherit;width:1em;margin-right:.2em;margin-top:5px;text-align:center;font-variant:normal;text-transform:none;line-height:1em}.collapse-header [data-toggle=collapse]:hover{background-color:#e6ecf2;text-decoration:underline}.collapse-header [data-toggle=collapse]:active{background-color:#0073e6;color:#fff;border-color:#0073e6}.collapse-body{padding:12px 24px 42px}.collapse-body .collapse-header button[aria-expanded=true]:before{height:0;width:0}.carousel{background-color:#444e57;padding:3.5em 3em 3em}.carousel-control-next,.carousel-control-prev{top:1em;-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.carousel-control-prev{left:auto;right:6em}.carousel-control-next{right:3em}.carousel-caption{position:static;padding-bottom:0}.carousel-indicators li{background-color:rgba(101,220,223,.5)}.carousel-indicators .active{background-color:#5c6f82}.list-group-item{padding:1rem}.list-group-item.disabled,.list-group-item:disabled{cursor:default}.list-group-item-action:focus,.list-group-item-action:hover{text-decoration:underline;background-color:#d9e6f2}.list-group-item-action.disabled:focus,.list-group-item-action.disabled:hover,.list-group-item-action:disabled:focus,.list-group-item-action:disabled:hover{text-decoration:none;background-color:transparent;border-top-color:transparent}.list-group-item.active:focus,.list-group-item.active:hover{background-color:#0073e6}.alert{position:relative;margin-bottom:1rem;border:1px solid #b1b1b3;padding:1rem 1rem 1rem 4em}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3.5rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.8rem 1rem;color:inherit}.alert-success{border-left:8px solid #00cc85}.alert-info,.alert-success{background-position:1em .8em;background-repeat:no-repeat}.alert-info{border-left:8px solid #979899}.alert-warning{border-left:8px solid #f90}.alert-danger,.alert-warning{background-position:1em .8em;background-repeat:no-repeat}.alert-danger{border-left:8px solid #f73e5a;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M16 1.6C24 1.6 30.4 8 30.4 16S24 30.4 16 30.4 1.6 24 1.6 16 8 1.6 16 1.6zM16 0C7.2 0 0 7.2 0 16s7.2 16 16 16 16-7.2 16-16S24.8 0 16 0z'/%3E%3Cpath d='M14.4 24c0-.96.64-1.6 1.6-1.6s1.6.64 1.6 1.6c0 .96-.64 1.6-1.6 1.6s-1.6-.64-1.6-1.6zm.64-3.2l-.32-14.4h2.56l-.32 14.4z'/%3E%3C/svg%3E")}.alert-warning{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M14.333 26c0-1 .667-1.667 1.667-1.667S17.667 25 17.667 26 17 27.667 16 27.667 14.333 27 14.333 26zM15 22.667l-.333-15h2.667l-.333 15z'/%3E%3Cpath d='M16 2.667c1 0 2 .5 2.5 1.333l10.333 20.833c.5.833.5 2 0 2.833s-1.5 1.5-2.5 1.5H5.666c-1 0-2-.5-2.5-1.5-.5-.833-.5-2 0-2.833L13.499 4c.5-.833 1.5-1.333 2.5-1.333zM16 1c-1.5 0-3 .833-4 2.333L1.667 24.166c-1.667 3 .5 6.833 4 6.833h20.667c3.5 0 5.667-3.833 4-6.833L20.001 3.333c-1-1.667-2.5-2.333-4-2.333z'/%3E%3C/svg%3E")}.alert-success{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M32 6.682l-2.824-2.635-18.447 18.635-8.094-8.094L0 17.412l8.094 7.906h-.188l2.824 2.635 2.635-2.635z'/%3E%3C/svg%3E")}.alert-info{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cpath d='M16 1.6C24 1.6 30.4 8 30.4 16S24 30.4 16 30.4 1.6 24 1.6 16 8.16 1.6 16 1.6zM16 0C7.2 0 0 7.2 0 16s7.2 16 16 16 16-7.2 16-16S24.8 0 16 0z'/%3E%3Cpath d='M14.72 9.76V6.72h2.88v3.04h-2.88zm0 15.84V12h2.88v13.6h-2.88z'/%3E%3C/svg%3E")}.btn{padding:12px 24px;font-size:16px;white-space:normal}.btn-group-lg>.btn,.btn-group-sm>.btn,.btn-lg,.btn-sm,.btn-xs{border-radius:4px;line-height:1.5}.btn-xs{padding:8px;font-size:14px;line-height:1.428}.btn-group-sm>.btn,.btn-sm{padding:10px 20px;font-size:14px;line-height:1.428}.btn-group-lg>.btn,.btn-lg{padding:14px 28px;font-size:18px;line-height:1.556}.btn-block{border-radius:0}.btn-primary.disabled,.btn-primary:disabled{color:#bfc2c9;background-color:#e6e9f2;border-color:#dfe4f2}.btn-outline-secondary{background:#fcfdff;-webkit-box-shadow:inset 0 0 0 1px #e6e9f2;box-shadow:inset 0 0 0 1px #e6e9f2}.btn-outline-secondary:hover{-webkit-box-shadow:inset 0 0 0 1px #c9cedc;box-shadow:inset 0 0 0 1px #c9cedc}.bg-dark .btn-link{color:#fff}.bg-dark .btn-primary{color:#19191a;background-color:#fff;border-color:#0073e6;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);color:#0073e6}.bg-dark .btn-primary:hover{color:#19191a;background-color:#fff;border-color:#0059b3}.bg-dark .btn-primary.focus,.bg-dark .btn-primary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem rgba(0,115,230,.5)}.bg-dark .btn-primary.disabled,.bg-dark .btn-primary:disabled{color:#19191a;background-color:#fff;border-color:#0073e6}.bg-dark .btn-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-primary.dropdown-toggle{color:#19191a;background-color:#fff;border-color:#0053a6}.bg-dark .btn-primary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-primary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem rgba(0,115,230,.5)}.bg-dark .btn-primary.disabled,.bg-dark .btn-primary:disabled,.bg-dark .btn-primary:hover{color:#0059b3}.bg-dark .btn-outline-primary{color:#fff;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff}.bg-dark .btn-outline-primary:hover{color:#e6e6e6;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-primary.focus,.bg-dark .btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary.disabled,.bg-dark .btn-outline-primary:disabled{color:#fff;background-color:transparent}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-primary.dropdown-toggle{color:#e6e6e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-outline-primary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary:hover{-webkit-box-shadow:inset 0 0 0 2px #e6e6e6;box-shadow:inset 0 0 0 2px #e6e6e6}.bg-dark .btn-outline-primary.focus,.bg-dark .btn-outline-primary:focus{-webkit-box-shadow:inset 0 0 0 2px #fff,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 2px #fff,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-primary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-primary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-primary.dropdown-toggle{-webkit-box-shadow:inset 0 0 0 2px #fff;box-shadow:inset 0 0 0 2px #fff}.bg-dark .btn-secondary{background-color:#0073e6;border-color:#fff;-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075);color:#fff}.bg-dark .btn-secondary:hover{color:#fff;background-color:#0d86ff;border-color:#e6e6e6}.bg-dark .btn-secondary.focus,.bg-dark .btn-secondary:focus{-webkit-box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 1px 0 hsla(0,0%,100%,.15),0 1px 1px rgba(0,0,0,.075),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-secondary.disabled,.bg-dark .btn-secondary:disabled{color:#fff;background-color:#0073e6;border-color:#fff}.bg-dark .btn-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-secondary.dropdown-toggle{color:#fff;background-color:#1a8cff;border-color:#dfdfdf}.bg-dark .btn-secondary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary{color:#fff;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #fff;box-shadow:inset 0 0 0 1px #fff;-webkit-box-shadow:none;box-shadow:none}.bg-dark .btn-outline-secondary:hover{color:#e6e6e6;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-secondary.focus,.bg-dark .btn-outline-secondary:focus{-webkit-box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 0 0 1px #e6e6e6,0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary.disabled,.bg-dark .btn-outline-secondary:disabled{color:#fff;background-color:transparent}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-secondary.dropdown-toggle{color:#e6e6e6;background-color:transparent;background-image:none;-webkit-box-shadow:inset 0 0 0 1px #e6e6e6;box-shadow:inset 0 0 0 1px #e6e6e6}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.bg-dark .btn-outline-secondary.dropdown-toggle:focus{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:inset 0 3px 5px rgba(0,0,0,.125),0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary:hover{-webkit-box-shadow:none;box-shadow:none}.bg-dark .btn-outline-secondary.focus,.bg-dark .btn-outline-secondary:focus{-webkit-box-shadow:0 0 0 .2rem hsla(0,0%,100%,.5);box-shadow:0 0 0 .2rem hsla(0,0%,100%,.5)}.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled).active,.bg-dark .btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.bg-dark .btn-outline-secondary.dropdown-toggle{-webkit-box-shadow:none;box-shadow:none}.form-group{position:relative;margin-bottom:4px;padding:1.5rem 0 1rem}.form-group button,.form-group input,.form-group optgroup,.form-group select,.form-group textarea{color:#17324d}.form-group label{position:absolute;color:#5c6f82;font-weight:600;line-height:40px;line-height:2.5rem;-webkit-transition:.2s ease-out;transition:.2s ease-out;top:24px;top:1.5rem;font-size:16px;font-size:1rem;cursor:text;display:block;width:100%;padding:0 .75rem;z-index:6}.form-group small.form-text{position:absolute;margin:0;padding:0 .75rem;font-size:12.432px;font-size:.777rem}.form-group.active label{-webkit-transform:translateY(-75%);transform:translateY(-75%);font-size:12.432px;font-size:.777rem}.form-group.active .ico-prefix,.form-group.active label{color:#5c6f82}.form-row .form-group{padding-bottom:0}input[type=date],input[type=datetime-local],input[type=email],input[type=number],input[type=password],input[type=search],input[type=tel],input[type=text],input[type=time],input[type=url],select,textarea{border:none;border-bottom:1px solid #5c6f82;border-radius:0;outline:0;height:40px;height:2.5rem;width:100%;-webkit-box-shadow:none;box-shadow:none;-webkit-transition:all .3s;transition:all .3s;font-weight:700}select,textarea{border:1px solid #5c6f82}input[type=file]+label{background-color:transparent}.form-control-plaintext+label,.form-group input.form-control-file+label,.form-group label.active,.form-group select.form-control+label,.input-group+label,.input-group~label,:disabled .form-group label{-webkit-transform:translateY(-75%);transform:translateY(-75%);font-size:12.432px;font-size:.777rem;background:transparent}:disabled .form-group label{top:0}.form-group.active .form-file-name{padding-bottom:1.95rem}.form-control-plaintext{padding:.375rem .75rem;background-color:#fff}.form-control:active,.form-control:focus{-webkit-box-shadow:none!important;box-shadow:none!important}.custom-select.is-valid,.form-control.is-valid,.was-validated .custom-select:valid,.was-validated .form-control:valid{background-position:100%!important;background-repeat:no-repeat!important;background-size:45px 45%!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%2300cc85' viewBox='0 0 192 512'%3E%3Cpath d='M435.848 83.466L172.804 346.51l-96.652-96.652c-4.686-4.686-12.284-4.686-16.971 0l-28.284 28.284c-4.686 4.686-4.686 12.284 0 16.971l133.421 133.421c4.686 4.686 12.284 4.686 16.971 0l299.813-299.813c4.686-4.686 4.686-12.284 0-16.971l-28.284-28.284c-4.686-4.686-12.284-4.686-16.97 0z'/%3E%3C/svg%3E")}.custom-select.is-invalid,.form-control.is-invalid,.was-validated .custom-select:invalid,.was-validated .form-control:invalid{background-position:100%!important;background-repeat:no-repeat!important;background-size:45px 45%!important;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f73e5a' viewBox='0 0 384 512'%3E%3Cpath d='M231.6 256l130.1-130.1c4.7-4.7 4.7-12.3 0-17l-22.6-22.6c-4.7-4.7-12.3-4.7-17 0L192 216.4 61.9 86.3c-4.7-4.7-12.3-4.7-17 0l-22.6 22.6c-4.7 4.7-4.7 12.3 0 17L152.4 256 22.3 386.1c-4.7 4.7-4.7 12.3 0 17l22.6 22.6c4.7 4.7 12.3 4.7 17 0L192 295.6l130.1 130.1c4.7 4.7 12.3 4.7 17 0l22.6-22.6c4.7-4.7 4.7-12.3 0-17L231.6 256z'/%3E%3C/svg%3E")}.custom-select.warning,.form-control.warning{background-position:100%!important;background-repeat:no-repeat!important;background-size:25px 45%!important;border-color:#f90;background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%23f90' viewBox='0 0 192 512'%3E%3Cpath d='M176 432c0 44.112-35.888 80-80 80s-80-35.888-80-80 35.888-80 80-80 80 35.888 80 80zM25.26 25.199l13.6 272C39.499 309.972 50.041 320 62.83 320h66.34c12.789 0 23.331-10.028 23.97-22.801l13.6-272C167.425 11.49 156.496 0 142.77 0H49.23C35.504 0 24.575 11.49 25.26 25.199z'/%3E%3C/svg%3E")}.custom-select.is-valid~.warning-feedback,.form-control.is-valid~.warning-feedback{display:block}.warning-feedback{display:none;width:100%;margin-top:.25rem;font-size:12.432px;font-size:.777rem;color:#f90}.invalid-feedback,.valid-feedback,.warning-feedback{margin-left:.75rem}.form-file input[type=file]{filter:alpha(opacity=0);margin:0;max-width:100%;opacity:0}.form-file .form-file-name{border-bottom:1px solid rgba(0,0,0,.15);border-radius:0;color:#464a4c;left:0;overflow:hidden;padding:.5rem .6rem 2rem;max-height:32px;max-height:2rem;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;z-index:5}.form-file .form-file-name,.form-file .form-file-name:before{background-color:#fff;line-height:1.7;position:absolute;right:0;top:0}.form-file .form-file-name:before{bottom:-1px;color:#0073e6;content:"Sfoglia";display:block;height:40px;height:2.5rem;padding:.4rem 1rem 1.5rem;border:1px solid #0073e6;z-index:6;border-top-right-radius:4px}.input-group-text{background-color:#f8f8f8;border:0;border-radius:0!important;border-bottom:1px solid #555}.input-group-prepend{margin-right:0}.input-group-append{margin-left:0}.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:0 1rem;border-radius:0}.ico-prefix{position:absolute;width:48px;width:3rem;font-size:28.8px;font-size:1.8rem;z-index:10;text-align:center}.ico-prefix~.form-file-name{padding-left:3.5rem}.ico-prefix~.select-wrapper .select-dropdown,.ico-prefix~input,.ico-prefix~label,.ico-prefix~textarea{padding-left:3rem}.form-group.active .ico-prefix~label,.ico-prefix~.custom-select~label,.ico-prefix~label.active{padding-left:.75rem}.form-group .form-check,.form-row .form-check,.row .form-check{padding-left:0;margin-top:1rem}.form-check [type=checkbox],.form-check [type=radio]{position:absolute;left:-9999px}.form-check [type=checkbox]+label,.form-check [type=radio]+label{position:relative;padding-left:36px;cursor:pointer;display:inline-block;height:32px;line-height:32px;font-size:16px;font-size:1rem;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.form-check [type=checkbox]+label:after,.form-check [type=checkbox]+label:before{content:"";left:0;position:absolute;-webkit-transition:.2s;transition:.2s;z-index:1;border-style:solid;border-width:2px}.form-check [type=checkbox]+label:before{top:0;width:17px;height:17px;border:1px solid #e6e9f2;border-radius:1px;margin:2px 5px;-webkit-transform:rotate(37deg);transform:rotate(37deg);-webkit-transform-origin:100% 100%;transform-origin:100% 100%}.form-check [type=checkbox]+label:after{border-radius:4px;height:20px;width:20px;margin:6px 5px;top:0}.form-check [type=checkbox]:checked+label:before{top:6px;left:1px;width:8px;height:13px;border-color:transparent #fff #fff transparent;border-style:solid;border-width:2px;-webkit-transform:rotate(40deg);transform:rotate(40deg);-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-transform-origin:100% 100%;transform-origin:100% 100%;opacity:.8}.form-check [type=checkbox]:checked+label:after{border-color:#0073e6;background-color:#0073e6;z-index:0}.form-check [type=checkbox]:not(:checked)+label:after{background-color:transparent;border-color:#5c6f82;z-index:0}.form-check [type=checkbox]:not(:checked)+label:before{width:0;height:0;border-color:transparent;left:6px;top:10px}.form-check [type=checkbox]:disabled+label{cursor:not-allowed}.form-check [type=checkbox]:disabled:not(:checked)+label:after{border-color:#e6e9f2;background-color:#fff}.form-check [type=checkbox]:disabled:checked+label:after{background-color:#e6e9f2;border-color:#e6e9f2}.form-check [type=radio]+label{-webkit-transition:.2s ease;transition:.2s ease}.form-check [type=radio]+label:after,.form-check [type=radio]+label:before{content:"";position:absolute;left:0;top:0;margin:5px;width:22px;height:22px;z-index:0;border-radius:50%;border-style:solid;border-width:2px;-webkit-transition:.2s ease;transition:.2s ease}.form-check [type=radio]:not(:checked)+label:after,.form-check [type=radio]:not(:checked)+label:before{border-color:#5c6f82}.form-check [type=radio]:not(:checked)+label:after{z-index:-1;-webkit-transform:scale(0);transform:scale(0)}.form-check [type=radio]:checked+label:after{border-color:#0073e6;background-color:#0073e6;z-index:0;-webkit-transform:scale(.64);transform:scale(.64)}.form-check [type=radio]:checked+label:before{border-color:#0073e6}.form-check [type=radio]:disabled+label{cursor:not-allowed}.form-check [type=radio]:disabled:not(:checked)+label:after,.form-check [type=radio]:disabled:not(:checked)+label:before{border-color:#e6e9f2}.form-check [type=radio]:disabled:checked+label:after{border-color:#e6e9f2;background-color:#e6e9f2}.form-check [type=radio]:disabled:checked+label:before{border-color:#e6e9f2}.form-check.form-check-group{padding:0 0 8px;margin-bottom:16px;-webkit-box-shadow:inset 0 -1px 0 0 rgba(1,1,1,.1);box-shadow:inset 0 -1px 0 0 rgba(1,1,1,.1)}.form-check.form-check-group [type=checkbox]+label,.form-check.form-check-group [type=radio]+label{position:static;padding-left:8px;padding-right:52px}.form-check.form-check-group [type=checkbox]+label:after,.form-check.form-check-group [type=checkbox]+label:before,.form-check.form-check-group [type=radio]+label:after,.form-check.form-check-group [type=radio]+label:before{right:15px;left:auto}.form-check.form-check-group [type=checkbox]:checked+label:before{right:26px}.form-check.form-check-group [type=radio]:checked+label:before{right:15px}.form-check.form-check-group .form-text{opacity:.6;margin:0;padding-left:8px;padding-right:52px}.toggles,.toggles *{-webkit-appearance:none;-moz-appearance:none;appearance:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.toggles label{cursor:pointer;width:100%;margin:0 8px 8px;height:32px;line-height:32px;font-weight:700}.toggles label input[type=checkbox]{opacity:0;width:0;height:0}.toggles label input[type=checkbox]+.lever{content:"";position:relative;width:46px;height:16px;background-color:#e6e9f2;border-radius:10px;-webkit-transition:background .3s ease;transition:background .3s ease;vertical-align:middle;float:right;margin:8px 16px 0}.toggles label input[type=checkbox]+.lever:after,.toggles label input[type=checkbox]+.lever:before{content:"";position:absolute;display:inline-block;width:26px;height:26px;border-radius:50%;left:0;top:-5px;left:-3px;-webkit-transition:left .3s ease,background .1s ease,-webkit-transform .1s ease;transition:left .3s ease,background .1s ease,-webkit-transform .1s ease;transition:left .3s ease,background .1s ease,transform .1s ease;transition:left .3s ease,background .1s ease,transform .1s ease,-webkit-transform .1s ease}.toggles label input[type=checkbox]+.lever:before{background-color:rgba(0,115,230,.15)}.toggles label input[type=checkbox]+.lever:after{background-color:#5c6f82;background-size:10px 10px;background-repeat:no-repeat;background-position:50%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='10' height='10' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M6.364 4.95l3.535 3.535L8.485 9.9 4.95 6.364 1.414 9.899 0 8.485 3.536 4.95 0 1.414 1.414 0 4.95 3.536 8.485 0 9.9 1.414 6.364 4.95z' fill='%23FFF' fill-rule='evenodd' opacity='.8'/%3E%3C/svg%3E");border:2px solid #fff}.toggles label input[type=checkbox]:checked+.lever{background-color:#e6e9f2}.toggles label input[type=checkbox]:checked+.lever:after,.toggles label input[type=checkbox]:checked+.lever:before{left:23px}.toggles label input[type=checkbox]:checked+.lever:after{background-color:#0073e6;background-size:14px 14px;background-repeat:no-repeat;background-position:50%;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg width='14' height='11' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4.879 7.536l7.07-7.072 1.415 1.415-7.071 7.07-1.414 1.415L.636 6.121 2.05 4.707 4.88 7.536z' fill='%23FFF' fill-rule='evenodd' opacity='.5'/%3E%3C/svg%3E")}.toggles label input[type=checkbox][disabled]+.lever{cursor:default;background-color:#e6e9f2}.toggles label input[type=checkbox][disabled]+.lever:after,.toggles label input[type=checkbox][disabled]:checked+.lever:after{background-color:#e6e9f2}.select-wrapper{position:relative}.select-wrapper .search-wrap input{width:100%;border:none;border-bottom:1px solid #0073e6;font-size:14.4px;font-size:.9rem;padding:0 .5em}.select-wrapper .dropdown-menu{background-color:#fff;border-radius:0;-webkit-box-shadow:0 2px 4px 3px rgba(0,0,0,.1);box-shadow:0 2px 4px 3px rgba(0,0,0,.1);margin:0;display:none;min-width:100px;max-height:240px;overflow-y:auto;position:absolute;padding:.3rem;z-index:999;will-change:width,height;list-style-type:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:100%}.select-wrapper .dropdown-menu.show{display:block}.select-wrapper .dropdown-menu li{clear:both;color:#000;cursor:pointer;line-height:32px;width:100%;text-align:left;text-transform:none}.select-wrapper .dropdown-menu li.optgroup>span{color:#ccc;padding:0}.select-wrapper .dropdown-menu li:not(.disabled):focus,.select-wrapper .dropdown-menu li:not(.disabled):hover{background-color:#eee}.select-wrapper .dropdown-menu li.active>span:after{content:"";background-image:url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNDQ4LjggNDQ4LjgiPjxwYXRoIGZpbGw9IiMwMDZERjAiIGQ9Ik0xNDIuOCAzMjMuODVMMzUuNyAyMTYuNzUgMCAyNTIuNDVsMTQyLjggMTQyLjggMzA2LTMwNi0zNS43LTM1Ljd6Ii8+PC9zdmc+");background-size:16px 16px;background-repeat:no-repeat;background-position:50%;float:right;display:block;height:32px;width:16px;opacity:.5}.select-wrapper .dropdown-menu li>a,.select-wrapper .dropdown-menu li>span{font-size:14px;color:#5c6f82;font-weight:600;display:block;padding:0 .5rem}.select-wrapper .dropdown-menu li>a.filtrable label,.select-wrapper .dropdown-menu li>a [type=checkbox],.select-wrapper .dropdown-menu li>span.filtrable label,.select-wrapper .dropdown-menu li>span [type=checkbox]{display:none}.select-wrapper .dropdown-menu li.disabled>span{cursor:unset;color:#ccc}.select-wrapper .dropdown-menu li>a>i{height:inherit;line-height:inherit}.select-wrapper .select-dropdown{color:#17324d;border-bottom:1px solid #5c6f82;position:relative;cursor:pointer;background-color:transparent;outline:0;width:100%;font-size:16px;font-size:1rem;margin:0 0 15px;display:block;line-height:24px;padding:12px 38px 12px 16px}.select-wrapper .select-dropdown:disabled{color:rgba(0,0,0,.3);border-bottom-color:rgba(0,0,0,.3);cursor:default}.select-wrapper .select-dropdown ul{list-style-type:none;padding:0}.select-wrapper .select-dropdown ul li.disabled,.select-wrapper .select-dropdown ul li.disabled>span,.select-wrapper .select-dropdown ul li.optgroup{color:rgba(0,0,0,.3);background-color:transparent!important;cursor:context-menu}.select-wrapper .select-dropdown ul li.optgroup{border-top:1px solid #eee}.select-wrapper .select-dropdown ul li.optgroup.selected>span{color:rgba(0,0,0,.7)}.select-wrapper .select-dropdown ul li.optgroup>span{color:rgba(0,0,0,.4)}.select-wrapper .caret{color:#757575;position:absolute;right:12px;line-height:16px;top:calc(50% - 8px)}.select-wrapper .caret .disabled{color:rgba(0,0,0,.46)}.select-wrapper.show .select-dropdown{color:#0073e6;border-bottom:1px solid #0073e6}.select-wrapper.show .caret{color:#0073e6}.select-wrapper+label{padding:0 .75rem!important;position:absolute;top:-18px;font-size:12.8px;font-size:.8rem}.select-wrapper select.custom-select{display:none!important}.select-wrapper select:disabled{color:rgba(0,0,0,.3)}.btn-eye{background-position:50%!important;background-repeat:no-repeat!important;width:28px;height:22px;position:absolute;right:8px;right:.5rem;top:36px;top:2.25rem;z-index:10;color:#5c6f82;cursor:pointer}.eye-on{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 576 512'%3E%3Cpath d='M272.702 359.139c-80.483-9.011-136.212-86.886-116.93-167.042l116.93 167.042zM288 392c-102.556 0-192.092-54.701-240-136 21.755-36.917 52.1-68.342 88.344-91.658l-27.541-39.343C67.001 152.234 31.921 188.741 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.004 376.006 168.14 440 288 440a332.89 332.89 0 0 0 39.648-2.367l-32.021-45.744A284.16 284.16 0 0 1 288 392zm281.354-111.631c-33.232 56.394-83.421 101.742-143.554 129.492l48.116 68.74c3.801 5.429 2.48 12.912-2.949 16.712L450.23 509.83c-5.429 3.801-12.912 2.48-16.712-2.949L102.084 33.399c-3.801-5.429-2.48-12.912 2.949-16.712L125.77 2.17c5.429-3.801 12.912-2.48 16.712 2.949l55.526 79.325C226.612 76.343 256.808 72 288 72c119.86 0 224.996 63.994 281.354 159.631a48.002 48.002 0 0 1 0 48.738zM528 256c-44.157-74.933-123.677-127.27-216.162-135.007C302.042 131.078 296 144.83 296 160c0 30.928 25.072 56 56 56s56-25.072 56-56l-.001-.042c30.632 57.277 16.739 130.26-36.928 171.719l26.695 38.135C452.626 346.551 498.308 306.386 528 256z'/%3E%3C/svg%3E")}.eye-off{background:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='%235c6f82' viewBox='0 0 576 512'%3E%3Cpath d='M569.354 231.631C512.97 135.949 407.81 72 288 72 168.14 72 63.004 135.994 6.646 231.631a47.999 47.999 0 0 0 0 48.739C63.031 376.051 168.19 440 288 440c119.86 0 224.996-63.994 281.354-159.631a47.997 47.997 0 0 0 0-48.738zM288 392c-102.556 0-192.091-54.701-240-136 44.157-74.933 123.677-127.27 216.162-135.007C273.958 131.078 280 144.83 280 160c0 30.928-25.072 56-56 56s-56-25.072-56-56l.001-.042C157.794 179.043 152 200.844 152 224c0 75.111 60.889 136 136 136s136-60.889 136-136c0-31.031-10.4-59.629-27.895-82.515C451.704 164.638 498.009 205.106 528 256c-47.908 81.299-137.444 136-240 136z'/%3E%3C/svg%3E")}.psw-wrapper{padding:0 .75rem}.psw-meter{height:3px;max-width:180px}.psw-meter .col-3{height:3px}.psw-percent,.psw-text{font-size:12px;font-size:.75rem;display:block;padding:.25rem 0;font-weight:500}.psw-percent{margin-right:5px}@-webkit-keyframes dropdownFadeIn{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:16px}}@keyframes dropdownFadeIn{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:16px}}@-webkit-keyframes dropdownFadeInTop{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:-16px}}@keyframes dropdownFadeInTop{0%{opacity:0;margin-top:0}to{opacity:1;margin-top:-16px}}.btn-dropdown{color:#06c;padding:0 4px;background-color:transparent;font-size:16px;font-size:1rem;border-radius:0}.btn-dropdown:not(:disabled):not(.disabled):active{-webkit-box-shadow:none;box-shadow:none}.btn-dropdown:after{content:"";font-size:12.8px;font-size:.8rem;font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;border:none;display:inline-block;vertical-align:0;width:auto;height:auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.btn-dropdown[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.dropdown-menu{border-radius:0 0 4px 4px}.dropdown-menu.full-width{width:100%}.dropdown-menu.full-width .link-list li{display:inline-block;width:auto}.dropdown-menu.full-width .link-list li:focus,.dropdown-menu.full-width .link-list li:hover{background:none;text-decoration:underline}.dropdown-menu .link-list{margin-bottom:0}.dropdown-menu .link-list h3{line-height:2.3em;margin-bottom:0}.dropdown-menu:before{content:"";position:absolute;top:-6px;left:24px;width:18px;height:18px;border-radius:4px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg)}.dropdown-menu[x-placement=top-start]{border-radius:4px 4px 0 0}.dropdown-menu[x-placement=top-start]:before{bottom:-6px;top:auto}.dropdown-menu.dark{background-color:#435a70}.dropdown-menu.dark .link-list-wrapper ul span.divider{background:#2e465e}.dropdown-menu.dark .link-list-wrapper ul li a:hover span,.dropdown-menu.dark .link-list-wrapper ul li a span,.dropdown-menu.dark .link-list-wrapper ul li h3,.dropdown-menu.dark .link-list-wrapper ul li i{color:#fff}.dropdown-menu.dark .link-list-wrapper ul li a:not(.active):not(.disabled):hover i{color:#4fe0dc}.dropdown-menu.dark .link-list-wrapper ul li a.disabled span{color:#adb2b8}.dropdown-menu.dark:before{background-color:#435a70}nav.pagination-wrapper{display:-webkit-box;display:-ms-flexbox;display:flex}nav.pagination-wrapper,nav.pagination-wrapper.pagination-total{-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}nav.pagination-wrapper.pagination-total{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column}nav.pagination-wrapper.pagination-total ul{margin-bottom:.5rem}nav.pagination-wrapper.pagination-total p{font-size:14.222px;font-size:.8888888889rem;color:#5b6f82;margin-bottom:1rem;font-weight:600;text-align:center}nav.pagination-wrapper .form-group{margin-left:2.5rem;width:72px;width:4.5rem;margin-top:0}nav.pagination-wrapper .form-group label{font-size:14.222px;font-size:.8888888889rem;color:#9da2a6}nav.pagination-wrapper .form-group.active label{font-size:12.8px;font-size:.8rem}nav.pagination-wrapper .btn.dropdown-toggle{font-size:14.222px;font-size:.8888888889rem;color:#5b6f82;font-weight:600;padding:12px;height:40px;height:2.5rem;border:none;width:100%}nav.pagination-wrapper .btn.dropdown-toggle:after{color:#0073e6;margin-left:.5rem}.pagination{-ms-flex-wrap:wrap;flex-wrap:wrap}.pagination .page-item{margin-right:5px}.pagination .page-item.disabled a.page-link,.pagination .page-item.disabled a.page-link i[class^=it-]{color:#c2c7cc}.pagination .page-item span.page-link{pointer-events:none}.pagination .page-item .page-link{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:40px;height:2.5rem;min-width:40px;min-width:2.5rem;border-radius:4px;border:none;font-size:14.222px;font-size:.8888888889rem;font-weight:600;color:#5b6f82;background-color:transparent}.pagination .page-item .page-link[aria-current]{border:1px solid #06c;color:#06c;pointer-events:none}.pagination .page-item .page-link.text,.pagination .page-item .page-link i[class^=it-]{color:#0073e6}.pagination .page-item .page-link i[class^=it-]{font-size:11.2px;font-size:.7rem}.pagination .page-item .page-link span.d-inline-block{margin-right:.5rem}.pagination .page-item .page-link:hover{color:#06c;background-color:transparent}.pagination .page-item .page-link:hover i[class^=it-]{color:#06c}@media (min-width:576px){.pagination .page-item .page-link{height:2.6666666667rem;min-width:2.6666666667rem}nav.pagination-wrapper .btn.dropdown-toggle{height:2.6666666667rem}}@media (min-width:768px){nav.pagination-wrapper{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}nav.pagination-wrapper .dropdown{margin-left:2.6666666667rem}}@media (max-width:767.98px){.offcanvas-collapse{position:fixed;top:56px;bottom:0;left:1em;width:100%;overflow-y:auto;background-color:#323333;-webkit-transition:-webkit-transform .3s ease-in-out;transition:-webkit-transform .3s ease-in-out;transition:transform .3s ease-in-out;transition:transform .3s ease-in-out,-webkit-transform .3s ease-in-out;-webkit-transform:translateX(100%);transform:translateX(100%)}.offcanvas-collapse.open{-webkit-transform:translateX(-1rem);transform:translateX(-1rem)}}.nav-tabs{position:relative;background-color:#fff;border-bottom:0}.nav-tabs:after{content:"";position:absolute;z-index:-1;-webkit-box-shadow:0 0 2rem rgba(0,0,0,.15);box-shadow:0 0 2rem rgba(0,0,0,.15);bottom:0;left:10%;right:10%;width:80%;height:50%;border-radius:100%}.nav-tabs .nav-link{border-radius:0;font-weight:600;color:#5c6f82;border:none;border-bottom:2px solid transparent}.nav-tabs .nav-link.disabled{color:#b1b1b3;font-weight:400}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{border-bottom:2px solid #06c;color:#06c;cursor:inherit}.nav-tabs .nav-item{margin-bottom:0}.nav-tabs.nav-dark{background-color:#455b71}.nav-tabs.nav-dark .nav-link{color:#c7d1d0}.nav-tabs.nav-dark .nav-item.show .nav-link,.nav-tabs.nav-dark .nav-link.active{background-color:#455b71;color:#00fff7;border-bottom:2px solid #00fff7}.it-ico-sm{font-size:28px;font-size:1.75rem}.it-ico{font-size:20px;font-size:1.25rem}.it-ico-lg{font-size:24px;font-size:1.5rem}.cookiebar{bottom:0;left:0;right:0;display:none;position:fixed;width:100%;z-index:1100}.cookiebar.cookiebar-top{bottom:auto;top:0}.cookiebar.show{display:block}.hero{padding:1rem;margin-bottom:1rem;background-color:#cacacc;border-radius:0}@media (min-width:576px){.hero{padding:1rem}}.hero .hero-heading{font-size:32px;font-size:2rem;font-weight:700;color:#00264d;margin-bottom:.8rem}.hero-fluid{padding-right:0;padding-left:0;border-radius:0}.forward{display:block;text-align:center;font-size:48px;font-size:3rem;-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.forward:hover{text-decoration:none}.return-to-top{position:fixed;bottom:16px;right:16px;background:#0073e6;background:rgba(0,115,230,.7);width:48px;height:48px;display:block;text-decoration:none;border-radius:50%;display:none;text-align:center;z-index:1}.return-to-top,.return-to-top i{-webkit-transition:all .2s ease-in-out;transition:all .2s ease-in-out}.return-to-top i{color:#fff;margin:0;position:relative;top:8px;font-size:20px}.return-to-top i:before{margin:0}.return-to-top:hover{background:rgba(0,115,230,.9);text-decoration:none}.return-to-top:hover i{color:#fff;top:4px}.autocomplete-clear{visibility:hidden;position:absolute;z-index:2;right:4px;right:.25rem;top:8px;top:.5rem;background:transparent;border:none;cursor:pointer}.autocomplete-clear svg{fill:#a6a6a6}.autocomplete-wrap{position:absolute;left:0;right:0;background:#fff;-webkit-box-shadow:0 2px 5px rgba(0,0,0,.25);box-shadow:0 2px 5px rgba(0,0,0,.25);z-index:100;max-height:240px;overflow-y:auto;padding-left:0;list-style-type:none}.autocomplete-wrap li{cursor:pointer;padding:12px 16px;font-size:14px;font-size:.875rem}.autocomplete-wrap li:hover{background:#eee}.link-list-wrapper ul{padding:0;list-style-type:none}.link-list-wrapper ul.link-sublist{padding-left:24px}.link-list-wrapper ul li a{font-size:.889em;line-height:2.3em;display:block;padding:0 24px;position:relative}.link-list-wrapper ul li a:hover:not(.disabled){text-decoration:none}.link-list-wrapper ul li a:hover:not(.disabled) span{color:#06c;text-decoration:underline}.link-list-wrapper ul li a:hover:not(.disabled) p{color:#06c;text-decoration:none}.link-list-wrapper ul li a.disabled:hover{text-decoration:none}.link-list-wrapper ul li a.medium{font-weight:600}.link-list-wrapper ul li a span{color:#06c;display:block;margin-right:24px}.link-list-wrapper ul li a.right-icon i.right{position:absolute;top:0;right:24px;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.link-list-wrapper ul li a.right-icon i.right.secondary{color:#9da2a6}.link-list-wrapper ul li a.right-icon[aria-expanded=true] i.right{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.link-list-wrapper ul li a.active span{color:#17324d;text-decoration:underline}.link-list-wrapper ul li a.disabled{cursor:not-allowed}.link-list-wrapper ul li a.disabled.left-icon i,.link-list-wrapper ul li a.disabled.left-icon i.secondary,.link-list-wrapper ul li a.disabled.right-icon i,.link-list-wrapper ul li a.disabled.right-icon i.secondary,.link-list-wrapper ul li a.disabled span{color:#adb2b8}.link-list-wrapper ul li a.left-icon{display:-webkit-box;display:-ms-flexbox;display:flex}.link-list-wrapper ul li a.left-icon i.left{margin-right:8px}.link-list-wrapper ul li a.large{font-size:1em}.link-list-wrapper ul li a p{font-size:.778em;line-height:normal;color:#5b6f82}.link-list-wrapper ul li a.avatar{display:-webkit-box;display:-ms-flexbox;display:flex;margin-bottom:8px}.link-list-wrapper ul li a.avatar .avatar{display:block;border-radius:50px;margin-right:8px}.link-list-wrapper ul li h3{font-size:1em;color:#17324d;padding:0 24px}.link-list-wrapper ul li h3 a{line-height:inherit;font-size:1em;padding:0}.link-list-wrapper ul .divider{display:block;height:1px;background:#ebeced;margin:8px 0}.link-list-wrapper ul .toggles label{padding:0 24px;font-size:.889em;line-height:2.3em;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between;height:auto;font-weight:inherit;margin:0}.link-list-wrapper ul .toggles input[type=checkbox]+.lever{margin:8px 0 0}.link-list-wrapper ul .form-check.form-check-group{padding:0 24px;-webkit-box-shadow:none;box-shadow:none}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label{padding-left:0;font-size:.889em;line-height:2.3em;height:inherit;margin-bottom:0}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label:after{right:24px}.link-list-wrapper ul .form-check.form-check-group [type=checkbox]+label:before{right:35px}.link-list-wrapper ul .form-check.form-check-group [type=checkbox][disabled]+label{color:#adb2b8}@media (min-width:576px){.link-list-wrapper ul li a.large{font-size:1em;line-height:2.7em}}@media (min-width:768px){.link-list-wrapper ul li a.large{line-height:2.7em}}@-webkit-keyframes megamenuFadeIn{0%{opacity:0;margin-top:16px}to{opacity:1;margin-top:16px}}@keyframes megamenuFadeIn{0%{opacity:0;margin-top:16px}to{opacity:1;margin-top:16px}}.navbar{background:#06c}.navbar .navbar-collapsable{position:fixed;top:0;right:0;left:0;bottom:0;z-index:10;background:rgba(0,0,0,.6);display:none}.navbar .navbar-collapsable .menu-wrapper{background:#06c;position:absolute;top:0;bottom:0;right:0;left:48px;pointer-events:all;overflow-y:auto;-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:all .3s;transition:all .3s}.navbar .navbar-collapsable .navbar-nav{margin-top:102px;padding:24px 0}.navbar .navbar-collapsable .navbar-nav li a.nav-link{color:#fff;font-weight:400;padding:12px 24px;position:relative}.navbar .navbar-collapsable .navbar-nav li a.nav-link.active{border-left:2px solid #fff}.navbar .navbar-collapsable.expanded .close-div,.navbar .navbar-collapsable.expanded .menu-wrapper{-webkit-transform:translateX(0);transform:translateX(0)}.navbar .close-div{-webkit-transform:translateX(100%);transform:translateX(100%);padding:24px;position:fixed;left:48px;right:0;top:0;background:#06c;z-index:10;-webkit-transition:all .3s;transition:all .3s}.navbar .close-div .close-menu{background:transparent;color:#fff;text-align:center;font-size:.75em;text-transform:uppercase;padding:0}.navbar .close-div .close-menu span{display:block;text-align:center;font-size:2em}.navbar .close-div .close-menu span:before{margin-right:0}.navbar .dropdown-menu{background:transparent;-webkit-box-shadow:none;box-shadow:none}.navbar .dropdown-menu:before{display:none}.navbar .dropdown-menu .link-list-wrapper{padding-left:24px;padding-right:24px}.navbar .dropdown-menu .link-list-wrapper ul li a h3,.navbar .dropdown-menu .link-list-wrapper ul li a span,.navbar .dropdown-menu .link-list-wrapper ul li h3{color:#fff}.navbar .dropdown-toggle{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.navbar .dropdown-toggle:after{font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:auto;height:auto;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;content:"\e818";vertical-align:auto;border:none;border-bottom:0;font-size:.8em;line-height:2em;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:all .3s;transition:all .3s}.navbar .dropdown-toggle[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.custom-navbar-toggler{background:none;border:none}.custom-navbar-toggler span{color:#fff;font-size:1.625em}.inline-menu .link-list-wrapper .link-list,.inline-menu .link-list-wrapper .link-list li a{position:relative}.inline-menu .link-list-wrapper .link-list li a i{color:#6aaaeb}.inline-menu .link-list-wrapper .link-list li a:after{content:"";display:block;width:2px;background:#06c;position:absolute;right:0;top:0;height:100%;-webkit-transform-origin:center;transform-origin:center;-webkit-transform:scaleY(0);transform:scaleY(0);-webkit-transition:all .3s;transition:all .3s;z-index:1}.inline-menu .link-list-wrapper .link-list li a.active span{color:#06c;text-decoration:none}.inline-menu .link-list-wrapper .link-list li a[aria-expanded=true]:after{-webkit-transform:scaleY(1);transform:scaleY(1)}.inline-menu .link-list-wrapper .link-list:after{content:"";display:block;width:2px;background:-webkit-gradient(linear,left top,left bottom,from(#e6ecf2),to(rgba(230,236,242,.3)));background:linear-gradient(180deg,#e6ecf2 0,rgba(230,236,242,.3));position:absolute;right:0;top:0;height:100%}@media (min-width:992px){.navbar{background:#06c;padding:0}.navbar .navbar-collapsable{position:relative;z-index:auto;background:none;display:block!important}.navbar .navbar-collapsable,.navbar .navbar-collapsable .menu-wrapper{top:auto;right:auto;left:auto;bottom:auto;-webkit-transition:none;transition:none}.navbar .navbar-collapsable .menu-wrapper{position:inherit;overflow-y:visible;-webkit-transform:none;transform:none}.navbar .navbar-collapsable .navbar-nav{margin-top:0;padding:0 24px}.navbar .navbar-collapsable .navbar-nav li a.nav-link{font-weight:400;padding:12px 24px}.navbar .navbar-collapsable .navbar-nav li a.nav-link.active{border-left:0;border-bottom:2px solid #fff}.navbar .navbar-collapsable .navbar-nav li a.nav-link.disabled{opacity:.5;cursor:not-allowed}.navbar .close-div{display:none}.navbar .dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#19191a;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:0 solid transparent;border-radius:4px;-webkit-box-shadow:0 0 30px 5px rgba(0,0,0,.05);box-shadow:0 0 30px 5px rgba(0,0,0,.05)}.navbar .dropdown-menu.show{-webkit-animation:dropdownFadeIn .3s forwards;animation:dropdownFadeIn .3s forwards;top:calc(100% - 16px)}.navbar .dropdown-menu:before{display:block}.navbar .dropdown-menu .link-list-wrapper{padding-left:0;padding-right:0}.navbar .dropdown-menu .link-list-wrapper ul li a h3,.navbar .dropdown-menu .link-list-wrapper ul li a span{color:#06c}.navbar .dropdown-menu .link-list-wrapper ul li h3{color:#19191a}.navbar .dropdown-toggle{display:block;-webkit-box-pack:inherit;-ms-flex-pack:inherit;justify-content:inherit}.navbar .dropdown-toggle:after{content:"";font-size:.8rem;font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;border:none;display:inline-block;vertical-align:0;width:auto;height:auto;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.navbar.megamenu .navbar-collapsable{width:100%}.navbar.megamenu .navbar-collapsable .nav-item{position:static}.navbar.megamenu .navbar-collapsable .nav-item a{position:relative}.navbar.megamenu .navbar-collapsable .nav-item a:before{content:"";position:absolute;top:auto;bottom:-12px;left:24px;width:18px;height:18px;border-radius:4px;background-color:#fff;-webkit-transform:rotate(45deg);transform:rotate(45deg);opacity:0;-webkit-transition:opacity .3s;transition:opacity .3s}.navbar.megamenu .navbar-collapsable .nav-item.show a:before{opacity:1}.navbar.megamenu .navbar-collapsable .dropdown-menu{min-width:auto;left:24px;right:24px}.navbar.megamenu .navbar-collapsable .dropdown-menu:before{display:none}.navbar.megamenu .navbar-collapsable .dropdown-menu.show{-webkit-animation:megamenuFadeIn .3s forwards;animation:megamenuFadeIn .3s forwards}.custom-navbar-toggler{display:none}}.skiplinks{background-color:#0bd9d2;text-align:center}.skiplinks a{display:inline-block;padding:.5rem;display:block;font-weight:600;color:#5b6f82;text-decoration:underline}.componente-base{background-color:#0073e6;color:#fff;cursor:pointer;padding:8px}.focus--keyboard,.form-check [type=checkbox]:focus+label,.toggles label input[type=checkbox]:focus+.lever{border-color:#f90;-webkit-box-shadow:0 0 6px 2px #f90;box-shadow:0 0 6px 2px #f90;outline:none}.focus--mouse,.form-check [type=checkbox]:focus.focus--mouse+label,.toggles label input[type=checkbox]:focus.focus--mouse+.lever{border-color:inherit;-webkit-box-shadow:none;box-shadow:none;outline:none}.bg-primary--dark{background-color:#06c}.bg-primary--mid-dark{background-color:#004e95}.bg-primary--darken{background-color:#002b4d}.text-grey{color:#ccc}.text-sans-serif{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.text-serif{font-family:Lora,serif}.text-light-blue{color:#e6f3fe}.text-blue{color:#0073e6}.border-dark-blue{border-color:#193e5e!important}.border-medium-blue{border-color:#06c!important}.border-grey-light{border-color:#eaebed!important}.border-width-2{border-width:2px!important}.stopScrolling--vertical{overflow-y:hidden}.deactive{display:none!important}@font-face{font-family:docs-icons;src:url(../font/docs.eot);src:url(../font/docs-italia.eot#iefix) format("embedded-opentype"),url(../font/docs-italia.ttf) format("truetype"),url(../font/docs-italia.woff) format("woff"),url(../font/docs-italia.svg#docs) format("svg");font-weight:400;font-style:normal}[class*=" docs-icon-"],[class^=docs-icon-]{font-family:docs-icons!important;speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;vertical-align:middle;color:inherit;font-size:20.8px;font-size:1.3rem;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.docs-icon-more:before{content:""}.docs-icon-expand:before{content:""}.docs-icon-collapse:before{content:""}.docs-icon-plus:before{content:""}.docs-icon-minus:before{content:""}.docs-icon-document:before{content:""}.docs-icon-edit:before{content:""}.docs-icon-download:before{content:""}.docs-icon-info:before{content:""}.docs-icon-compare:before{content:""}.docs-icon-github:before{content:""}.docs-icon-share:before{content:""}.docs-icon-search:before{content:""}.docs-icon-link:before{content:""}.docs-icon-external-link:before{content:""}.docs-icon-comment:before{content:""}.docs-icon-attention:before,.docs-icon-warning:before{content:""}.docs-icon-example:before{content:""}.docs-icon-procedure:before{content:""}.docs-icon-hint:before{content:""}.docs-icon-note:before{content:""}.docs-icon-step:before{content:""}.docs-icon-pdf:before{content:""}.docs-icon-html:before{content:""}.docs-icon-project:before{content:""}.docs-icon-publisher:before{content:""}.docs-icon-docs:before{content:""}.docs-icon-user:before{content:""}.small{font-size:14px}.navbar-dark--text-white{color:#fff}.navbar-dark .lang-selector .nav-link,.navbar-dark .navbar-nav .nav-link{color:#fff!important}.navbar.bg-white{background-color:#fff}.navbar.primary-bg-a7{background-color:#0059b3}@media (min-width:992px){.dropdown-menu.dropdown-menu-right:before{right:24px;left:auto}}@media (min-width:992px){.navbar .dropdown-menu.dropdown-menu-right{left:auto;right:0}}@media (max-width:991.98px){.dropdown-menu-right{right:auto;left:auto}}.btn-group.show .dropdown-menu[x-placement=bottom-start],.dropdown.show .dropdown-menu[x-placement=bottom-start]{-webkit-animation:dropdownFadeIn .3s forwards;animation:dropdownFadeIn .3s forwards}.btn-group.show .dropdown-menu[x-placement=top-start],.dropdown.show .dropdown-menu[x-placement=top-start]{-webkit-animation:dropdownFadeInTop .3s forwards;animation:dropdownFadeInTop .3s forwards}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-menu:before{z-index:-1}.injected{display:none}body{color:#596771;background-color:#002b4d}body.no-scroll{overflow-y:hidden}p{font-family:Lora,serif}h1,h2,h3,h4,h5{color:#000;margin-bottom:2rem}img{max-width:100%;height:auto}.container-fluid--desktop{max-width:1450px}@-webkit-keyframes pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}@keyframes pulsate{0%{-webkit-transform:scale(.1);transform:scale(.1);opacity:0}50%{opacity:1}to{-webkit-transform:scale(1.2);transform:scale(1.2);opacity:0}}.loading{overflow:hidden}.loading:after{position:absolute;background:#0073e6;height:100%;width:100%;z-index:10;content:"";left:0;top:0}.loading:before{border:5px solid #fff;margin:-15px 0 0 -15px;border-radius:30px;position:absolute;content:"";z-index:11;height:30px;left:50%;top:50%;opacity:0;width:30px;-webkit-animation:pulsate 1s ease-out;animation:pulsate 1s ease-out;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}.loading.no-bg:after{background:none;position:relative}.dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}.dropdown-menu .dropdown-item{color:#0073e6}.dropdown-menu .dropdown-item.active,.dropdown-menu .dropdown-item:active{font-weight:600;text-decoration:inherit;background-color:inherit}#version-list .dropdown-toggle .current-version{max-width:8em;text-overflow:ellipsis;overflow:hidden;display:inline-block;font-size:inherit;font-weight:400}#version-list .version-list-wrapper{max-height:10.2em;max-width:18em;overflow-y:scroll}#version-list .dropdown-item{text-overflow:ellipsis;max-width:16em;overflow-x:hidden}.document-actions .dropdown-toggle:after{vertical-align:middle;line-height:1.5}@media (max-width:767.98px){.document-actions .dropdown-toggle:after{font-family:italia-icon-font!important;border:none;margin:0 2em 0 0;width:auto;height:auto;float:right;content:"\e818";vertical-align:middle;font-size:.8em;line-height:2em;-webkit-transform-origin:center;transform-origin:center;-webkit-transition:all .3s;transition:all .3s}.document-actions .dropdown-toggle[aria-expanded=true]:after{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.document-actions .dropdown-toggle:hover{text-decoration:none}.document-actions .dropdown-menu.show{position:static!important;-webkit-transform:none!important;transform:none!important;-webkit-box-shadow:none;box-shadow:none;padding:0;margin-top:16px;-webkit-animation:none;animation:none}.document-actions .dropdown-menu.show:before{display:none}}.header{font-size:16px;font-size:1rem}.header .navbar-brand{font-size:14.224px;font-size:.889rem;font-weight:600}.header .navbar-brand a{text-decoration:none}.header .navbar .dropdown-toggle:after{margin:0 .2rem;font-size:11.2px;font-size:.7rem}.header .nav-item{margin-left:.2rem}@media (min-width:992px){.header .nav-item{border-left:0;margin-left:0}}.header .nav-item.active{font-weight:600}.header .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.header .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-left:.2rem solid #fff;margin-left:0}@media (min-width:992px){.header .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.header .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-left:0;margin-left:0;border-bottom:2px solid #fff;margin-bottom:0}}.slim-header{font-size:14.224px;font-size:.889rem}.slim-header .navbar-toggler .navbar__icon{font-size:11.2px;font-size:.7rem;line-height:3em;display:inline-block;-webkit-transform:scaleY(-1);transform:scaleY(-1);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s}.slim-header .navbar-toggler.collapsed .navbar__icon{-webkit-transform:scaleY(1);transform:scaleY(1)}.slim-header .navbar-toggler .dropdown-toggle:after{content:""}.slim-header.navbar .divider{border-top:.05rem solid #799ebc;padding-right:1px;width:10%;margin-top:.75rem;margin-bottom:1rem;margin-left:.2rem;padding-bottom:1px}.slim-header.navbar .divider:first-child{margin-top:1px}.slim-header.navbar .divider.divider--w-100{width:100%}@media (min-width:992px){.slim-header.navbar .divider.divider--w-100{width:inherit}}@media (min-width:992px){.slim-header.navbar .divider{border-top:0;width:inherit;margin-top:inherit;margin-bottom:inherit;border-right:.05rem solid #06c;padding-right:1px;margin-left:0}}.secondary-nav{font-weight:600}@media (max-width:991.98px){.secondary-nav.secondary-nav--offcanvas{-webkit-transform:translateX(-100%);transform:translateX(-100%);z-index:10;background-color:#fff;color:#06c;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;position:fixed;top:0;left:0;bottom:0;right:25%;overflow-y:auto}.secondary-nav.secondary-nav--offcanvas.active{-webkit-transform:translateX(0);transform:translateX(0)}}.secondary-nav .navbar-nav li{padding:.5rem;border-bottom:.2rem solid transparent}.secondary-nav .nav-item:not(.nav-text):not(.nav-item--no-underline).active,.secondary-nav .nav-item:not(.nav-text):not(.nav-item--no-underline):hover{border-bottom:.2rem solid #fff}@media (max-width:991.98px){.article-intro-more .dropdown.show:before{content:"";width:100vw;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.5);z-index:999}}.article-intro-more .dropdown .dropdown-toggle:after{display:none}.article-intro-more .dropdown .dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}@media (max-width:991.98px){.article-intro-more .dropdown .dropdown-menu{position:fixed!important;z-index:1001!important;top:calc(50% - 140px)!important;left:calc(50% - 140px)!important;-webkit-transform:none!important;transform:none!important}.article-intro-more .dropdown .dropdown-menu:before{display:none}}.article-intro-more .dropdown .dropdown-menu .dropdown-item{color:#0073e6}@media (max-width:991.98px){.lang-selector .dropdown.show:before{content:"";width:100vw;height:100%;position:fixed;top:0;left:0;background-color:rgba(0,0,0,.5);z-index:999}}.lang-selector .dropdown .dropdown-menu{background-color:#fff;padding:.5rem;margin:0;border-radius:.2rem;-webkit-box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);box-shadow:2px 2px 8px 0 rgba(0,0,0,.35);z-index:100}@media (max-width:991.98px){.lang-selector .dropdown .dropdown-menu{position:fixed!important;z-index:1001!important;top:calc(50% - 80px)!important;left:calc(50% - 80px)!important;-webkit-transform:none!important;transform:none!important}.lang-selector .dropdown .dropdown-menu:before{display:none}}.lang-selector .dropdown .dropdown-menu .dropdown-item{color:#0073e6}.lang-selector .dropdown .dropdown-menu .dropdown-item.active,.lang-selector .dropdown .dropdown-menu .dropdown-item:active{font-weight:600;text-decoration:inherit;background-color:inherit}.h1--header{font-size:21.328px;font-size:1.333rem;font-weight:600;line-height:1.2;letter-spacing:unset}@media (min-width:576px){.h1--header{font-size:1.8rem}}.h1--header span{font-size:11.2px;font-size:.7rem;font-weight:400}.svg--header{width:39px;height:36px}@media (min-width:576px){.svg--header{width:65px;height:60px}}.h2--header{font-size:14px;font-weight:300;letter-spacing:unset}.docs__document-info{color:#fff;font-size:14.4px;font-size:.9rem;vertical-align:bottom}.docs__document-info .docs__document-info__icon{font-size:19.2px;font-size:1.2rem;vertical-align:bottom}.docs__document-info .docs__document-info__ownership .docs__document-info__label{font-size:12.8px;font-size:.8rem}.docs__document-info .docs__document-info__ownership .docs__document-info__icon{font-size:16px;font-size:1rem}.doc-header{-webkit-box-shadow:0 0 120px 0 rgba(0,0,0,.1);box-shadow:0 0 120px 0 rgba(0,0,0,.1);position:relative;z-index:10;color:#0073e6;font-size:16px;font-weight:600}.doc-header .progress-container{width:100%;height:4px;height:.25rem;background:#e6f3fe}.doc-header .progress-bar{height:4px;height:.25rem;background:#06c;width:0}.docs-italia #cerca{border:1px solid #ccc;font-size:12.8px;font-size:.8rem;font-weight:100}.docs-italia #cerca::-webkit-input-placeholder{color:#ccc}.docs-italia #cerca::-moz-placeholder{color:#ccc}.docs-italia #cerca::-ms-input-placeholder{color:#ccc}.docs-italia #cerca::placeholder{color:#ccc}.social{color:#fff}.social .social__label{font-size:15.2px;font-size:.95rem}.social .social__link{color:#fff;font-size:16px;font-size:1rem}.social .social__link:active,.social .social__link:hover{text-decoration:none}#rtd-search-form{border:1px solid #ccc}#rtd-search-form input[type=text]{border:none;height:100%}#rtd-search-form .input-group-append button{background-color:#fff}#rtd-search-form .input-group-append button .docs-icon-search{font-size:19.2px;font-size:1.2rem}#documentInfo .tag{font-family:Titillium Web,Geneva,Tahoma,sans-serif}.offcanvas-menu{position:fixed;z-index:1000;width:100vw;height:100vh;top:0;left:0;right:0;bottom:0}.offcanvas-menu.animate--left{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);-webkit-transition:-webkit-transform .4s;transition:-webkit-transform .4s;transition:transform .4s;transition:transform .4s,-webkit-transform .4s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}.offcanvas-menu.js-active{-webkit-transform:translateZ(0);transform:translateZ(0);-webkit-transition:-webkit-transform .8s;transition:-webkit-transform .8s;transition:transform .8s;transition:transform .8s,-webkit-transform .8s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}.offcanvas-menu .offcanvas-menu__inner{width:80%;background-color:#fff;height:100vh;-webkit-transform:translateX(0);transform:translateX(0);-webkit-transition:all .5s ease-out;transition:all .5s ease-out}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__header{padding:1.5rem 1.8rem 1rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__header .offcanvas-menu__title{font-weight:600;font-size:19.2px;font-size:1.2rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav{padding:.5rem 0 0;margin:0}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item{list-style:none;margin:0;padding:.5rem 1rem}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:first-child,.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:nth-child(4){position:relative}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:first-child:before,.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item:nth-child(4):before{content:"";width:64px;height:1px;left:32px;left:2rem;border-top:1px solid rgba(0,102,204,.2);position:absolute;top:0}.offcanvas-menu .offcanvas-menu__inner .offcanvas-menu__nav .offcanvas-menu__nav__item .offcanvas-menu__nav__link{padding:.5rem 1rem;font-size:16px;font-size:1rem;display:block}.offcanvas-menu.deactive .offcanvas-menu__inner{margin-left:-80%;overflow:hidden}.offcanvas-menu .offcanvas-menu__extra{width:20%;height:100vh;position:fixed;right:0;top:0}body:before{position:fixed;top:0;left:0;z-index:999;bottom:0;right:0;background:rgba(0,0,0,.5);content:"";opacity:0;-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);-webkit-transition:opacity .4s,-webkit-transform 0s .4s;transition:opacity .4s,-webkit-transform 0s .4s;transition:opacity .4s,transform 0s .4s;transition:opacity .4s,transform 0s .4s,-webkit-transform 0s .4s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1)}body.show-menu:before{opacity:1;-webkit-transition:opacity .8s;transition:opacity .8s;-webkit-transition-timing-function:cubic-bezier(.7,0,.3,1);transition-timing-function:cubic-bezier(.7,0,.3,1);-webkit-transform:translateZ(0);transform:translateZ(0)}#desktop-menu{-webkit-transform:translate(0);transform:translate(0);-webkit-transform:translateZ(0);transform:translateZ(0);will-change:position,transform;padding-bottom:5rem}#desktop-menu>button:first-of-type{margin-top:1.5rem}.col--nav{width:100%}@media (min-width:768px){.col--nav{width:420px;float:left;border-right:1px solid #eeeff0;padding-left:4.5rem}}.docs-menu{will-change:min-height;display:none}@media (min-width:768px){.docs-menu{display:block}}@media (max-width:767.98px){.docs-offcanvas-menu{-webkit-transform:translateX(100%);transform:translateX(100%);z-index:10;background-color:#fff;-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;position:fixed;top:0;left:0;bottom:0;right:0;overflow-y:auto}.docs-offcanvas-menu.active{-webkit-transform:translateX(0);transform:translateX(0)}}@media (min-width:768px){.docs-offcanvas-menu{display:none}}.navbar-toggler--wrap{position:fixed;bottom:0;left:0;right:0;z-index:9;background-color:#fff;-webkit-box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25);box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25)}@media (min-width:768px){.navbar-toggler--wrap{display:none}}.navbar-toggler{color:#06c;padding:1rem 1rem 1rem 2rem}.navbar-toggler__chapter{color:#000;font-size:12.8px;font-size:.8rem}.sidebar-tabs{position:fixed;top:0;left:0;right:0;background-color:#fff;-webkit-transform:translateX(100%);transform:translateX(100%);-webkit-transition:-webkit-transform .3s;transition:-webkit-transform .3s;transition:transform .3s;transition:transform .3s,-webkit-transform .3s;-webkit-transition-timing-function:ease-in-out;transition-timing-function:ease-in-out;z-index:11;-webkit-box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25);box-shadow:-1px -2px 62px -13px rgba(0,0,0,.25)}.sidebar-tabs.active{-webkit-transform:translateX(0);transform:translateX(0)}@media (min-width:768px){.sidebar-tabs{display:none}}.sidebar-btn{text-transform:uppercase;color:#06c;font-weight:700;cursor:pointer;border:0;border-bottom:3px solid #0073e6;background:none}@media (min-width:768px){.sidebar-btn{border-bottom:2px solid #bbd8f1}}.sidebar-btn.sidebar-btn--mobile{display:inline-block;font-size:11.2px;font-size:.7rem;text-align:center;border:0}.sidebar-btn.sidebar-btn--mobile.active.show{border-bottom:3px solid #0073e6;text-decoration:none}@media (min-width:768px){.sidebar-btn.sidebar-btn--mobile.active.show{border-bottom:2px solid #bbd8f1}}.form-check [type=checkbox]:focus.focus--mouse+label.sidebar-btn,.sidebar-btn.focus--mouse,.toggles label input[type=checkbox]:focus.focus--mouse+.sidebar-btn.lever{border-color:#0073e6!important}@media (min-width:768px){.form-check [type=checkbox]:focus.focus--mouse+label.sidebar-btn,.sidebar-btn.focus--mouse,.toggles label input[type=checkbox]:focus.focus--mouse+.sidebar-btn.lever{border-color:#bbd8f1!important}}.sidebar-btn .it-collapse,.sidebar-btn .it-expand{font-size:9.6px;font-size:.6rem;line-height:2.5}.sidebar-btn .it-expand{display:inline-block}.sidebar-btn.collapsed .it-expand,.sidebar-btn .it-collapse{display:none}.sidebar-btn.collapsed .it-collapse{display:inline-block}@media (min-width:768px){.sidebar-btn{display:block;width:100%;text-align:left}}@media (max-width:767.98px){.sidebar-btn.collapsed .it-collapse,.sidebar-btn.collapsed .it-expand,.sidebar-btn .it-collapse,.sidebar-btn .it-expand{display:none}}.main-container{overflow:hidden;position:relative;background-color:#fff}.doc-content__consultation{position:absolute;right:0;left:0;top:0;background-color:#4bd4d6;text-align:left;text-transform:uppercase;font-weight:700;color:#000;padding:.5rem 0 .5rem 2rem}@media (min-width:992px){.doc-content__consultation{padding-left:4rem}}@media (min-width:1200px){.doc-content__consultation{-webkit-transform:rotate(45deg) translate(45px,-125px);transform:rotate(45deg) translate(45px,-125px);width:320px;-webkit-transform-origin:left;transform-origin:left;z-index:1;left:auto;text-align:center;padding-left:0}}.col-content{padding:4rem 2rem}@media (min-width:992px){.col-content{padding:4rem 4rem 5rem}}.caption-wrap{clear:both}.caption-wrap .caption--table{margin-top:1rem;margin-bottom:1rem;display:block;font-family:Lora,serif;font-style:italic;font-size:12px;font-size:.75rem;padding:0}@media (min-width:992px){.caption-wrap .caption--table{width:calc(100% - 200px);float:left}}.caption-wrap .reference--wrap{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;margin-top:1rem;margin-bottom:2rem;font-size:.9em}@media (min-width:768px){.caption-wrap .reference--wrap{width:200px;float:right;padding-left:2rem}}.caption-number{font-weight:700;color:#000}.chapter-header{margin-bottom:1rem;margin-left:.5rem}.chapter-nav{position:relative}@media (min-width:992px){.chapter-nav{width:200px;float:left}}.figure-fixed-wrap{display:block;width:100%;overflow-x:auto}.figure-fixed{max-width:none}.title__background{width:100%;background-color:#e6f3fe;position:absolute;top:-1px;height:auto;left:-8px;left:-.5rem;display:none;right:0;z-index:0}.title__background:after{content:"";position:absolute;left:100%;-webkit-transform:translateX(-50%);transform:translateX(-50%);top:0;bottom:0;width:0;height:0;border-left:20px solid transparent;border-right:20px solid transparent;border-top:20px solid #e6f3fe}.std-term{background-color:#bffffd;color:#000;padding:.2rem}.footer-buttons--next{clear:both;margin-top:4rem}.footer-buttons--next a{background-color:#0073e6;color:#fff;padding:.5rem 1rem;border-radius:.2rem;font-weight:700;display:inline-block}.footer-buttons--prev{margin-bottom:2.5rem}.reference-icon{vertical-align:middle;display:inline-block}#doc-content{width:100%;position:relative}@media (min-width:768px){#doc-content{width:calc(100% - 420px);float:left}}#doc-content a.reference[href]{text-decoration:underline}#doc-content .useful-docs .mimetype{display:none}#doc-content .useful-docs ul{list-style-type:none;padding-left:0}#doc-content .useful-docs li{border-top:1px solid #ccc;padding-top:1rem;padding-bottom:1rem;vertical-align:middle}#doc-content .useful-docs li:after{display:none}#doc-content .useful-docs [class*=" docs-icon-"],#doc-content .useful-docs [class^=docs-icon-]{font-size:30.4px;font-size:1.9rem;color:#0073e6}#doc-content ul.simple,#doc-content ul.simple ul{list-style-type:disc}#doc-content ul.simple li,#doc-content ul.simple ul li{position:relative;margin-bottom:.5rem;font-size:14.4px;font-size:.9rem}#doc-content ul.simple li ul li,#doc-content ul.simple ul li ul li{margin-top:.5rem}#doc-content .section{clear:both}#doc-content .section:after{content:"";display:table;clear:both}@media (min-width:992px){#doc-content .section>*{width:calc(100% - 200px);float:left;clear:left}}@media (min-width:992px){#doc-content .section .caption-wrap,#doc-content .section .chapter-header,#doc-content .section .figure,#doc-content .section .full-width,#doc-content .section .section,#doc-content .section .table-responsive,#doc-content .section>.toctree-wrapper.compound{width:100%}}#doc-content .section .figure{width:100%}#doc-content .section .figure[id],#doc-content .section .rubric.ref[id],#doc-content .section .section[id],#doc-content .section .table[id]{border-top:4.2rem solid transparent}#doc-content .section .glossary dt:not([id=""]){margin-top:-4em;padding-top:4em}#doc-content .section ol.loweralpha,#doc-content .section ol.loweralpha li{list-style:lower-alpha}#doc-content .section ol.upperalpha,#doc-content .section ol.upperalpha li{list-style:upper-alpha}#doc-content .section ol.upperroman,#doc-content .section ol.upperroman li{list-style:upper-roman}#doc-content .section ol,#doc-content .section ol.arabic{list-style:decimal}#doc-content .topic-title{color:#000;font-weight:700;font-size:22.4px;font-size:1.4rem;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .topic.procedure{margin-bottom:3rem}#doc-content .topic.procedure em{font-weight:700}#doc-content .topic.procedure ol{padding-left:1rem}#doc-content .topic.procedure ol li{position:relative;margin-bottom:1rem;padding-left:1rem;counter-increment:list;list-style-type:none;font-family:Lora,serif}#doc-content .topic.procedure ol li:after{position:absolute;left:-16px;left:-1rem;top:0;width:16px;width:1rem;height:24px;height:1.5rem;z-index:1;content:counter(list);color:#fff;text-align:center;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-weight:600}#doc-content .topic.procedure .topic-title{text-transform:uppercase;font-size:17.6px;font-size:1.1rem;font-weight:700;color:#002b4d;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;padding-bottom:.2rem;background:-webkit-gradient(linear,left top,left bottom,from(#004e95),to(#004e95)) no-repeat 100% 100%/calc(100% - 2rem) 2px;background:linear-gradient(#004e95,#004e95) no-repeat 100% 100%/calc(100% - 2rem) 2px;margin-bottom:1rem}#doc-content .topic.procedure .topic-title [class*=" docs-icon-"],#doc-content .topic.procedure .topic-title [class^=docs-icon-]{margin-right:.5rem}#doc-content .topic.procedure .procedure__img{padding-left:1.5rem;margin-bottom:2rem;margin-left:.5rem;margin-top:2rem;border-left:1px solid #799ebc}#doc-content .topic.procedure .procedure__img img{-webkit-box-shadow:0 0 61px 0 rgba(0,0,0,.15);box-shadow:0 0 61px 0 rgba(0,0,0,.15)}#doc-content .topic.procedure .procedure-internal-title{text-transform:uppercase;color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:12.8px;font-size:.8rem;font-weight:700}#doc-content .topic.procedure .docs-icon-step{color:#004e95;position:absolute;left:-24px;left:-1.5rem;font-size:32px;font-size:2rem}@media (min-width:992px){#doc-content .title-wrap{width:calc(100% - 200px);float:left;clear:left;position:relative}#doc-content .title-wrap h2{line-height:60px}#doc-content .title-wrap h3{line-height:46px}#doc-content .title-wrap h1,#doc-content .title-wrap h2,#doc-content .title-wrap h3{display:inline;cursor:pointer;position:relative;color:#000;box-shadow:.5rem 0 0 #fff,-.5rem 0 0 #fff;-webkit-box-shadow:.5rem 0 0 #fff,-.5rem 0 0 #fff;-webkit-box-decoration-break:clone;-ms-box-decoration-break:clone;-o-box-decoration-break:clone;box-decoration-break:clone;left:-.5rem;z-index:1}#doc-content .title-wrap h1 .title__chapter,#doc-content .title-wrap h2 .title__chapter,#doc-content .title-wrap h3 .title__chapter{position:relative;color:#0073e6}#doc-content .title-wrap h1{line-height:71px}#doc-content .title-wrap h1 .title__chapter{position:relative;background-color:#0073e6;color:#fff;margin-right:.5rem;padding-left:.5rem;padding-right:.5rem;display:inline-block;z-index:1}#doc-content .title-wrap h1 .title__chapter:after,#doc-content .title-wrap h1 .title__chapter:before{content:"";top:0;bottom:0;width:.5rem;background-color:#0073e6;position:absolute}#doc-content .title-wrap h1 .title__chapter:after{right:100%}#doc-content .title-wrap h1 .title__chapter:before{left:100%}}#doc-content .title-wrap.active h1,#doc-content .title-wrap.active h2,#doc-content .title-wrap.active h3{-webkit-box-shadow:.5rem 0 0 #e6f3fe,-.5rem 0 0 #e6f3fe;box-shadow:.5rem 0 0 #e6f3fe,-.5rem 0 0 #e6f3fe;background-color:#e6f3fe}#doc-content .title-wrap.active .title__background{display:block}#doc-content .headerlink{display:none}#doc-content .document-info{padding:0}#doc-content .document-info .docutils.field-list{width:100%;margin-bottom:2rem;border-bottom:1px solid #ccc;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;display:grid}#doc-content .document-info .docutils.field-list tr{display:block;margin-bottom:2rem}@media (min-width:576px){#doc-content .document-info .docutils.field-list tr{width:50%;float:left}}#doc-content .document-info .docutils.field-list .field-body,#doc-content .document-info .docutils.field-list .field-name{display:block;font-weight:400}#doc-content .document-info .docutils.field-list .field-body{color:#06c;text-decoration:underline}#doc-content dd>p{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .highlights{font-size:24px;font-size:1.5rem;font-family:Lora,serif}#doc-content blockquote.epigraph{margin-top:2rem;padding-left:2rem;border-left:4px solid #00c4c8;color:#596771;font-size:19.2px;font-size:1.2rem;margin-bottom:2rem}#doc-content blockquote.epigraph .attribution{margin-bottom:0;font-size:16px;font-size:1rem}#doc-content .question-and-answers blockquote{margin-top:.5rem;margin-bottom:0}#doc-content .question-and-answers blockquote>div{font-weight:700;font-family:Lora,serif}#doc-content .question-and-answers .pull-quote{max-width:490px;margin-bottom:2rem}#doc-content .question-and-answers .pull-quote ul{list-style-type:none;padding-left:1.5rem}#doc-content .question-and-answers .pull-quote ul li{display:inline-block;margin-top:1rem}#doc-content .question-and-answers .pull-quote ul li:after{display:none}#doc-content .question-and-answers .pull-quote ul li a{padding:.2rem .5rem;margin-right:.2rem;background-color:#bffffd;color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;border-bottom:2px dotted #ccc}#doc-content .question-and-answers .pull-quote>div>p{text-transform:uppercase;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;color:#0b0b0b;margin-bottom:0;font-weight:100}#doc-content .question-and-answers .pull-quote:nth-of-type(odd){float:left;clear:right}#doc-content .question-and-answers .pull-quote:nth-of-type(odd) blockquote>div,#doc-content .question-and-answers .pull-quote:nth-of-type(odd) ul{padding-left:1.5rem;border-left:5px solid #00c4c8}#doc-content .question-and-answers .pull-quote:nth-of-type(2n){float:right;text-align:right;clear:left}#doc-content .question-and-answers .pull-quote:nth-of-type(2n) blockquote>div,#doc-content .question-and-answers .pull-quote:nth-of-type(2n) ul{padding-right:1.5rem;border-right:5px solid #00c4c8}#doc-content .question-and-answers .glossary.docutils{display:none}#doc-content .highlighted{background:#bffffd;display:inline-block;font-weight:700}.highlight{padding:1rem;margin-bottom:1em}.highlight pre{margin:0;padding-bottom:1em}.highlighttable .highlight{padding:0}.code .highlight{background:none}code:not(.download) .pre{background-color:#efc;padding:.2rem}code.download{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;font-size:100%}#doc-content .admonition{margin-bottom:2rem;margin-top:2rem;padding-left:2rem;border-left:4px solid;color:#596771}#doc-content .admonition .more{padding:0}#doc-content .admonition .admonition-title{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;text-transform:uppercase;font-weight:700}#doc-content .admonition .admonition-title [class*=" docs-icon-"],#doc-content .admonition .admonition-title [class^=docs-icon-]{font-size:24px;font-size:1.5rem;margin-right:.5rem}#doc-content .admonition .admonition__hidden-paragraph{display:none}#doc-content .admonition .admonition__toggle-wrap{border-top:1px solid #ccc;padding-top:1rem;margin-top:1.5rem}#doc-content .admonition .admonition__toggle-btn{cursor:pointer;background:none;border:none;color:#0073e6;padding-left:0}#doc-content .admonition .admonition__toggle-btn [class*=" docs-icon-"],#doc-content .admonition .admonition__toggle-btn [class^=docs-icon-]{font-size:9.6px;font-size:.6rem;margin-left:.5rem;position:relative}#doc-content .admonition .admonition__toggle-btn [class*=" docs-icon-"]:after,#doc-content .admonition .admonition__toggle-btn [class^=docs-icon-]:after{content:"";width:16px;width:1rem;height:16px;height:1rem;border:2px solid #0073e6;left:50%;top:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);position:absolute;border-radius:50%}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-less:first-letter,#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-more:first-letter{text-transform:uppercase}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-less{display:none}#doc-content .admonition .admonition__toggle-btn .admonition__toggle-show-more{display:inline-block}#doc-content .admonition .admonition__toggle-btn.active .admonition__toggle-show-more{display:none}#doc-content .admonition .admonition__toggle-btn.active .admonition__toggle-show-less{display:inline-block}#doc-content .admonition.display-page{background-color:#f9fafb;padding:2rem;position:relative;border:none}#doc-content .admonition.display-page:after,#doc-content .admonition.display-page:before{content:"";width:0;height:0;right:0;top:0;position:absolute;z-index:1}#doc-content .admonition.display-page:before{border-bottom:50px solid transparent;border-right:50px solid #fff}#doc-content .admonition.display-page:after{border-top:50px solid transparent;border-bottom:50px solid #ccc;border-right:50px solid transparent;-webkit-transform:translateY(-50%);transform:translateY(-50%)}#doc-content .admonition.display-page .admonition__hidden-paragraph p,#doc-content .admonition.display-page>p,#doc-content .admonition.display-page li{font-size:12.8px;font-size:.8rem;color:#002b4d}#doc-content .admonition.display-page ol{counter-reset:list}#doc-content .admonition.display-page ol li{margin-bottom:1rem;position:relative;list-style-type:none;counter-increment:list;color:#002b4d;font-family:Lora,serif;text-indent:16px;text-indent:1rem}#doc-content .admonition.display-page ol li:after{position:absolute;left:-16px;left:-1rem;top:0;width:17.6px;width:1.1rem;height:24px;height:1.5rem;z-index:1;content:counter(list) ".";text-align:center;font-weight:700}#doc-content .admonition.display-page ol li:before{position:absolute;left:-32px;left:-2rem;top:.65em;height:1px;z-index:1;content:"";font-weight:700;background-color:#002b4d;width:16px;width:1rem}#doc-content .admonition.display-page .admonition-title,#doc-content .admonition.display-page .code-block__header{color:#004e95;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.display-page .admonition-title{padding-bottom:.2rem;display:inline-block;background:-webkit-gradient(linear,left top,left bottom,from(#004e95),to(#004e95)) no-repeat 100% 100%/calc(100% - 2.2rem) 2px;background:linear-gradient(#004e95,#004e95) no-repeat 100% 100%/calc(100% - 2.2rem) 2px;margin-bottom:1rem;overflow:hidden}#doc-content .admonition.display-page .admonition-internal-title{text-transform:uppercase;font-size:12.8px;font-size:.8rem;font-weight:700;color:#002b4d;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.display-page .linenodiv pre{color:#8998a5;font-weight:400}#doc-content .admonition.display-page .highlighttable pre{font-size:12.8px;font-size:.8rem}#doc-content .admonition.admonition-consultation{padding-bottom:1rem;border-bottom:1px solid #ccc;position:relative}#doc-content .admonition.admonition-consultation a{text-decoration:underline}#doc-content .admonition.admonition-consultation .last{font-family:Lora,serif}#doc-content .admonition.admonition-consultation .admonition-title{color:#000;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#doc-content .admonition.admonition-consultation .admonition-title [class*=" docs-icon-"],#doc-content .admonition.admonition-consultation .admonition-title [class^=docs-icon-]{font-size:19.2px;font-size:1.2rem}#doc-content .admonition.error{border-color:#d83750}#doc-content .admonition.error .admonition-title{color:#d83750}#doc-content .admonition.note{border-color:#004e95}#doc-content .admonition.note .admonition-title{color:#004e95}#doc-content .admonition.attention,#doc-content .admonition.warning{border-color:#df7d26}#doc-content .admonition.attention .admonition-title,#doc-content .admonition.warning .admonition-title{color:#df7d26}#doc-content .admonition.important{border-color:#008255}#doc-content .admonition.important .admonition-title{color:#008255}#doc-content .admonition.important .last{font-weight:700;font-size:19.2px;font-size:1.2rem}#doc-content .admonition.hint{border-color:#008255}#doc-content .admonition.hint .admonition-title{color:#008255}#doc-content .admonition.hint .reference.internal{font-size:12.8px;font-size:.8rem;position:relative}#doc-content .admonition.hint .reference.internal:after{content:"";width:6.4px;width:.4rem;height:6.4px;height:.4rem;border-top:1px solid #0073e6;border-right:1px solid #0073e6;left:100%;-webkit-transform:rotate(45deg) translateY(-50%);transform:rotate(45deg) translateY(-50%);position:absolute;top:50%}#doc-content .admonition.admonition-may,#doc-content .admonition.admonition-must,#doc-content .admonition.admonition-must-not,#doc-content .admonition.admonition-should,#doc-content .admonition.admonition-should-not,#doc-content .admonition.admonition-use,#doc-content .admonition.admonition-use-not{margin-top:2rem;border:2px solid;border-radius:1em;padding:2em;position:relative}#doc-content .admonition.admonition-may .admonition__header,#doc-content .admonition.admonition-must-not .admonition__header,#doc-content .admonition.admonition-must .admonition__header,#doc-content .admonition.admonition-should-not .admonition__header,#doc-content .admonition.admonition-should .admonition__header,#doc-content .admonition.admonition-use-not .admonition__header,#doc-content .admonition.admonition-use .admonition__header{display:inline-block;position:relative;padding:0 1em;background:#fff}#doc-content .admonition.admonition-may .admonition__header .admonition-title,#doc-content .admonition.admonition-must-not .admonition__header .admonition-title,#doc-content .admonition.admonition-must .admonition__header .admonition-title,#doc-content .admonition.admonition-should-not .admonition__header .admonition-title,#doc-content .admonition.admonition-should .admonition__header .admonition-title,#doc-content .admonition.admonition-use-not .admonition__header .admonition-title,#doc-content .admonition.admonition-use .admonition__header .admonition-title{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif;margin:0}#doc-content .admonition.admonition-may:before,#doc-content .admonition.admonition-must-not:before,#doc-content .admonition.admonition-must:before,#doc-content .admonition.admonition-should-not:before,#doc-content .admonition.admonition-should:before,#doc-content .admonition.admonition-use-not:before,#doc-content .admonition.admonition-use:before{position:absolute;right:4em;top:-.65em;width:6em;padding:0 1em;display:inline-block;background-color:#fff}#doc-content .admonition.admonition-may,#doc-content .admonition.admonition-must,#doc-content .admonition.admonition-must-not,#doc-content .admonition.admonition-should,#doc-content .admonition.admonition-should-not{border-color:#004080}#doc-content .admonition.admonition-may .admonition__header,#doc-content .admonition.admonition-must-not .admonition__header,#doc-content .admonition.admonition-must .admonition__header,#doc-content .admonition.admonition-should-not .admonition__header,#doc-content .admonition.admonition-should .admonition__header{top:-2.8em}#doc-content .admonition.admonition-may .admonition__header .admonition-title,#doc-content .admonition.admonition-must-not .admonition__header .admonition-title,#doc-content .admonition.admonition-must .admonition__header .admonition-title,#doc-content .admonition.admonition-should-not .admonition__header .admonition-title,#doc-content .admonition.admonition-should .admonition__header .admonition-title{color:#004080}#doc-content .admonition.admonition-use{border-color:#00cf86}#doc-content .admonition.admonition-use .admonition__header .admonition-title{color:#00cf86}#doc-content .admonition.admonition-use .admonition__header .admonition-title:before{content:""}#doc-content .admonition.admonition-use-not{border-color:#d1344c}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title{color:#d1344c}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title:before{content:""}#doc-content .admonition.admonition-use-not .admonition__header,#doc-content .admonition.admonition-use .admonition__header{top:-3.2em}#doc-content .admonition.admonition-use-not .admonition__header .admonition-title:before,#doc-content .admonition.admonition-use .admonition__header .admonition-title:before{font-family:docs-icons;margin-right:.5rem;font-size:1.6em;vertical-align:middle}#doc-content .admonition.admonition-must:before{content:url(../images/must.svg)}#doc-content .admonition.admonition-should:before{content:url(../images/should.svg)}#doc-content .admonition.admonition-must-not:before{content:url(../images/must_not.svg)}#doc-content .admonition.admonition-should-not:before{content:url(../images/should_not.svg)}#doc-content .admonition.admonition-may:before{content:url(../images/may.svg)}.footer *{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.footer a:hover{text-decoration:none}.footer .in-collaboration{font-size:.8em}.footer .team-logo--icon{width:54px}.footer .team-logo--text{font-size:16px;font-size:1rem;line-height:18px;max-width:160px;text-transform:uppercase}.footer .agid-logo--icon{width:8em}@media (min-width:768px){.footer .agid-logo--icon{width:10em}}.footer .agid-logo--separator{border-left-width:2px!important;height:30px}@media (min-width:768px){.footer .agid-logo--separator{height:40px}}.footer .agid-logo--text{width:112px;width:7rem;line-height:1.2;font-size:1em;display:inline-block;vertical-align:middle}@media (min-width:768px){.footer .agid-logo--text{font-size:1.1em;width:8rem}}.footer .small-prints{color:#00fff8;font-weight:600}.footer .social{font-size:1em;color:#fff}.footer .social .icon{color:#00264d;background-color:#fff;padding:.3em;border-radius:100%;font-size:22px}.footer .colophon{border-top:1px solid hsla(0,0%,100%,.1);margin-top:1.5em}@media (min-width:992px){.footer .colophon{margin-top:2em}}.footer-menu__link:hover{color:#fff}.t_translate-wrap{display:none}.doc-tooltip{background-color:#fff;font-family:Lora,serif;-webkit-box-shadow:0 0 100px 0 rgba(0,0,0,.15);box-shadow:0 0 100px 0 rgba(0,0,0,.15)}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:before,.doc-tooltip.bs-popover-auto[x-placement^=top]:before,.doc-tooltip.bs-popover-bottom:before,.doc-tooltip.bs-popover-top:before{content:"";width:0;height:0;border-top:40px solid transparent;border-bottom:40px solid transparent;border-left:40px solid #fff;position:absolute;left:0;z-index:-1}.doc-tooltip.bs-popover-auto[x-placement^=top]:before,.doc-tooltip.bs-popover-top:before{bottom:-40px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:before,.doc-tooltip.bs-popover-bottom:before{top:-40px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:after,.doc-tooltip.bs-popover-auto[x-placement^=top]:after,.doc-tooltip.bs-popover-bottom:after,.doc-tooltip.bs-popover-top:after{content:"";width:15px;height:15px;-webkit-transform:rotate(45deg);transform:rotate(45deg);position:absolute;left:5px;z-index:-2}.doc-tooltip.bs-popover-auto[x-placement^=top]:after,.doc-tooltip.bs-popover-top:after{-webkit-box-shadow:5px 5px 70px 8px rgba(0,0,0,.15);box-shadow:5px 5px 70px 8px rgba(0,0,0,.15);bottom:-20px}.doc-tooltip.bs-popover-auto[x-placement^=bottom]:after,.doc-tooltip.bs-popover-bottom:after{-webkit-box-shadow:-5px -5px 70px 8px rgba(0,0,0,.15);box-shadow:-5px -5px 70px 8px rgba(0,0,0,.15);top:-20px}.doc-tooltip.doc-tooltip--note:after,.doc-tooltip.doc-tooltip--note:before{content:none}.tooltip__wrap{overflow:hidden;width:330px;padding:2rem;font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}.tooltip__title{overflow:hidden;font-style:italic;margin-bottom:.5rem;font-size:1em;letter-spacing:0}.tooltip__content{font-size:14.4px;font-size:.9rem;font-style:italic;margin-bottom:0}.tooltip__close-btn{position:absolute;top:16px;top:1rem;right:16px;right:1rem;width:20px;height:20px;padding:0;background:none;border:0;cursor:pointer}.tooltip__close-btn:after,.tooltip__close-btn:before{content:"";position:absolute;height:20px;width:1px;background-color:#0073e6;top:0;left:50%}.tooltip__close-btn:after{-webkit-transform:rotate(45deg) translateX(-50%);transform:rotate(45deg) translateX(-50%)}.tooltip__close-btn:before{-webkit-transform:rotate(-45deg) translateX(-50%);transform:rotate(-45deg) translateX(-50%)}.tooltip__link{color:#0073e6;font-size:12.8px;font-size:.8rem;font-weight:100;text-transform:uppercase;letter-spacing:0;position:relative;display:inline-block;margin-top:1rem}.tooltip__link:after{content:"";position:absolute;left:100%;top:0;width:30px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAsAAAAGCAYAAAAVMmT4AAAABmJLR0QAAAAAAAD5Q7t/AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH4gUPDDQNy1r5IQAAAH5JREFUGNNj+I8HTD704v+ZR1/gfCYGPODNlz8MLv3XGc4+/srAwMDAwHjx6df//jNuYVX84esfhg9f/jAI8LAw3G4yYGD8+vPv/ztvfmBVPP3wK4YZ+14wdIfJM5Q4SzIw/v///z8uZzRsf8rAw8bEUOIsCRHA58EXn36h8AF2435mx6vmAAAAAABJRU5ErkJggg==");background-repeat:no-repeat;bottom:0;background-position:50%}@media (max-width:991.98px){.chapter-nav__list--hidden:not(.show){display:none}}@media (min-width:992px){.chapter-nav__list--hidden{visibility:hidden;opacity:0;-webkit-transition:visibility .35s,opacity .35s;transition:visibility .35s,opacity .35s}.chapter-nav__list--hidden.active{visibility:visible;opacity:1}}@media (max-width:991.98px){.chapter-nav__list-wrap{max-width:300px;margin-left:auto;margin-right:auto;border-radius:4px}}@media (min-width:992px){.chapter-nav__wrap{position:absolute;left:2rem;top:1rem}}.chapter-link{background:none;border:none;color:#0073e6;padding:0;display:inline-block;font-size:.9em;font-weight:400;cursor:pointer;vertical-align:middle}.chapter-link:hover{text-decoration:underline}.chapter-link__title{float:left}.chapter-link__counter{margin-right:.3rem;display:inline-block;float:left}.chapter-nav__list{list-style-type:none;margin-bottom:0;padding:1rem}@media (min-width:992px){.chapter-nav__list{padding:0}}.chapter-nav__title{padding:1rem;color:#000;font-size:12.8px;font-size:.8rem;font-weight:700;border-bottom:1px solid #ccc}.chapter-nav__title .title__chapter{color:#8998a5}@media (min-width:992px){.chapter-nav__title{display:none}}.chapter-nav__item:not(:last-child){margin-bottom:1rem}@media (min-width:992px){.chapter-nav__item:not(:last-child){margin-bottom:0}}.chapter-nav__list--visible{margin-top:1rem}@media (min-width:992px){.chapter-nav__list--visible{margin-top:-.5rem}}.chapter-nav__list--visible .chapter-nav__item{display:inline-block}@media (min-width:992px){.chapter-nav__list--visible .chapter-nav__item{display:block}}#doc-content ::-webkit-scrollbar{width:1em;height:14px}#doc-content ::-webkit-scrollbar-track{background-color:#e6f3fe;border-radius:7px;border:2px solid #fff}#doc-content ::-webkit-scrollbar-thumb{background-color:#0073e6;border-radius:7px;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHCAYAAAABIM1CAAAALUlEQVQoU2N88+m/hggf4w0GLODJp//CLEwMUhI8jJexyT/7/l+OcdSAQRAGABbrTN6F2sNMAAAAAElFTkSuQmCC");background-repeat:no-repeat;background-position:50%}#doc-content table:not(.footnote){border:0}#doc-content table:not(.footnote) td{border-right:0;border-left:0}#doc-content table:not(.footnote):not(.highlighttable) td{min-width:220px}#doc-content table:not(.footnote) thead .head{border-right:0;border-left:0;text-transform:uppercase;color:#000;font-size:12px;font-size:.75rem;vertical-align:top}#doc-content table:not(.footnote) tr{font-size:12px;font-size:.75rem}#doc-content .footnote-reference{color:#193e5e;border:1px solid #193e5e;border-radius:3px;padding:0 .4rem;line-height:1.4}#doc-content .note-action{margin-top:.5rem}#doc-content .note-back-btn,#doc-content .note-close-btn{background:none;border:0;display:inline-block;color:#0073e6;font-size:1.2em;cursor:pointer}#doc-content .note-back-btn{position:relative}#doc-content .note-back-btn:before{content:"";top:0;bottom:0;width:1px;position:absolute;background-color:#0073e6;left:0}#doc-content .note-back-btn:hover{text-decoration:underline}#doc-content .docutils.footnote{color:#000;font-size:12.8px;font-size:.8rem;display:none;margin-bottom:2rem}#doc-content .docutils.footnote td{width:100%;float:left}#doc-content .docutils.footnote .fn-backref{color:#193e5e;border:1px solid #193e5e;border-radius:3px;padding:.2rem;line-height:1;display:inline-block;margin-bottom:.5rem}.block-comments{margin-top:4.4rem;padding-bottom:2rem}.block-comments__body p{font-family:Titillium Web,Geneva,Tahoma,sans-serif}.block-comments__header{border-bottom-color:#ccc!important;border-top-color:#eeeff0!important}.block-comments__header h6{color:#06c}.block-comments__img{width:56px}.block-comments__reply-anchor{margin-top:-5em;padding-top:5em}.block-comments__logout-link{display:none;padding-top:.25em}.block-comments__logout-link--icon{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%);color:#d83750;text-shadow:0 0 20px #000}.block-comments__logout-link--icon:hover{color:#fff}.block-comments__logout-link:hover{text-decoration:none}.block-comments__logout-link--visible{display:block;position:relative}.block-comments__input{margin-bottom:1em!important}.block-comments__toggle-btn{background:none;width:32px;width:2rem;height:32px;height:2rem}.block-comments__toggle-btn .docs-icon-minus,.block-comments__toggle-btn .docs-icon-plus{color:#06c;position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.block-comments__toggle-btn .docs-icon-plus{display:none}.block-comments__toggle-btn.collapsed .docs-icon-plus{display:block}.block-comments__toggle-btn.collapsed .docs-icon-minus{display:none}.block-comments__item-btn{background:none;width:32px;width:2rem;height:24px;height:1.5rem;border:0}.block-comments__item-btn .it-collapse,.block-comments__item-btn .it-expand{color:#06c}.block-comments__item-btn.collapsed .it-collapse,.block-comments__item-btn .it-expand{display:none}.block-comments__item-btn.collapsed .it-expand{display:inline-block}.block-comments__item{padding-top:1em}.block-comments__item.hidden{opacity:.5}.block-comments__item.is-new{background-color:#e6f3fe;-webkit-animation:background-fade-highlight 2s ease-out 1 forwards;animation:background-fade-highlight 2s ease-out 1 forwards}.block-comments__content{word-wrap:break-word}.block-comments__name{color:#06c;font-weight:400;font-size:16px;font-size:1rem;letter-spacing:0}.block-comments__date,.block-comments__role{font-size:14px;line-height:21px}.block-comments__role{letter-spacing:.88px}.block-comments__paragraph{font-size:14px;line-height:21px}.block-comments__paragraph a{text-decoration:underline}.box-comment{position:relative;width:100%}.box-comment:not(.sending) .loading{display:none}.box-comment.sending .loading{margin-left:1em;display:inline-block!important;position:relative;overflow:visible;width:40px;z-index:1}.box-comment.sending .loading:before{border:5px solid #0073e6!important;top:60%}.box-comment textarea{min-height:5em;font-weight:400;border:1px solid #eeeff0;border-radius:5px}.box-comment textarea:focus{border:1px solid #596771}.box-comment textarea::-webkit-input-placeholder{color:#ccc}.box-comment textarea::-moz-placeholder{color:#ccc}.box-comment textarea::-ms-input-placeholder{color:#ccc}.box-comment textarea::placeholder{color:#ccc}.box-comment__login{display:-webkit-box;display:-ms-flexbox;display:flex;border:1px solid #edf5fc;border-radius:5px;padding:1em}.box-comment__legend{font-size:12px}.box-comment__user-image{border-radius:50%;position:relative;height:56px;width:56px;float:left}.box-comment__user-image--anon{margin:.25em .75em .25em .25em;background-color:#e8f2fc}.box-comment__user-image i{position:absolute;top:50%;left:50%;-webkit-transform:translate(-50%,-50%);transform:translate(-50%,-50%)}.box-comment__buttons{float:left}.box-comment__required{float:right}.box-comment__required>span{font-size:.8em}.box-comment__submit{position:relative;overflow:hidden}.box-comment__submit .loading.no-bg{display:none;width:30px;height:0;content:" ";overflow:visible;margin-bottom:5px;margin-left:-15px;margin-right:5px}.box-comment__submit .loading.no-bg:before{left:auto}.box-comment__submit>div:not(.loading){display:inline}.box-comment__suggestions__tooltip .tooltip__content{font-style:normal;padding-left:1.75em;font-size:.95em}.missing_permission{width:100%}.missing_permission__text{border:1px solid #edf5fc;border-radius:5px;padding:1em}@-webkit-keyframes background-fade-highlight{to{background-color:transparent}}@keyframes background-fade-highlight{to{background-color:transparent}}@media (max-width:767.98px){.sidebar-nav{padding-top:5.5rem}}.sidebar-nav a{text-decoration:none;color:#596771;font-size:14.4px;font-size:.9rem;display:block;line-height:1.6;margin-bottom:1rem;margin-top:1rem}.sidebar-nav a.current_item{position:relative;z-index:1;margin-bottom:1rem;margin-top:1rem;-webkit-transition:margin-bottom .3s,margin-top .3s;transition:margin-bottom .3s,margin-top .3s}.sidebar-nav a.current_item:before{content:"";position:absolute;top:-8px;top:-.5rem;bottom:-8px;bottom:-.5rem;left:-8px;left:-.5rem;right:-8px;right:-.5rem;background-color:#bffffd;z-index:-1}.sidebar-nav a:focus,.sidebar-nav a:hover{text-decoration:underline}.sidebar-nav>.sidebar-list--wrapper{padding:1rem}@media (min-width:768px){.sidebar-nav>.sidebar-list--wrapper{padding:0}}.sidebar-nav>.sidebar-list--wrapper>ul>li{padding:.1rem 3rem .1rem 1rem}.sidebar-nav>.sidebar-list--wrapper>ul>li>a{font-weight:700}.sidebar-nav>.sidebar-list--wrapper ul{list-style-type:none;padding-left:0;margin-bottom:0}.sidebar-nav>.sidebar-list--wrapper ul.current>li.current{background-color:#f6fbff}.sidebar-nav>.sidebar-list--wrapper ul.current>li.current a{color:#004e95}.sidebar-nav>.sidebar-list--wrapper ul ul{padding-left:1rem}.sidebar-nav>.sidebar-list--wrapper.figures-index--menu,.sidebar-nav>.sidebar-list--wrapper.glossary-mobile--menu,.sidebar-nav>.sidebar-list--wrapper.table-index--menu{padding-top:1rem}.sidebar-nav>.sidebar-list--wrapper.figures-index--menu>ul>li,.sidebar-nav>.sidebar-list--wrapper.glossary-mobile--menu>ul>li,.sidebar-nav>.sidebar-list--wrapper.table-index--menu>ul>li{padding-bottom:0;padding-top:.5rem}#glossary-page>.chapter-header{display:none}#glossary-page .chapter-header{padding-top:2rem;padding-bottom:2rem;padding-left:.5rem;overflow:hidden}#glossary-page .chapter-header h2{font-size:128px;font-size:8rem;font-family:Lora,serif;line-height:1}#glossary-page .glossary-page__btn{border:0;background:none;cursor:pointer;color:#0073e6;display:block;width:100%;text-align:left;text-transform:uppercase;-webkit-transition:color .3s;transition:color .3s}#glossary-page .glossary-page__btn .docs-icon-minus,#glossary-page .glossary-page__btn .docs-icon-plus{color:#0073e6}#glossary-page .glossary-page__btn .docs-icon-minus{display:inline-block}#glossary-page .glossary-page__btn .docs-icon-plus{display:none}#glossary-page .glossary-page__btn.collapsed{color:#596771}#glossary-page .glossary-page__btn.collapsed .docs-icon-minus{display:none}#glossary-page .glossary-page__btn.collapsed .docs-icon-plus{display:inline-block}#glossary-page .term-content{padding-left:2.3rem}#glossary-page .term-content,#glossary-page .term-content p{font-family:Titillium Web,Helvetica Neue,Helvetica,Arial,sans-serif}#glossary-page .term-content:last-of-type.show,#glossary-page dt:last-of-type .glossary-page__btn.collapsed{border-bottom:2px solid #eaebed}.glossary-page__copy-link-wrap{color:#0073e6}.glossary-page__copy-link{background:none;border:none;color:#0073e6;cursor:pointer}@media (max-width:767.98px){.return-to-top{bottom:4rem}}.return-to-top i:before{margin:0}@media (max-width:767.98px){.modal.modal-sm-full .modal-dialog{margin:0;max-width:none}.modal.modal-sm-full .modal-dialog .modal-content{margin:0;width:100vw;height:100vh;border-radius:0!important;border:none}}@font-face{font-family:italia-icon-font;src:url(../font/italia-icon-font.eot?94539880);src:url(../font/italia-icon-font.eot?94539880#iefix) format("embedded-opentype"),url(../font/italia-icon-font.woff2?94539880) format("woff2"),url(../font/italia-icon-font.woff?94539880) format("woff"),url(../font/italia-icon-font.ttf?94539880) format("truetype"),url(../font/italia-icon-font.svg?94539880#italia-icon-font) format("svg");font-weight:400;font-style:normal}[class*=" it-"]:before,[class^=it-]:before{font-family:italia-icon-font;font-style:normal;font-weight:400;speak:none;display:inline-block;text-decoration:inherit;width:1em;margin-right:.2em;text-align:center;font-variant:normal;text-transform:none;line-height:1em;font-smoothing:antialiased}.it-app:before{content:"\e800"}.it-app-1:before{content:"\e801"}.it-arrow-down:before{content:"\e802"}.it-arrow-left:before{content:"\e803"}.it-arrow-right:before{content:"\e804"}.it-arrow-up:before{content:"\e805"}.it-behance:before{content:"\e806"}.it-calendar:before{content:"\e807"}.it-camera:before{content:"\e808"}.it-cancel:before{content:"\e809"}.it-check:before{content:"\e80a"}.it-chevron-left:before{content:"\e80d"}.it-chevron-right:before{content:"\e80e"}.it-close:before{content:"\e80f"}.it-collapse:before{content:"\e810"}.it-comment:before{content:"\e811"}.it-copy:before{content:"\e812"}.it-download:before{content:"\e813"}.it-drop-down:before{content:"\e814"}.it-drop-up:before{content:"\e815"}.it-help:before{content:"\e816"}.it-expand-media:before{content:"\e817"}.it-expand:before{content:"\e818"}.it-external-link:before{content:"\e819"}.it-facebook:before{content:"\e81a"}.it-favorite:before{content:"\e81b"}.it-file:before{content:"\e81c"}.it-flickr:before{content:"\e81d"}.it-github:before{content:"\e81e"}.it-googleplus:before{content:"\e81f"}.it-no:before{content:"\e820"}.it-instagram:before{content:"\e821"}.it-link:before{content:"\e822"}.it-linkedin:before{content:"\e823"}.it-list:before{content:"\e824"}.it-lock:before{content:"\e825"}.it-mail:before{content:"\e826"}.it-medium:before{content:"\e827"}.it-more-actions:before{content:"\e828"}.it-more-items:before{content:"\e829"}.it-pdf:before{content:"\e82a"}.it-pin:before{content:"\e82b"}.it-print:before{content:"\e82c"}.it-refresh:before{content:"\e82f"}.it-rss:before{content:"\e830"}.it-search:before{content:"\e831"}.it-settings:before{content:"\e832"}.it-share:before{content:"\e833"}.it-slideshare:before{content:"\e834"}.it-twitter:before{content:"\e835"}.it-unlock:before{content:"\e836"}.it-upload:before{content:"\e837"}.it-video:before{content:"\e838"}.it-warning:before{content:"\e839"}.it-whatsapp:before{content:"\e83a"}.it-youtube-text:before{content:"\e83b"}.it-youtube:before{content:"\e83c"}.it-zoom-in:before{content:"\e83d"}.it-zoom-out:before{content:"\e83e"}.it-error:before{content:"\e83f"}.it-info:before{content:"\e840"}.it-paper-plane:before{content:"\e841"} \ No newline at end of file diff --git a/rp-vp-kid/it/_static/data/glossary.json b/rp-vp-kid/it/_static/data/glossary.json new file mode 100644 index 000000000..9e26dfeeb --- /dev/null +++ b/rp-vp-kid/it/_static/data/glossary.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/rp-vp-kid/it/_static/doctools.js b/rp-vp-kid/it/_static/doctools.js new file mode 100644 index 000000000..c3db08d1c --- /dev/null +++ b/rp-vp-kid/it/_static/doctools.js @@ -0,0 +1,264 @@ +/* + * doctools.js + * ~~~~~~~~~~~ + * + * Base JavaScript utilities for all Sphinx HTML documentation. + * + * :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ +"use strict"; + +const _ready = (callback) => { + if (document.readyState !== "loading") { + callback(); + } else { + document.addEventListener("DOMContentLoaded", callback); + } +}; + +/** + * highlight a given string on a node by wrapping it in + * span elements with the given class name. + */ +const _highlight = (node, addItems, text, className) => { + if (node.nodeType === Node.TEXT_NODE) { + const val = node.nodeValue; + const parent = node.parentNode; + const pos = val.toLowerCase().indexOf(text); + if ( + pos >= 0 && + !parent.classList.contains(className) && + !parent.classList.contains("nohighlight") + ) { + let span; + + const closestNode = parent.closest("body, svg, foreignObject"); + const isInSVG = closestNode && closestNode.matches("svg"); + if (isInSVG) { + span = document.createElementNS("http://www.w3.org/2000/svg", "tspan"); + } else { + span = document.createElement("span"); + span.classList.add(className); + } + + span.appendChild(document.createTextNode(val.substr(pos, text.length))); + parent.insertBefore( + span, + parent.insertBefore( + document.createTextNode(val.substr(pos + text.length)), + node.nextSibling + ) + ); + node.nodeValue = val.substr(0, pos); + + if (isInSVG) { + const rect = document.createElementNS( + "http://www.w3.org/2000/svg", + "rect" + ); + const bbox = parent.getBBox(); + rect.x.baseVal.value = bbox.x; + rect.y.baseVal.value = bbox.y; + rect.width.baseVal.value = bbox.width; + rect.height.baseVal.value = bbox.height; + rect.setAttribute("class", className); + addItems.push({ parent: parent, target: rect }); + } + } + } else if (node.matches && !node.matches("button, select, textarea")) { + node.childNodes.forEach((el) => _highlight(el, addItems, text, className)); + } +}; +const _highlightText = (thisNode, text, className) => { + let addItems = []; + _highlight(thisNode, addItems, text, className); + addItems.forEach((obj) => + obj.parent.insertAdjacentElement("beforebegin", obj.target) + ); +}; + +/** + * Small JavaScript module for the documentation. + */ +const Documentation = { + init: () => { + Documentation.highlightSearchWords(); + Documentation.initDomainIndexTable(); + Documentation.initOnKeyListeners(); + }, + + /** + * i18n support + */ + TRANSLATIONS: {}, + PLURAL_EXPR: (n) => (n === 1 ? 0 : 1), + LOCALE: "unknown", + + // gettext and ngettext don't access this so that the functions + // can safely bound to a different name (_ = Documentation.gettext) + gettext: (string) => { + const translated = Documentation.TRANSLATIONS[string]; + switch (typeof translated) { + case "undefined": + return string; // no translation + case "string": + return translated; // translation exists + default: + return translated[0]; // (singular, plural) translation tuple exists + } + }, + + ngettext: (singular, plural, n) => { + const translated = Documentation.TRANSLATIONS[singular]; + if (typeof translated !== "undefined") + return translated[Documentation.PLURAL_EXPR(n)]; + return n === 1 ? singular : plural; + }, + + addTranslations: (catalog) => { + Object.assign(Documentation.TRANSLATIONS, catalog.messages); + Documentation.PLURAL_EXPR = new Function( + "n", + `return (${catalog.plural_expr})` + ); + Documentation.LOCALE = catalog.locale; + }, + + /** + * highlight the search words provided in the url in the text + */ + highlightSearchWords: () => { + const highlight = + new URLSearchParams(window.location.search).get("highlight") || ""; + const terms = highlight.toLowerCase().split(/\s+/).filter(x => x); + if (terms.length === 0) return; // nothing to do + + // There should never be more than one element matching "div.body" + const divBody = document.querySelectorAll("div.body"); + const body = divBody.length ? divBody[0] : document.querySelector("body"); + window.setTimeout(() => { + terms.forEach((term) => _highlightText(body, term, "highlighted")); + }, 10); + + const searchBox = document.getElementById("searchbox"); + if (searchBox === null) return; + searchBox.appendChild( + document + .createRange() + .createContextualFragment( + '" + ) + ); + }, + + /** + * helper function to hide the search marks again + */ + hideSearchWords: () => { + document + .querySelectorAll("#searchbox .highlight-link") + .forEach((el) => el.remove()); + document + .querySelectorAll("span.highlighted") + .forEach((el) => el.classList.remove("highlighted")); + const url = new URL(window.location); + url.searchParams.delete("highlight"); + window.history.replaceState({}, "", url); + }, + + /** + * helper function to focus on search bar + */ + focusSearchBar: () => { + document.querySelectorAll("input[name=q]")[0]?.focus(); + }, + + /** + * Initialise the domain index toggle buttons + */ + initDomainIndexTable: () => { + const toggler = (el) => { + const idNumber = el.id.substr(7); + const toggledRows = document.querySelectorAll(`tr.cg-${idNumber}`); + if (el.src.substr(-9) === "minus.png") { + el.src = `${el.src.substr(0, el.src.length - 9)}plus.png`; + toggledRows.forEach((el) => (el.style.display = "none")); + } else { + el.src = `${el.src.substr(0, el.src.length - 8)}minus.png`; + toggledRows.forEach((el) => (el.style.display = "")); + } + }; + + const togglerElements = document.querySelectorAll("img.toggler"); + togglerElements.forEach((el) => + el.addEventListener("click", (event) => toggler(event.currentTarget)) + ); + togglerElements.forEach((el) => (el.style.display = "")); + if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) togglerElements.forEach(toggler); + }, + + initOnKeyListeners: () => { + // only install a listener if it is really needed + if ( + !DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS && + !DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS + ) + return; + + const blacklistedElements = new Set([ + "TEXTAREA", + "INPUT", + "SELECT", + "BUTTON", + ]); + document.addEventListener("keydown", (event) => { + if (blacklistedElements.has(document.activeElement.tagName)) return; // bail for input elements + if (event.altKey || event.ctrlKey || event.metaKey) return; // bail with special keys + + if (!event.shiftKey) { + switch (event.key) { + case "ArrowLeft": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const prevLink = document.querySelector('link[rel="prev"]'); + if (prevLink && prevLink.href) { + window.location.href = prevLink.href; + event.preventDefault(); + } + break; + case "ArrowRight": + if (!DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) break; + + const nextLink = document.querySelector('link[rel="next"]'); + if (nextLink && nextLink.href) { + window.location.href = nextLink.href; + event.preventDefault(); + } + break; + case "Escape": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.hideSearchWords(); + event.preventDefault(); + } + } + + // some keyboard layouts may need Shift to get / + switch (event.key) { + case "/": + if (!DOCUMENTATION_OPTIONS.ENABLE_SEARCH_SHORTCUTS) break; + Documentation.focusSearchBar(); + event.preventDefault(); + } + }); + }, +}; + +// quick alias for translations +const _ = Documentation.gettext; + +_ready(Documentation.init); diff --git a/rp-vp-kid/it/_static/documentation_options.js b/rp-vp-kid/it/_static/documentation_options.js new file mode 100644 index 000000000..860ac2179 --- /dev/null +++ b/rp-vp-kid/it/_static/documentation_options.js @@ -0,0 +1,14 @@ +var DOCUMENTATION_OPTIONS = { + URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), + VERSION: 'version: latest', + LANGUAGE: 'en', + COLLAPSE_INDEX: false, + BUILDER: 'html', + FILE_SUFFIX: '.html', + LINK_SUFFIX: '.html', + HAS_SOURCE: true, + SOURCELINK_SUFFIX: '.txt', + NAVIGATION_WITH_KEYS: false, + SHOW_SEARCH_SUMMARY: true, + ENABLE_SEARCH_SHORTCUTS: false, +}; \ No newline at end of file diff --git a/rp-vp-kid/it/_static/file.png b/rp-vp-kid/it/_static/file.png new file mode 100644 index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3 GIT binary patch literal 286 zcmV+(0pb3MP)s`hMrGg#P~ix$^RISR_I47Y|r1 z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHDfiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8( literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/_static/font/docs-italia.eot b/rp-vp-kid/it/_static/font/docs-italia.eot new file mode 100644 index 0000000000000000000000000000000000000000..169c6163b35c962c959ee57b2c2257fd4ae9f981 GIT binary patch literal 11192 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 k!RrF@`>@1b^2_9IJhy + + +Generated by IcoMoon + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/_static/font/docs-italia.ttf b/rp-vp-kid/it/_static/font/docs-italia.ttf new file mode 100644 index 0000000000000000000000000000000000000000..96a7767f4dd660a0d79cc2678274189f10fb7ad4 GIT binary patch literal 11012 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/_static/font/docs-italia.woff b/rp-vp-kid/it/_static/font/docs-italia.woff new file mode 100644 index 0000000000000000000000000000000000000000..cda2cacb9b6c8afb3c845bff87d03a2b034e3dea GIT binary patch literal 11092 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 B(DMKQ literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/_static/font/italia-icon-font.eot b/rp-vp-kid/it/_static/font/italia-icon-font.eot new file mode 100644 index 0000000000000000000000000000000000000000..5242e53839d7d1643699f0b6fc9a012d4f4d5f56 GIT binary patch literal 23672 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 + + +Copyright (C) 2018 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/_static/font/italia-icon-font.ttf b/rp-vp-kid/it/_static/font/italia-icon-font.ttf new file mode 100644 index 0000000000000000000000000000000000000000..f290bd6e060305044fed76427a695f7cf364aa71 GIT binary patch literal 23472 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 QzV+UM@c%$i^b_(w0enpTDF6Tf literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/_static/font/italia-icon-font.woff b/rp-vp-kid/it/_static/font/italia-icon-font.woff new file mode 100644 index 0000000000000000000000000000000000000000..101f487bc8f60c2e787058058785bbec8f2a43cf GIT binary patch literal 13888 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 Y*7{$1T|uO;#mK-h0I+Vv4*(^b literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/_static/font/italia-icon-font.woff2 b/rp-vp-kid/it/_static/font/italia-icon-font.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..4598d5a9919533a1c6aba2b07bddaec3786da1df GIT binary patch literal 11952 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 CrWaHI literal 0 HcmV?d00001 diff --git a/rp-vp-kid/it/_static/images/agid-logo.svg b/rp-vp-kid/it/_static/images/agid-logo.svg new file mode 100644 index 000000000..a81f5eb84 --- /dev/null +++ b/rp-vp-kid/it/_static/images/agid-logo.svg @@ -0,0 +1,25 @@ + + + +Logo dell&Agenzia per l&Italia Digitale +Emblema della Repubblica Italiana con accanto l&acronimo AGID + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/it/_static/images/may.svg b/rp-vp-kid/it/_static/images/may.svg new file mode 100644 index 000000000..53670ba97 --- /dev/null +++ b/rp-vp-kid/it/_static/images/may.svg @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/it/_static/images/must.svg b/rp-vp-kid/it/_static/images/must.svg new file mode 100644 index 000000000..177c3c51e --- /dev/null +++ b/rp-vp-kid/it/_static/images/must.svg @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/it/_static/images/must_not.svg b/rp-vp-kid/it/_static/images/must_not.svg new file mode 100644 index 000000000..8c0c0d852 --- /dev/null +++ b/rp-vp-kid/it/_static/images/must_not.svg @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/it/_static/images/should.svg b/rp-vp-kid/it/_static/images/should.svg new file mode 100644 index 000000000..c1f35d655 --- /dev/null +++ b/rp-vp-kid/it/_static/images/should.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/it/_static/images/should_not.svg b/rp-vp-kid/it/_static/images/should_not.svg new file mode 100644 index 000000000..88e64a64c --- /dev/null +++ b/rp-vp-kid/it/_static/images/should_not.svg @@ -0,0 +1,52 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/rp-vp-kid/it/_static/images/team-digitale-logo.svg b/rp-vp-kid/it/_static/images/team-digitale-logo.svg new file mode 100644 index 000000000..fa557011d --- /dev/null +++ b/rp-vp-kid/it/_static/images/team-digitale-logo.svg @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/rp-vp-kid/it/_static/jquery-3.6.0.js b/rp-vp-kid/it/_static/jquery-3.6.0.js new file mode 100644 index 000000000..fc6c299b7 --- /dev/null +++ b/rp-vp-kid/it/_static/jquery-3.6.0.js @@ -0,0 +1,10881 @@ +/*! + * jQuery JavaScript Library v3.6.0 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2021-03-02T17:08Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket #14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.0", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.6 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2021-02-16 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rcombinators.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + var adown = a.nodeType === 9 ? a.documentElement : a, + bup = b && b.parentNode; + return a === bup || !!( bup && bup.nodeType === 1 && ( + adown.contains ? + adown.contains( bup ) : + a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 + ) ); + } : + function( a, b ) { + if ( b ) { + while ( ( b = b.parentNode ) ) { + if ( b === a ) { + return true; + } + } + } + return false; + }; + + /* Sorting + ---------------------------------------------------------------------- */ + + // Document order sorting + sortOrder = hasCompare ? + function( a, b ) { + + // Flag for duplicate removal + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + // Sort on method existence if only one input has compareDocumentPosition + var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; + if ( compare ) { + return compare; + } + + // Calculate position if both inputs belong to the same document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + compare = ( a.ownerDocument || a ) == ( b.ownerDocument || b ) ? + a.compareDocumentPosition( b ) : + + // Otherwise we know they are disconnected + 1; + + // Disconnected nodes + if ( compare & 1 || + ( !support.sortDetached && b.compareDocumentPosition( a ) === compare ) ) { + + // Choose the first element that is related to our preferred document + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( a == document || a.ownerDocument == preferredDoc && + contains( preferredDoc, a ) ) { + return -1; + } + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( b == document || b.ownerDocument == preferredDoc && + contains( preferredDoc, b ) ) { + return 1; + } + + // Maintain original order + return sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + } + + return compare & 4 ? -1 : 1; + } : + function( a, b ) { + + // Exit early if the nodes are identical + if ( a === b ) { + hasDuplicate = true; + return 0; + } + + var cur, + i = 0, + aup = a.parentNode, + bup = b.parentNode, + ap = [ a ], + bp = [ b ]; + + // Parentless nodes are either documents or disconnected + if ( !aup || !bup ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + return a == document ? -1 : + b == document ? 1 : + /* eslint-enable eqeqeq */ + aup ? -1 : + bup ? 1 : + sortInput ? + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : + 0; + + // If the nodes are siblings, we can do a quick check + } else if ( aup === bup ) { + return siblingCheck( a, b ); + } + + // Otherwise we need full lists of their ancestors for comparison + cur = a; + while ( ( cur = cur.parentNode ) ) { + ap.unshift( cur ); + } + cur = b; + while ( ( cur = cur.parentNode ) ) { + bp.unshift( cur ); + } + + // Walk down the tree looking for a discrepancy + while ( ap[ i ] === bp[ i ] ) { + i++; + } + + return i ? + + // Do a sibling check if the nodes have a common ancestor + siblingCheck( ap[ i ], bp[ i ] ) : + + // Otherwise nodes in our document sort first + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + /* eslint-disable eqeqeq */ + ap[ i ] == preferredDoc ? -1 : + bp[ i ] == preferredDoc ? 1 : + /* eslint-enable eqeqeq */ + 0; + }; + + return document; +}; + +Sizzle.matches = function( expr, elements ) { + return Sizzle( expr, null, null, elements ); +}; + +Sizzle.matchesSelector = function( elem, expr ) { + setDocument( elem ); + + if ( support.matchesSelector && documentIsHTML && + !nonnativeSelectorCache[ expr + " " ] && + ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && + ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { + + try { + var ret = matches.call( elem, expr ); + + // IE 9's matchesSelector returns false on disconnected nodes + if ( ret || support.disconnectedMatch || + + // As well, disconnected nodes are said to be in a document + // fragment in IE 9 + elem.document && elem.document.nodeType !== 11 ) { + return ret; + } + } catch ( e ) { + nonnativeSelectorCache( expr, true ); + } + } + + return Sizzle( expr, document, null, [ elem ] ).length > 0; +}; + +Sizzle.contains = function( context, elem ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( context.ownerDocument || context ) != document ) { + setDocument( context ); + } + return contains( context, elem ); +}; + +Sizzle.attr = function( elem, name ) { + + // Set document vars if needed + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( ( elem.ownerDocument || elem ) != document ) { + setDocument( elem ); + } + + var fn = Expr.attrHandle[ name.toLowerCase() ], + + // Don't get fooled by Object.prototype properties (jQuery #13807) + val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? + fn( elem, name, !documentIsHTML ) : + undefined; + + return val !== undefined ? + val : + support.attributes || !documentIsHTML ? + elem.getAttribute( name ) : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; +}; + +Sizzle.escape = function( sel ) { + return ( sel + "" ).replace( rcssescape, fcssescape ); +}; + +Sizzle.error = function( msg ) { + throw new Error( "Syntax error, unrecognized expression: " + msg ); +}; + +/** + * Document sorting and removing duplicates + * @param {ArrayLike} results + */ +Sizzle.uniqueSort = function( results ) { + var elem, + duplicates = [], + j = 0, + i = 0; + + // Unless we *know* we can detect duplicates, assume their presence + hasDuplicate = !support.detectDuplicates; + sortInput = !support.sortStable && results.slice( 0 ); + results.sort( sortOrder ); + + if ( hasDuplicate ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem === results[ i ] ) { + j = duplicates.push( i ); + } + } + while ( j-- ) { + results.splice( duplicates[ j ], 1 ); + } + } + + // Clear input after sorting to release objects + // See https://github.com/jquery/sizzle/pull/225 + sortInput = null; + + return results; +}; + +/** + * Utility function for retrieving the text value of an array of DOM nodes + * @param {Array|Element} elem + */ +getText = Sizzle.getText = function( elem ) { + var node, + ret = "", + i = 0, + nodeType = elem.nodeType; + + if ( !nodeType ) { + + // If no nodeType, this is expected to be an array + while ( ( node = elem[ i++ ] ) ) { + + // Do not traverse comment nodes + ret += getText( node ); + } + } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + + // Use textContent for elements + // innerText usage removed for consistency of new lines (jQuery #11153) + if ( typeof elem.textContent === "string" ) { + return elem.textContent; + } else { + + // Traverse its children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + ret += getText( elem ); + } + } + } else if ( nodeType === 3 || nodeType === 4 ) { + return elem.nodeValue; + } + + // Do not include comment or processing instruction nodes + + return ret; +}; + +Expr = Sizzle.selectors = { + + // Can be adjusted by the user + cacheLength: 50, + + createPseudo: markFunction, + + match: matchExpr, + + attrHandle: {}, + + find: {}, + + relative: { + ">": { dir: "parentNode", first: true }, + " ": { dir: "parentNode" }, + "+": { dir: "previousSibling", first: true }, + "~": { dir: "previousSibling" } + }, + + preFilter: { + "ATTR": function( match ) { + match[ 1 ] = match[ 1 ].replace( runescape, funescape ); + + // Move the given value to match[3] whether quoted or unquoted + match[ 3 ] = ( match[ 3 ] || match[ 4 ] || + match[ 5 ] || "" ).replace( runescape, funescape ); + + if ( match[ 2 ] === "~=" ) { + match[ 3 ] = " " + match[ 3 ] + " "; + } + + return match.slice( 0, 4 ); + }, + + "CHILD": function( match ) { + + /* matches from matchExpr["CHILD"] + 1 type (only|nth|...) + 2 what (child|of-type) + 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) + 4 xn-component of xn+y argument ([+-]?\d*n|) + 5 sign of xn-component + 6 x of xn-component + 7 sign of y-component + 8 y of y-component + */ + match[ 1 ] = match[ 1 ].toLowerCase(); + + if ( match[ 1 ].slice( 0, 3 ) === "nth" ) { + + // nth-* requires argument + if ( !match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + // numeric x and y parameters for Expr.filter.CHILD + // remember that false/true cast respectively to 0/1 + match[ 4 ] = +( match[ 4 ] ? + match[ 5 ] + ( match[ 6 ] || 1 ) : + 2 * ( match[ 3 ] === "even" || match[ 3 ] === "odd" ) ); + match[ 5 ] = +( ( match[ 7 ] + match[ 8 ] ) || match[ 3 ] === "odd" ); + + // other types prohibit arguments + } else if ( match[ 3 ] ) { + Sizzle.error( match[ 0 ] ); + } + + return match; + }, + + "PSEUDO": function( match ) { + var excess, + unquoted = !match[ 6 ] && match[ 2 ]; + + if ( matchExpr[ "CHILD" ].test( match[ 0 ] ) ) { + return null; + } + + // Accept quoted arguments as-is + if ( match[ 3 ] ) { + match[ 2 ] = match[ 4 ] || match[ 5 ] || ""; + + // Strip excess characters from unquoted arguments + } else if ( unquoted && rpseudo.test( unquoted ) && + + // Get excess from tokenize (recursively) + ( excess = tokenize( unquoted, true ) ) && + + // advance to the next closing parenthesis + ( excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length ) ) { + + // excess is a negative index + match[ 0 ] = match[ 0 ].slice( 0, excess ); + match[ 2 ] = unquoted.slice( 0, excess ); + } + + // Return only captures needed by the pseudo filter method (type and argument) + return match.slice( 0, 3 ); + } + }, + + filter: { + + "TAG": function( nodeNameSelector ) { + var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); + return nodeNameSelector === "*" ? + function() { + return true; + } : + function( elem ) { + return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; + }; + }, + + "CLASS": function( className ) { + var pattern = classCache[ className + " " ]; + + return pattern || + ( pattern = new RegExp( "(^|" + whitespace + + ")" + className + "(" + whitespace + "|$)" ) ) && classCache( + className, function( elem ) { + return pattern.test( + typeof elem.className === "string" && elem.className || + typeof elem.getAttribute !== "undefined" && + elem.getAttribute( "class" ) || + "" + ); + } ); + }, + + "ATTR": function( name, operator, check ) { + return function( elem ) { + var result = Sizzle.attr( elem, name ); + + if ( result == null ) { + return operator === "!="; + } + if ( !operator ) { + return true; + } + + result += ""; + + /* eslint-disable max-len */ + + return operator === "=" ? result === check : + operator === "!=" ? result !== check : + operator === "^=" ? check && result.indexOf( check ) === 0 : + operator === "*=" ? check && result.indexOf( check ) > -1 : + operator === "$=" ? check && result.slice( -check.length ) === check : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : + operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : + false; + /* eslint-enable max-len */ + + }; + }, + + "CHILD": function( type, what, _argument, first, last ) { + var simple = type.slice( 0, 3 ) !== "nth", + forward = type.slice( -4 ) !== "last", + ofType = what === "of-type"; + + return first === 1 && last === 0 ? + + // Shortcut for :nth-*(n) + function( elem ) { + return !!elem.parentNode; + } : + + function( elem, _context, xml ) { + var cache, uniqueCache, outerCache, node, nodeIndex, start, + dir = simple !== forward ? "nextSibling" : "previousSibling", + parent = elem.parentNode, + name = ofType && elem.nodeName.toLowerCase(), + useCache = !xml && !ofType, + diff = false; + + if ( parent ) { + + // :(first|last|only)-(child|of-type) + if ( simple ) { + while ( dir ) { + node = elem; + while ( ( node = node[ dir ] ) ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + + return false; + } + } + + // Reverse direction for :only-* (if we haven't yet done so) + start = dir = type === "only" && !start && "nextSibling"; + } + return true; + } + + start = [ forward ? parent.firstChild : parent.lastChild ]; + + // non-xml :nth-child(...) stores cache data on `parent` + if ( forward && useCache ) { + + // Seek `elem` from a previously-cached index + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; + node = nodeIndex && parent.childNodes[ nodeIndex ]; + + while ( ( node = ++nodeIndex && node && node[ dir ] || + + // Fallback to seeking `elem` from the start + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + // When found, cache indexes on `parent` and break + if ( node.nodeType === 1 && ++diff && node === elem ) { + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; + break; + } + } + + } else { + + // Use previously-cached element index if available + if ( useCache ) { + + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } + + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + + // Use the same loop as above to seek `elem` from the start + while ( ( node = ++nodeIndex && node && node[ dir ] || + ( diff = nodeIndex = 0 ) || start.pop() ) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || + ( node[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + ( outerCache[ node.uniqueID ] = {} ); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } + } + } + } + } + + // Incorporate the offset, then check against cycle size + diff -= last; + return diff === first || ( diff % first === 0 && diff / first >= 0 ); + } + }; + }, + + "PSEUDO": function( pseudo, argument ) { + + // pseudo-class names are case-insensitive + // http://www.w3.org/TR/selectors/#pseudo-classes + // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters + // Remember that setFilters inherits from pseudos + var args, + fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || + Sizzle.error( "unsupported pseudo: " + pseudo ); + + // The user may use createPseudo to indicate that + // arguments are needed to create the filter function + // just as Sizzle does + if ( fn[ expando ] ) { + return fn( argument ); + } + + // But maintain support for old signatures + if ( fn.length > 1 ) { + args = [ pseudo, pseudo, "", argument ]; + return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? + markFunction( function( seed, matches ) { + var idx, + matched = fn( seed, argument ), + i = matched.length; + while ( i-- ) { + idx = indexOf( seed, matched[ i ] ); + seed[ idx ] = !( matches[ idx ] = matched[ i ] ); + } + } ) : + function( elem ) { + return fn( elem, 0, args ); + }; + } + + return fn; + } + }, + + pseudos: { + + // Potentially complex pseudos + "not": markFunction( function( selector ) { + + // Trim the selector passed to compile + // to avoid treating leading and trailing + // spaces as combinators + var input = [], + results = [], + matcher = compile( selector.replace( rtrim, "$1" ) ); + + return matcher[ expando ] ? + markFunction( function( seed, matches, _context, xml ) { + var elem, + unmatched = matcher( seed, null, xml, [] ), + i = seed.length; + + // Match elements unmatched by `matcher` + while ( i-- ) { + if ( ( elem = unmatched[ i ] ) ) { + seed[ i ] = !( matches[ i ] = elem ); + } + } + } ) : + function( elem, _context, xml ) { + input[ 0 ] = elem; + matcher( input, null, xml, results ); + + // Don't keep the element (issue #299) + input[ 0 ] = null; + return !results.pop(); + }; + } ), + + "has": markFunction( function( selector ) { + return function( elem ) { + return Sizzle( selector, elem ).length > 0; + }; + } ), + + "contains": markFunction( function( text ) { + text = text.replace( runescape, funescape ); + return function( elem ) { + return ( elem.textContent || getText( elem ) ).indexOf( text ) > -1; + }; + } ), + + // "Whether an element is represented by a :lang() selector + // is based solely on the element's language value + // being equal to the identifier C, + // or beginning with the identifier C immediately followed by "-". + // The matching of C against the element's language value is performed case-insensitively. + // The identifier C does not have to be a valid language name." + // http://www.w3.org/TR/selectors/#lang-pseudo + "lang": markFunction( function( lang ) { + + // lang value must be a valid identifier + if ( !ridentifier.test( lang || "" ) ) { + Sizzle.error( "unsupported lang: " + lang ); + } + lang = lang.replace( runescape, funescape ).toLowerCase(); + return function( elem ) { + var elemLang; + do { + if ( ( elemLang = documentIsHTML ? + elem.lang : + elem.getAttribute( "xml:lang" ) || elem.getAttribute( "lang" ) ) ) { + + elemLang = elemLang.toLowerCase(); + return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; + } + } while ( ( elem = elem.parentNode ) && elem.nodeType === 1 ); + return false; + }; + } ), + + // Miscellaneous + "target": function( elem ) { + var hash = window.location && window.location.hash; + return hash && hash.slice( 1 ) === elem.id; + }, + + "root": function( elem ) { + return elem === docElem; + }, + + "focus": function( elem ) { + return elem === document.activeElement && + ( !document.hasFocus || document.hasFocus() ) && + !!( elem.type || elem.href || ~elem.tabIndex ); + }, + + // Boolean properties + "enabled": createDisabledPseudo( false ), + "disabled": createDisabledPseudo( true ), + + "checked": function( elem ) { + + // In CSS3, :checked should return both checked and selected elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + var nodeName = elem.nodeName.toLowerCase(); + return ( nodeName === "input" && !!elem.checked ) || + ( nodeName === "option" && !!elem.selected ); + }, + + "selected": function( elem ) { + + // Accessing this property makes selected-by-default + // options in Safari work properly + if ( elem.parentNode ) { + // eslint-disable-next-line no-unused-expressions + elem.parentNode.selectedIndex; + } + + return elem.selected === true; + }, + + // Contents + "empty": function( elem ) { + + // http://www.w3.org/TR/selectors/#empty-pseudo + // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), + // but not by others (comment: 8; processing instruction: 7; etc.) + // nodeType < 6 works because attributes (2) do not appear as children + for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { + if ( elem.nodeType < 6 ) { + return false; + } + } + return true; + }, + + "parent": function( elem ) { + return !Expr.pseudos[ "empty" ]( elem ); + }, + + // Element/input types + "header": function( elem ) { + return rheader.test( elem.nodeName ); + }, + + "input": function( elem ) { + return rinputs.test( elem.nodeName ); + }, + + "button": function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === "button" || name === "button"; + }, + + "text": function( elem ) { + var attr; + return elem.nodeName.toLowerCase() === "input" && + elem.type === "text" && + + // Support: IE<8 + // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" + ( ( attr = elem.getAttribute( "type" ) ) == null || + attr.toLowerCase() === "text" ); + }, + + // Position-in-collection + "first": createPositionalPseudo( function() { + return [ 0 ]; + } ), + + "last": createPositionalPseudo( function( _matchIndexes, length ) { + return [ length - 1 ]; + } ), + + "eq": createPositionalPseudo( function( _matchIndexes, length, argument ) { + return [ argument < 0 ? argument + length : argument ]; + } ), + + "even": createPositionalPseudo( function( matchIndexes, length ) { + var i = 0; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "odd": createPositionalPseudo( function( matchIndexes, length ) { + var i = 1; + for ( ; i < length; i += 2 ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "lt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? + argument + length : + argument > length ? + length : + argument; + for ( ; --i >= 0; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ), + + "gt": createPositionalPseudo( function( matchIndexes, length, argument ) { + var i = argument < 0 ? argument + length : argument; + for ( ; ++i < length; ) { + matchIndexes.push( i ); + } + return matchIndexes; + } ) + } +}; + +Expr.pseudos[ "nth" ] = Expr.pseudos[ "eq" ]; + +// Add button/input type pseudos +for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { + Expr.pseudos[ i ] = createInputPseudo( i ); +} +for ( i in { submit: true, reset: true } ) { + Expr.pseudos[ i ] = createButtonPseudo( i ); +} + +// Easy API for creating new setFilters +function setFilters() {} +setFilters.prototype = Expr.filters = Expr.pseudos; +Expr.setFilters = new setFilters(); + +tokenize = Sizzle.tokenize = function( selector, parseOnly ) { + var matched, match, tokens, type, + soFar, groups, preFilters, + cached = tokenCache[ selector + " " ]; + + if ( cached ) { + return parseOnly ? 0 : cached.slice( 0 ); + } + + soFar = selector; + groups = []; + preFilters = Expr.preFilter; + + while ( soFar ) { + + // Comma and first run + if ( !matched || ( match = rcomma.exec( soFar ) ) ) { + if ( match ) { + + // Don't consume trailing commas as valid + soFar = soFar.slice( match[ 0 ].length ) || soFar; + } + groups.push( ( tokens = [] ) ); + } + + matched = false; + + // Combinators + if ( ( match = rcombinators.exec( soFar ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + + // Cast descendant combinators to space + type: match[ 0 ].replace( rtrim, " " ) + } ); + soFar = soFar.slice( matched.length ); + } + + // Filters + for ( type in Expr.filter ) { + if ( ( match = matchExpr[ type ].exec( soFar ) ) && ( !preFilters[ type ] || + ( match = preFilters[ type ]( match ) ) ) ) { + matched = match.shift(); + tokens.push( { + value: matched, + type: type, + matches: match + } ); + soFar = soFar.slice( matched.length ); + } + } + + if ( !matched ) { + break; + } + } + + // Return the length of the invalid excess + // if we're just parsing + // Otherwise, throw an error or return tokens + return parseOnly ? + soFar.length : + soFar ? + Sizzle.error( selector ) : + + // Cache the tokens + tokenCache( selector, groups ).slice( 0 ); +}; + +function toSelector( tokens ) { + var i = 0, + len = tokens.length, + selector = ""; + for ( ; i < len; i++ ) { + selector += tokens[ i ].value; + } + return selector; +} + +function addCombinator( matcher, combinator, base ) { + var dir = combinator.dir, + skip = combinator.next, + key = skip || dir, + checkNonElements = base && key === "parentNode", + doneName = done++; + + return combinator.first ? + + // Check against closest ancestor/preceding element + function( elem, context, xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + return matcher( elem, context, xml ); + } + } + return false; + } : + + // Check against all ancestor/preceding elements + function( elem, context, xml ) { + var oldCache, uniqueCache, outerCache, + newCache = [ dirruns, doneName ]; + + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching + if ( xml ) { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + if ( matcher( elem, context, xml ) ) { + return true; + } + } + } + } else { + while ( ( elem = elem[ dir ] ) ) { + if ( elem.nodeType === 1 || checkNonElements ) { + outerCache = elem[ expando ] || ( elem[ expando ] = {} ); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || + ( outerCache[ elem.uniqueID ] = {} ); + + if ( skip && skip === elem.nodeName.toLowerCase() ) { + elem = elem[ dir ] || elem; + } else if ( ( oldCache = uniqueCache[ key ] ) && + oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { + + // Assign to newCache so results back-propagate to previous elements + return ( newCache[ 2 ] = oldCache[ 2 ] ); + } else { + + // Reuse newcache so results back-propagate to previous elements + uniqueCache[ key ] = newCache; + + // A match means we're done; a fail means we have to keep checking + if ( ( newCache[ 2 ] = matcher( elem, context, xml ) ) ) { + return true; + } + } + } + } + } + return false; + }; +} + +function elementMatcher( matchers ) { + return matchers.length > 1 ? + function( elem, context, xml ) { + var i = matchers.length; + while ( i-- ) { + if ( !matchers[ i ]( elem, context, xml ) ) { + return false; + } + } + return true; + } : + matchers[ 0 ]; +} + +function multipleContexts( selector, contexts, results ) { + var i = 0, + len = contexts.length; + for ( ; i < len; i++ ) { + Sizzle( selector, contexts[ i ], results ); + } + return results; +} + +function condense( unmatched, map, filter, context, xml ) { + var elem, + newUnmatched = [], + i = 0, + len = unmatched.length, + mapped = map != null; + + for ( ; i < len; i++ ) { + if ( ( elem = unmatched[ i ] ) ) { + if ( !filter || filter( elem, context, xml ) ) { + newUnmatched.push( elem ); + if ( mapped ) { + map.push( i ); + } + } + } + } + + return newUnmatched; +} + +function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { + if ( postFilter && !postFilter[ expando ] ) { + postFilter = setMatcher( postFilter ); + } + if ( postFinder && !postFinder[ expando ] ) { + postFinder = setMatcher( postFinder, postSelector ); + } + return markFunction( function( seed, results, context, xml ) { + var temp, i, elem, + preMap = [], + postMap = [], + preexisting = results.length, + + // Get initial elements from seed or context + elems = seed || multipleContexts( + selector || "*", + context.nodeType ? [ context ] : context, + [] + ), + + // Prefilter to get matcher input, preserving a map for seed-results synchronization + matcherIn = preFilter && ( seed || !selector ) ? + condense( elems, preMap, preFilter, context, xml ) : + elems, + + matcherOut = matcher ? + + // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, + postFinder || ( seed ? preFilter : preexisting || postFilter ) ? + + // ...intermediate processing is necessary + [] : + + // ...otherwise use results directly + results : + matcherIn; + + // Find primary matches + if ( matcher ) { + matcher( matcherIn, matcherOut, context, xml ); + } + + // Apply postFilter + if ( postFilter ) { + temp = condense( matcherOut, postMap ); + postFilter( temp, [], context, xml ); + + // Un-match failing elements by moving them back to matcherIn + i = temp.length; + while ( i-- ) { + if ( ( elem = temp[ i ] ) ) { + matcherOut[ postMap[ i ] ] = !( matcherIn[ postMap[ i ] ] = elem ); + } + } + } + + if ( seed ) { + if ( postFinder || preFilter ) { + if ( postFinder ) { + + // Get the final matcherOut by condensing this intermediate into postFinder contexts + temp = []; + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) ) { + + // Restore matcherIn since elem is not yet a final match + temp.push( ( matcherIn[ i ] = elem ) ); + } + } + postFinder( null, ( matcherOut = [] ), temp, xml ); + } + + // Move matched elements from seed to results to keep them synchronized + i = matcherOut.length; + while ( i-- ) { + if ( ( elem = matcherOut[ i ] ) && + ( temp = postFinder ? indexOf( seed, elem ) : preMap[ i ] ) > -1 ) { + + seed[ temp ] = !( results[ temp ] = elem ); + } + } + } + + // Add elements to results, through postFinder if defined + } else { + matcherOut = condense( + matcherOut === results ? + matcherOut.splice( preexisting, matcherOut.length ) : + matcherOut + ); + if ( postFinder ) { + postFinder( null, results, matcherOut, xml ); + } else { + push.apply( results, matcherOut ); + } + } + } ); +} + +function matcherFromTokens( tokens ) { + var checkContext, matcher, j, + len = tokens.length, + leadingRelative = Expr.relative[ tokens[ 0 ].type ], + implicitRelative = leadingRelative || Expr.relative[ " " ], + i = leadingRelative ? 1 : 0, + + // The foundational matcher ensures that elements are reachable from top-level context(s) + matchContext = addCombinator( function( elem ) { + return elem === checkContext; + }, implicitRelative, true ), + matchAnyContext = addCombinator( function( elem ) { + return indexOf( checkContext, elem ) > -1; + }, implicitRelative, true ), + matchers = [ function( elem, context, xml ) { + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + ( checkContext = context ).nodeType ? + matchContext( elem, context, xml ) : + matchAnyContext( elem, context, xml ) ); + + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; + } ]; + + for ( ; i < len; i++ ) { + if ( ( matcher = Expr.relative[ tokens[ i ].type ] ) ) { + matchers = [ addCombinator( elementMatcher( matchers ), matcher ) ]; + } else { + matcher = Expr.filter[ tokens[ i ].type ].apply( null, tokens[ i ].matches ); + + // Return special upon seeing a positional matcher + if ( matcher[ expando ] ) { + + // Find the next relative operator (if any) for proper handling + j = ++i; + for ( ; j < len; j++ ) { + if ( Expr.relative[ tokens[ j ].type ] ) { + break; + } + } + return setMatcher( + i > 1 && elementMatcher( matchers ), + i > 1 && toSelector( + + // If the preceding token was a descendant combinator, insert an implicit any-element `*` + tokens + .slice( 0, i - 1 ) + .concat( { value: tokens[ i - 2 ].type === " " ? "*" : "" } ) + ).replace( rtrim, "$1" ), + matcher, + i < j && matcherFromTokens( tokens.slice( i, j ) ), + j < len && matcherFromTokens( ( tokens = tokens.slice( j ) ) ), + j < len && toSelector( tokens ) + ); + } + matchers.push( matcher ); + } + } + + return elementMatcher( matchers ); +} + +function matcherFromGroupMatchers( elementMatchers, setMatchers ) { + var bySet = setMatchers.length > 0, + byElement = elementMatchers.length > 0, + superMatcher = function( seed, context, xml, results, outermost ) { + var elem, j, matcher, + matchedCount = 0, + i = "0", + unmatched = seed && [], + setMatched = [], + contextBackup = outermostContext, + + // We must always have either seed elements or outermost context + elems = seed || byElement && Expr.find[ "TAG" ]( "*", outermost ), + + // Use integer dirruns iff this is the outermost matcher + dirrunsUnique = ( dirruns += contextBackup == null ? 1 : Math.random() || 0.1 ), + len = elems.length; + + if ( outermost ) { + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + outermostContext = context == document || context || outermost; + } + + // Add elements passing elementMatchers directly to results + // Support: IE<9, Safari + // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id + for ( ; i !== len && ( elem = elems[ i ] ) != null; i++ ) { + if ( byElement && elem ) { + j = 0; + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( !context && elem.ownerDocument != document ) { + setDocument( elem ); + xml = !documentIsHTML; + } + while ( ( matcher = elementMatchers[ j++ ] ) ) { + if ( matcher( elem, context || document, xml ) ) { + results.push( elem ); + break; + } + } + if ( outermost ) { + dirruns = dirrunsUnique; + } + } + + // Track unmatched elements for set filters + if ( bySet ) { + + // They will have gone through all possible matchers + if ( ( elem = !matcher && elem ) ) { + matchedCount--; + } + + // Lengthen the array for every element, matched or not + if ( seed ) { + unmatched.push( elem ); + } + } + } + + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. + matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. + if ( bySet && i !== matchedCount ) { + j = 0; + while ( ( matcher = setMatchers[ j++ ] ) ) { + matcher( unmatched, setMatched, context, xml ); + } + + if ( seed ) { + + // Reintegrate element matches to eliminate the need for sorting + if ( matchedCount > 0 ) { + while ( i-- ) { + if ( !( unmatched[ i ] || setMatched[ i ] ) ) { + setMatched[ i ] = pop.call( results ); + } + } + } + + // Discard index placeholder values to get only actual matches + setMatched = condense( setMatched ); + } + + // Add matches to results + push.apply( results, setMatched ); + + // Seedless set matches succeeding multiple successful matchers stipulate sorting + if ( outermost && !seed && setMatched.length > 0 && + ( matchedCount + setMatchers.length ) > 1 ) { + + Sizzle.uniqueSort( results ); + } + } + + // Override manipulation of globals by nested matchers + if ( outermost ) { + dirruns = dirrunsUnique; + outermostContext = contextBackup; + } + + return unmatched; + }; + + return bySet ? + markFunction( superMatcher ) : + superMatcher; +} + +compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { + var i, + setMatchers = [], + elementMatchers = [], + cached = compilerCache[ selector + " " ]; + + if ( !cached ) { + + // Generate a function of recursive functions that can be used to check each element + if ( !match ) { + match = tokenize( selector ); + } + i = match.length; + while ( i-- ) { + cached = matcherFromTokens( match[ i ] ); + if ( cached[ expando ] ) { + setMatchers.push( cached ); + } else { + elementMatchers.push( cached ); + } + } + + // Cache the compiled function + cached = compilerCache( + selector, + matcherFromGroupMatchers( elementMatchers, setMatchers ) + ); + + // Save selector and tokenization + cached.selector = selector; + } + return cached; +}; + +/** + * A low-level selection function that works with Sizzle's compiled + * selector functions + * @param {String|Function} selector A selector or a pre-compiled + * selector function built with Sizzle.compile + * @param {Element} context + * @param {Array} [results] + * @param {Array} [seed] A set of elements to match against + */ +select = Sizzle.select = function( selector, context, results, seed ) { + var i, tokens, token, type, find, + compiled = typeof selector === "function" && selector, + match = !seed && tokenize( ( selector = compiled.selector || selector ) ); + + results = results || []; + + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) + if ( match.length === 1 ) { + + // Reduce context if the leading compound selector is an ID + tokens = match[ 0 ] = match[ 0 ].slice( 0 ); + if ( tokens.length > 2 && ( token = tokens[ 0 ] ).type === "ID" && + context.nodeType === 9 && documentIsHTML && Expr.relative[ tokens[ 1 ].type ] ) { + + context = ( Expr.find[ "ID" ]( token.matches[ 0 ] + .replace( runescape, funescape ), context ) || [] )[ 0 ]; + if ( !context ) { + return results; + + // Precompiled matchers will still verify ancestry, so step up a level + } else if ( compiled ) { + context = context.parentNode; + } + + selector = selector.slice( tokens.shift().value.length ); + } + + // Fetch a seed set for right-to-left matching + i = matchExpr[ "needsContext" ].test( selector ) ? 0 : tokens.length; + while ( i-- ) { + token = tokens[ i ]; + + // Abort if we hit a combinator + if ( Expr.relative[ ( type = token.type ) ] ) { + break; + } + if ( ( find = Expr.find[ type ] ) ) { + + // Search, expanding context for leading sibling combinators + if ( ( seed = find( + token.matches[ 0 ].replace( runescape, funescape ), + rsibling.test( tokens[ 0 ].type ) && testContext( context.parentNode ) || + context + ) ) ) { + + // If seed is empty or no tokens remain, we can return early + tokens.splice( i, 1 ); + selector = seed.length && toSelector( tokens ); + if ( !selector ) { + push.apply( results, seed ); + return results; + } + + break; + } + } + } + } + + // Compile and execute a filtering function if one is not provided + // Provide `match` to avoid retokenization if we modified the selector above + ( compiled || compile( selector, match ) )( + seed, + context, + !documentIsHTML, + results, + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context + ); + return results; +}; + +// One-time assignments + +// Sort stability +support.sortStable = expando.split( "" ).sort( sortOrder ).join( "" ) === expando; + +// Support: Chrome 14-35+ +// Always assume duplicates if they aren't passed to the comparison function +support.detectDuplicates = !!hasDuplicate; + +// Initialize against the default document +setDocument(); + +// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) +// Detached nodes confoundingly follow *each other* +support.sortDetached = assert( function( el ) { + + // Should return 1, but returns 4 (following) + return el.compareDocumentPosition( document.createElement( "fieldset" ) ) & 1; +} ); + +// Support: IE<8 +// Prevent attribute/property "interpolation" +// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx +if ( !assert( function( el ) { + el.innerHTML = ""; + return el.firstChild.getAttribute( "href" ) === "#"; +} ) ) { + addHandle( "type|href|height|width", function( elem, name, isXML ) { + if ( !isXML ) { + return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); + } + } ); +} + +// Support: IE<9 +// Use defaultValue in place of getAttribute("value") +if ( !support.attributes || !assert( function( el ) { + el.innerHTML = ""; + el.firstChild.setAttribute( "value", "" ); + return el.firstChild.getAttribute( "value" ) === ""; +} ) ) { + addHandle( "value", function( elem, _name, isXML ) { + if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { + return elem.defaultValue; + } + } ); +} + +// Support: IE<9 +// Use getAttributeNode to fetch booleans when getAttribute lies +if ( !assert( function( el ) { + return el.getAttribute( "disabled" ) == null; +} ) ) { + addHandle( booleans, function( elem, name, isXML ) { + var val; + if ( !isXML ) { + return elem[ name ] === true ? name.toLowerCase() : + ( val = elem.getAttributeNode( name ) ) && val.specified ? + val.value : + null; + } + } ); +} + +return Sizzle; + +} )( window ); + + + +jQuery.find = Sizzle; +jQuery.expr = Sizzle.selectors; + +// Deprecated +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; +jQuery.text = Sizzle.getText; +jQuery.isXMLDoc = Sizzle.isXML; +jQuery.contains = Sizzle.contains; +jQuery.escapeSelector = Sizzle.escape; + + + + +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + +var rneedsContext = jQuery.expr.match.needsContext; + + + +function nodeName( elem, name ) { + + return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); + +} +var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i ); + + + +// Implement the identical functionality for filter and not +function winnow( elements, qualifier, not ) { + if ( isFunction( qualifier ) ) { + return jQuery.grep( elements, function( elem, i ) { + return !!qualifier.call( elem, i, elem ) !== not; + } ); + } + + // Single element + if ( qualifier.nodeType ) { + return jQuery.grep( elements, function( elem ) { + return ( elem === qualifier ) !== not; + } ); + } + + // Arraylike of elements (jQuery, arguments, Array) + if ( typeof qualifier !== "string" ) { + return jQuery.grep( elements, function( elem ) { + return ( indexOf.call( qualifier, elem ) > -1 ) !== not; + } ); + } + + // Filtered directly for both simple and complex selectors + return jQuery.filter( qualifier, elements, not ); +} + +jQuery.filter = function( expr, elems, not ) { + var elem = elems[ 0 ]; + + if ( not ) { + expr = ":not(" + expr + ")"; + } + + if ( elems.length === 1 && elem.nodeType === 1 ) { + return jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : []; + } + + return jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { + return elem.nodeType === 1; + } ) ); +}; + +jQuery.fn.extend( { + find: function( selector ) { + var i, ret, + len = this.length, + self = this; + + if ( typeof selector !== "string" ) { + return this.pushStack( jQuery( selector ).filter( function() { + for ( i = 0; i < len; i++ ) { + if ( jQuery.contains( self[ i ], this ) ) { + return true; + } + } + } ) ); + } + + ret = this.pushStack( [] ); + + for ( i = 0; i < len; i++ ) { + jQuery.find( selector, self[ i ], ret ); + } + + return len > 1 ? jQuery.uniqueSort( ret ) : ret; + }, + filter: function( selector ) { + return this.pushStack( winnow( this, selector || [], false ) ); + }, + not: function( selector ) { + return this.pushStack( winnow( this, selector || [], true ) ); + }, + is: function( selector ) { + return !!winnow( + this, + + // If this is a positional/relative selector, check membership in the returned set + // so $("p:first").is("p:last") won't return true for a doc with two "p". + typeof selector === "string" && rneedsContext.test( selector ) ? + jQuery( selector ) : + selector || [], + false + ).length; + } +} ); + + +// Initialize a jQuery object + + +// A central reference to the root jQuery(document) +var rootjQuery, + + // A simple way to check for HTML strings + // Prioritize #id over to avoid XSS via location.hash (#9521) + // Strict HTML recognition (#11290: must start with <) + // Shortcut simple #id case for speed + rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/, + + init = jQuery.fn.init = function( selector, context, root ) { + var match, elem; + + // HANDLE: $(""), $(null), $(undefined), $(false) + if ( !selector ) { + return this; + } + + // Method init() accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + + // Handle HTML strings + if ( typeof selector === "string" ) { + if ( selector[ 0 ] === "<" && + selector[ selector.length - 1 ] === ">" && + selector.length >= 3 ) { + + // Assume that strings that start and end with <> are HTML and skip the regex check + match = [ null, selector, null ]; + + } else { + match = rquickExpr.exec( selector ); + } + + // Match html or make sure no context is specified for #id + if ( match && ( match[ 1 ] || !context ) ) { + + // HANDLE: $(html) -> $(array) + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; + + // Option to run scripts is true for back-compat + // Intentionally let the error be thrown if parseHTML is not present + jQuery.merge( this, jQuery.parseHTML( + match[ 1 ], + context && context.nodeType ? context.ownerDocument || context : document, + true + ) ); + + // HANDLE: $(html, props) + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { + for ( match in context ) { + + // Properties of context are called as methods if possible + if ( isFunction( this[ match ] ) ) { + this[ match ]( context[ match ] ); + + // ...and otherwise set as attributes + } else { + this.attr( match, context[ match ] ); + } + } + } + + return this; + + // HANDLE: $(#id) + } else { + elem = document.getElementById( match[ 2 ] ); + + if ( elem ) { + + // Inject the element directly into the jQuery object + this[ 0 ] = elem; + this.length = 1; + } + return this; + } + + // HANDLE: $(expr, $(...)) + } else if ( !context || context.jquery ) { + return ( context || root ).find( selector ); + + // HANDLE: $(expr, context) + // (which is just equivalent to: $(context).find(expr) + } else { + return this.constructor( context ).find( selector ); + } + + // HANDLE: $(DOMElement) + } else if ( selector.nodeType ) { + this[ 0 ] = selector; + this.length = 1; + return this; + + // HANDLE: $(function) + // Shortcut for document ready + } else if ( isFunction( selector ) ) { + return root.ready !== undefined ? + root.ready( selector ) : + + // Execute immediately if ready is not present + selector( jQuery ); + } + + return jQuery.makeArray( selector, this ); + }; + +// Give the init function the jQuery prototype for later instantiation +init.prototype = jQuery.fn; + +// Initialize central reference +rootjQuery = jQuery( document ); + + +var rparentsprev = /^(?:parents|prev(?:Until|All))/, + + // Methods guaranteed to produce a unique set when starting from a unique set + guaranteedUnique = { + children: true, + contents: true, + next: true, + prev: true + }; + +jQuery.fn.extend( { + has: function( target ) { + var targets = jQuery( target, this ), + l = targets.length; + + return this.filter( function() { + var i = 0; + for ( ; i < l; i++ ) { + if ( jQuery.contains( this, targets[ i ] ) ) { + return true; + } + } + } ); + }, + + closest: function( selectors, context ) { + var cur, + i = 0, + l = this.length, + matched = [], + targets = typeof selectors !== "string" && jQuery( selectors ); + + // Positional selectors never match, since there's no _selection_ context + if ( !rneedsContext.test( selectors ) ) { + for ( ; i < l; i++ ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + + // Always skip document fragments + if ( cur.nodeType < 11 && ( targets ? + targets.index( cur ) > -1 : + + // Don't pass non-elements to Sizzle + cur.nodeType === 1 && + jQuery.find.matchesSelector( cur, selectors ) ) ) { + + matched.push( cur ); + break; + } + } + } + } + + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); + }, + + // Determine the position of an element within the set + index: function( elem ) { + + // No argument, return index in parent + if ( !elem ) { + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; + } + + // Index in selector + if ( typeof elem === "string" ) { + return indexOf.call( jQuery( elem ), this[ 0 ] ); + } + + // Locate the position of the desired element + return indexOf.call( this, + + // If it receives a jQuery object, the first element is used + elem.jquery ? elem[ 0 ] : elem + ); + }, + + add: function( selector, context ) { + return this.pushStack( + jQuery.uniqueSort( + jQuery.merge( this.get(), jQuery( selector, context ) ) + ) + ); + }, + + addBack: function( selector ) { + return this.add( selector == null ? + this.prevObject : this.prevObject.filter( selector ) + ); + } +} ); + +function sibling( cur, dir ) { + while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {} + return cur; +} + +jQuery.each( { + parent: function( elem ) { + var parent = elem.parentNode; + return parent && parent.nodeType !== 11 ? parent : null; + }, + parents: function( elem ) { + return dir( elem, "parentNode" ); + }, + parentsUntil: function( elem, _i, until ) { + return dir( elem, "parentNode", until ); + }, + next: function( elem ) { + return sibling( elem, "nextSibling" ); + }, + prev: function( elem ) { + return sibling( elem, "previousSibling" ); + }, + nextAll: function( elem ) { + return dir( elem, "nextSibling" ); + }, + prevAll: function( elem ) { + return dir( elem, "previousSibling" ); + }, + nextUntil: function( elem, _i, until ) { + return dir( elem, "nextSibling", until ); + }, + prevUntil: function( elem, _i, until ) { + return dir( elem, "previousSibling", until ); + }, + siblings: function( elem ) { + return siblings( ( elem.parentNode || {} ).firstChild, elem ); + }, + children: function( elem ) { + return siblings( elem.firstChild ); + }, + contents: function( elem ) { + if ( elem.contentDocument != null && + + // Support: IE 11+ + // elements with no `data` attribute has an object + // `contentDocument` with a `null` prototype. + getProto( elem.contentDocument ) ) { + + return elem.contentDocument; + } + + // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only + // Treat the template element as a regular one in browsers that + // don't support it. + if ( nodeName( elem, "template" ) ) { + elem = elem.content || elem; + } + + return jQuery.merge( [], elem.childNodes ); + } +}, function( name, fn ) { + jQuery.fn[ name ] = function( until, selector ) { + var matched = jQuery.map( this, fn, until ); + + if ( name.slice( -5 ) !== "Until" ) { + selector = until; + } + + if ( selector && typeof selector === "string" ) { + matched = jQuery.filter( selector, matched ); + } + + if ( this.length > 1 ) { + + // Remove duplicates + if ( !guaranteedUnique[ name ] ) { + jQuery.uniqueSort( matched ); + } + + // Reverse order for parents* and prev-derivatives + if ( rparentsprev.test( name ) ) { + matched.reverse(); + } + } + + return this.pushStack( matched ); + }; +} ); +var rnothtmlwhite = ( /[^\x20\t\r\n\f]+/g ); + + + +// Convert String-formatted options into Object-formatted ones +function createOptions( options ) { + var object = {}; + jQuery.each( options.match( rnothtmlwhite ) || [], function( _, flag ) { + object[ flag ] = true; + } ); + return object; +} + +/* + * Create a callback list using the following parameters: + * + * options: an optional list of space-separated options that will change how + * the callback list behaves or a more traditional option object + * + * By default a callback list will act like an event callback list and can be + * "fired" multiple times. + * + * Possible options: + * + * once: will ensure the callback list can only be fired once (like a Deferred) + * + * memory: will keep track of previous values and will call any callback added + * after the list has been fired right away with the latest "memorized" + * values (like a Deferred) + * + * unique: will ensure a callback can only be added once (no duplicate in the list) + * + * stopOnFalse: interrupt callings when a callback returns false + * + */ +jQuery.Callbacks = function( options ) { + + // Convert options from String-formatted to Object-formatted if needed + // (we check in cache first) + options = typeof options === "string" ? + createOptions( options ) : + jQuery.extend( {}, options ); + + var // Flag to know if list is currently firing + firing, + + // Last fire value for non-forgettable lists + memory, + + // Flag to know if list was already fired + fired, + + // Flag to prevent firing + locked, + + // Actual callback list + list = [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + + // Fire callbacks + fire = function() { + + // Enforce single-firing + locked = locked || options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } + } + } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + + firing = false; + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { + list = []; + + // Otherwise, this object is spent + } else { + list = ""; + } + } + }, + + // Actual Callbacks object + self = { + + // Add a callback or a collection of callbacks to the list + add: function() { + if ( list ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { + jQuery.each( args, function( _, arg ) { + if ( isFunction( arg ) ) { + if ( !options.unique || !self.has( arg ) ) { + list.push( arg ); + } + } else if ( arg && arg.length && toType( arg ) !== "string" ) { + + // Inspect recursively + add( arg ); + } + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); + } + } + return this; + }, + + // Remove a callback from the list + remove: function() { + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; + } + } + } ); + return this; + }, + + // Check if a given callback is in the list. + // If no argument is given, return whether or not list has callbacks attached. + has: function( fn ) { + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; + }, + + // Remove all callbacks from the list + empty: function() { + if ( list ) { + list = []; + } + return this; + }, + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values + disable: function() { + locked = queue = []; + list = memory = ""; + return this; + }, + disabled: function() { + return !list; + }, + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions + lock: function() { + locked = queue = []; + if ( !memory && !firing ) { + list = memory = ""; + } + return this; + }, + locked: function() { + return !!locked; + }, + + // Call all callbacks with the given context and arguments + fireWith: function( context, args ) { + if ( !locked ) { + args = args || []; + args = [ context, args.slice ? args.slice() : args ]; + queue.push( args ); + if ( !firing ) { + fire(); + } + } + return this; + }, + + // Call all the callbacks with the given arguments + fire: function() { + self.fireWith( this, arguments ); + return this; + }, + + // To know if the callbacks have already been called at least once + fired: function() { + return !!fired; + } + }; + + return self; +}; + + +function Identity( v ) { + return v; +} +function Thrower( ex ) { + throw ex; +} + +function adoptValue( value, resolve, reject, noValue ) { + var method; + + try { + + // Check for promise aspect first to privilege synchronous behavior + if ( value && isFunction( ( method = value.promise ) ) ) { + method.call( value ).done( resolve ).fail( reject ); + + // Other thenables + } else if ( value && isFunction( ( method = value.then ) ) ) { + method.call( value, resolve, reject ); + + // Other non-thenables + } else { + + // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer: + // * false: [ value ].slice( 0 ) => resolve( value ) + // * true: [ value ].slice( 1 ) => resolve() + resolve.apply( undefined, [ value ].slice( noValue ) ); + } + + // For Promises/A+, convert exceptions into rejections + // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in + // Deferred#then to conditionally suppress rejection. + } catch ( value ) { + + // Support: Android 4.0 only + // Strict mode functions invoked without .call/.apply get global-object context + reject.apply( undefined, [ value ] ); + } +} + +jQuery.extend( { + + Deferred: function( func ) { + var tuples = [ + + // action, add listener, callbacks, + // ... .then handlers, argument index, [final state] + [ "notify", "progress", jQuery.Callbacks( "memory" ), + jQuery.Callbacks( "memory" ), 2 ], + [ "resolve", "done", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 0, "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), + jQuery.Callbacks( "once memory" ), 1, "rejected" ] + ], + state = "pending", + promise = { + state: function() { + return state; + }, + always: function() { + deferred.done( arguments ).fail( arguments ); + return this; + }, + "catch": function( fn ) { + return promise.then( null, fn ); + }, + + // Keep pipe for back-compat + pipe: function( /* fnDone, fnFail, fnProgress */ ) { + var fns = arguments; + + return jQuery.Deferred( function( newDefer ) { + jQuery.each( tuples, function( _i, tuple ) { + + // Map tuples (progress, done, fail) to arguments (done, fail, progress) + var fn = isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ]; + + // deferred.progress(function() { bind to newDefer or newDefer.notify }) + // deferred.done(function() { bind to newDefer or newDefer.resolve }) + // deferred.fail(function() { bind to newDefer or newDefer.reject }) + deferred[ tuple[ 1 ] ]( function() { + var returned = fn && fn.apply( this, arguments ); + if ( returned && isFunction( returned.promise ) ) { + returned.promise() + .progress( newDefer.notify ) + .done( newDefer.resolve ) + .fail( newDefer.reject ); + } else { + newDefer[ tuple[ 0 ] + "With" ]( + this, + fn ? [ returned ] : arguments + ); + } + } ); + } ); + fns = null; + } ).promise(); + }, + then: function( onFulfilled, onRejected, onProgress ) { + var maxDepth = 0; + function resolve( depth, deferred, handler, special ) { + return function() { + var that = this, + args = arguments, + mightThrow = function() { + var returned, then; + + // Support: Promises/A+ section 2.3.3.3.3 + // https://promisesaplus.com/#point-59 + // Ignore double-resolution attempts + if ( depth < maxDepth ) { + return; + } + + returned = handler.apply( that, args ); + + // Support: Promises/A+ section 2.3.1 + // https://promisesaplus.com/#point-48 + if ( returned === deferred.promise() ) { + throw new TypeError( "Thenable self-resolution" ); + } + + // Support: Promises/A+ sections 2.3.3.1, 3.5 + // https://promisesaplus.com/#point-54 + // https://promisesaplus.com/#point-75 + // Retrieve `then` only once + then = returned && + + // Support: Promises/A+ section 2.3.4 + // https://promisesaplus.com/#point-64 + // Only check objects and functions for thenability + ( typeof returned === "object" || + typeof returned === "function" ) && + returned.then; + + // Handle a returned thenable + if ( isFunction( then ) ) { + + // Special processors (notify) just wait for resolution + if ( special ) { + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ) + ); + + // Normal processors (resolve) also hook into progress + } else { + + // ...and disregard older resolution values + maxDepth++; + + then.call( + returned, + resolve( maxDepth, deferred, Identity, special ), + resolve( maxDepth, deferred, Thrower, special ), + resolve( maxDepth, deferred, Identity, + deferred.notifyWith ) + ); + } + + // Handle all other returned values + } else { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Identity ) { + that = undefined; + args = [ returned ]; + } + + // Process the value(s) + // Default process is resolve + ( special || deferred.resolveWith )( that, args ); + } + }, + + // Only normal processors (resolve) catch and reject exceptions + process = special ? + mightThrow : + function() { + try { + mightThrow(); + } catch ( e ) { + + if ( jQuery.Deferred.exceptionHook ) { + jQuery.Deferred.exceptionHook( e, + process.stackTrace ); + } + + // Support: Promises/A+ section 2.3.3.3.4.1 + // https://promisesaplus.com/#point-61 + // Ignore post-resolution exceptions + if ( depth + 1 >= maxDepth ) { + + // Only substitute handlers pass on context + // and multiple values (non-spec behavior) + if ( handler !== Thrower ) { + that = undefined; + args = [ e ]; + } + + deferred.rejectWith( that, args ); + } + } + }; + + // Support: Promises/A+ section 2.3.3.3.1 + // https://promisesaplus.com/#point-57 + // Re-resolve promises immediately to dodge false rejection from + // subsequent errors + if ( depth ) { + process(); + } else { + + // Call an optional hook to record the stack, in case of exception + // since it's otherwise lost when execution goes async + if ( jQuery.Deferred.getStackHook ) { + process.stackTrace = jQuery.Deferred.getStackHook(); + } + window.setTimeout( process ); + } + }; + } + + return jQuery.Deferred( function( newDefer ) { + + // progress_handlers.add( ... ) + tuples[ 0 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onProgress ) ? + onProgress : + Identity, + newDefer.notifyWith + ) + ); + + // fulfilled_handlers.add( ... ) + tuples[ 1 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onFulfilled ) ? + onFulfilled : + Identity + ) + ); + + // rejected_handlers.add( ... ) + tuples[ 2 ][ 3 ].add( + resolve( + 0, + newDefer, + isFunction( onRejected ) ? + onRejected : + Thrower + ) + ); + } ).promise(); + }, + + // Get a promise for this deferred + // If obj is provided, the promise aspect is added to the object + promise: function( obj ) { + return obj != null ? jQuery.extend( obj, promise ) : promise; + } + }, + deferred = {}; + + // Add list-specific methods + jQuery.each( tuples, function( i, tuple ) { + var list = tuple[ 2 ], + stateString = tuple[ 5 ]; + + // promise.progress = list.add + // promise.done = list.add + // promise.fail = list.add + promise[ tuple[ 1 ] ] = list.add; + + // Handle state + if ( stateString ) { + list.add( + function() { + + // state = "resolved" (i.e., fulfilled) + // state = "rejected" + state = stateString; + }, + + // rejected_callbacks.disable + // fulfilled_callbacks.disable + tuples[ 3 - i ][ 2 ].disable, + + // rejected_handlers.disable + // fulfilled_handlers.disable + tuples[ 3 - i ][ 3 ].disable, + + // progress_callbacks.lock + tuples[ 0 ][ 2 ].lock, + + // progress_handlers.lock + tuples[ 0 ][ 3 ].lock + ); + } + + // progress_handlers.fire + // fulfilled_handlers.fire + // rejected_handlers.fire + list.add( tuple[ 3 ].fire ); + + // deferred.notify = function() { deferred.notifyWith(...) } + // deferred.resolve = function() { deferred.resolveWith(...) } + // deferred.reject = function() { deferred.rejectWith(...) } + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments ); + return this; + }; + + // deferred.notifyWith = list.fireWith + // deferred.resolveWith = list.fireWith + // deferred.rejectWith = list.fireWith + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); + + // Make the deferred a promise + promise.promise( deferred ); + + // Call given func if any + if ( func ) { + func.call( deferred, deferred ); + } + + // All done! + return deferred; + }, + + // Deferred helper + when: function( singleValue ) { + var + + // count of uncompleted subordinates + remaining = arguments.length, + + // count of unprocessed arguments + i = remaining, + + // subordinate fulfillment data + resolveContexts = Array( i ), + resolveValues = slice.call( arguments ), + + // the primary Deferred + primary = jQuery.Deferred(), + + // subordinate callback factory + updateFunc = function( i ) { + return function( value ) { + resolveContexts[ i ] = this; + resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; + if ( !( --remaining ) ) { + primary.resolveWith( resolveContexts, resolveValues ); + } + }; + }; + + // Single- and empty arguments are adopted like Promise.resolve + if ( remaining <= 1 ) { + adoptValue( singleValue, primary.done( updateFunc( i ) ).resolve, primary.reject, + !remaining ); + + // Use .then() to unwrap secondary thenables (cf. gh-3000) + if ( primary.state() === "pending" || + isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) { + + return primary.then(); + } + } + + // Multiple arguments are aggregated like Promise.all array elements + while ( i-- ) { + adoptValue( resolveValues[ i ], updateFunc( i ), primary.reject ); + } + + return primary.promise(); + } +} ); + + +// These usually indicate a programmer mistake during development, +// warn about them ASAP rather than swallowing them by default. +var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/; + +jQuery.Deferred.exceptionHook = function( error, stack ) { + + // Support: IE 8 - 9 only + // Console exists when dev tools are open, which can happen at any time + if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) { + window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack ); + } +}; + + + + +jQuery.readyException = function( error ) { + window.setTimeout( function() { + throw error; + } ); +}; + + + + +// The deferred used on DOM ready +var readyList = jQuery.Deferred(); + +jQuery.fn.ready = function( fn ) { + + readyList + .then( fn ) + + // Wrap jQuery.readyException in a function so that the lookup + // happens at the time of error handling instead of callback + // registration. + .catch( function( error ) { + jQuery.readyException( error ); + } ); + + return this; +}; + +jQuery.extend( { + + // Is the DOM ready to be used? Set to true once it occurs. + isReady: false, + + // A counter to track how many items to wait for before + // the ready event fires. See #6781 + readyWait: 1, + + // Handle when the DOM is ready + ready: function( wait ) { + + // Abort if there are pending holds or we're already ready + if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { + return; + } + + // Remember that the DOM is ready + jQuery.isReady = true; + + // If a normal DOM Ready event fired, decrement, and wait if need be + if ( wait !== true && --jQuery.readyWait > 0 ) { + return; + } + + // If there are functions bound, to execute + readyList.resolveWith( document, [ jQuery ] ); + } +} ); + +jQuery.ready.then = readyList.then; + +// The ready event handler and self cleanup method +function completed() { + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); + jQuery.ready(); +} + +// Catch cases where $(document).ready() is called +// after the browser event has already occurred. +// Support: IE <=9 - 10 only +// Older IE sometimes signals "interactive" too soon +if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + + // Handle it asynchronously to allow scripts the opportunity to delay ready + window.setTimeout( jQuery.ready ); + +} else { + + // Use the handy event callback + document.addEventListener( "DOMContentLoaded", completed ); + + // A fallback to window.onload, that will always work + window.addEventListener( "load", completed ); +} + + + + +// Multifunctional method to get and set values of a collection +// The value/s can optionally be executed if it's a function +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { + var i = 0, + len = elems.length, + bulk = key == null; + + // Sets many values + if ( toType( key ) === "object" ) { + chainable = true; + for ( i in key ) { + access( elems, fn, i, key[ i ], true, emptyGet, raw ); + } + + // Sets one value + } else if ( value !== undefined ) { + chainable = true; + + if ( !isFunction( value ) ) { + raw = true; + } + + if ( bulk ) { + + // Bulk operations run against the entire set + if ( raw ) { + fn.call( elems, value ); + fn = null; + + // ...except when executing function values + } else { + bulk = fn; + fn = function( elem, _key, value ) { + return bulk.call( jQuery( elem ), value ); + }; + } + } + + if ( fn ) { + for ( ; i < len; i++ ) { + fn( + elems[ i ], key, raw ? + value : + value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); + } + } + } + + if ( chainable ) { + return elems; + } + + // Gets + if ( bulk ) { + return fn.call( elems ); + } + + return len ? fn( elems[ 0 ], key ) : emptyGet; +}; + + +// Matches dashed string for camelizing +var rmsPrefix = /^-ms-/, + rdashAlpha = /-([a-z])/g; + +// Used by camelCase as callback to replace() +function fcamelCase( _all, letter ) { + return letter.toUpperCase(); +} + +// Convert dashed to camelCase; used by the css and data modules +// Support: IE <=9 - 11, Edge 12 - 15 +// Microsoft forgot to hump their vendor prefix (#9572) +function camelCase( string ) { + return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); +} +var acceptData = function( owner ) { + + // Accepts only: + // - Node + // - Node.ELEMENT_NODE + // - Node.DOCUMENT_NODE + // - Object + // - Any + return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); +}; + + + + +function Data() { + this.expando = jQuery.expando + Data.uid++; +} + +Data.uid = 1; + +Data.prototype = { + + cache: function( owner ) { + + // Check if the owner object already has a cache + var value = owner[ this.expando ]; + + // If not, create one + if ( !value ) { + value = {}; + + // We can accept data for non-element nodes in modern browsers, + // but we should not, see #8335. + // Always return an empty object. + if ( acceptData( owner ) ) { + + // If it is a node unlikely to be stringify-ed or looped over + // use plain assignment + if ( owner.nodeType ) { + owner[ this.expando ] = value; + + // Otherwise secure it in a non-enumerable property + // configurable must be true to allow the property to be + // deleted when data is removed + } else { + Object.defineProperty( owner, this.expando, { + value: value, + configurable: true + } ); + } + } + } + + return value; + }, + set: function( owner, data, value ) { + var prop, + cache = this.cache( owner ); + + // Handle: [ owner, key, value ] args + // Always use camelCase key (gh-2257) + if ( typeof data === "string" ) { + cache[ camelCase( data ) ] = value; + + // Handle: [ owner, { properties } ] args + } else { + + // Copy the properties one-by-one to the cache object + for ( prop in data ) { + cache[ camelCase( prop ) ] = data[ prop ]; + } + } + return cache; + }, + get: function( owner, key ) { + return key === undefined ? + this.cache( owner ) : + + // Always use camelCase key (gh-2257) + owner[ this.expando ] && owner[ this.expando ][ camelCase( key ) ]; + }, + access: function( owner, key, value ) { + + // In cases where either: + // + // 1. No key was specified + // 2. A string key was specified, but no value provided + // + // Take the "read" path and allow the get method to determine + // which value to return, respectively either: + // + // 1. The entire cache object + // 2. The data stored at the key + // + if ( key === undefined || + ( ( key && typeof key === "string" ) && value === undefined ) ) { + + return this.get( owner, key ); + } + + // When the key is not a string, or both a key and value + // are specified, set or extend (existing objects) with either: + // + // 1. An object of properties + // 2. A key and value + // + this.set( owner, key, value ); + + // Since the "set" path can have two possible entry points + // return the expected data based on which path was taken[*] + return value !== undefined ? value : key; + }, + remove: function( owner, key ) { + var i, + cache = owner[ this.expando ]; + + if ( cache === undefined ) { + return; + } + + if ( key !== undefined ) { + + // Support array or space separated string of keys + if ( Array.isArray( key ) ) { + + // If key is an array of keys... + // We always set camelCase keys, so remove that. + key = key.map( camelCase ); + } else { + key = camelCase( key ); + + // If a key with the spaces exists, use it. + // Otherwise, create an array by matching non-whitespace + key = key in cache ? + [ key ] : + ( key.match( rnothtmlwhite ) || [] ); + } + + i = key.length; + + while ( i-- ) { + delete cache[ key[ i ] ]; + } + } + + // Remove the expando if there's no more data + if ( key === undefined || jQuery.isEmptyObject( cache ) ) { + + // Support: Chrome <=35 - 45 + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted) + if ( owner.nodeType ) { + owner[ this.expando ] = undefined; + } else { + delete owner[ this.expando ]; + } + } + }, + hasData: function( owner ) { + var cache = owner[ this.expando ]; + return cache !== undefined && !jQuery.isEmptyObject( cache ); + } +}; +var dataPriv = new Data(); + +var dataUser = new Data(); + + + +// Implementation Summary +// +// 1. Enforce API surface and semantic compatibility with 1.9.x branch +// 2. Improve the module's maintainability by reducing the storage +// paths to a single mechanism. +// 3. Use the same single mechanism to support "private" and "user" data. +// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) +// 5. Avoid exposing implementation details on user objects (eg. expando properties) +// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + rmultiDash = /[A-Z]/g; + +function getData( data ) { + if ( data === "true" ) { + return true; + } + + if ( data === "false" ) { + return false; + } + + if ( data === "null" ) { + return null; + } + + // Only convert to a number if it doesn't change the string + if ( data === +data + "" ) { + return +data; + } + + if ( rbrace.test( data ) ) { + return JSON.parse( data ); + } + + return data; +} + +function dataAttr( elem, key, data ) { + var name; + + // If nothing was found internally, try to fetch any + // data from the HTML5 data-* attribute + if ( data === undefined && elem.nodeType === 1 ) { + name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase(); + data = elem.getAttribute( name ); + + if ( typeof data === "string" ) { + try { + data = getData( data ); + } catch ( e ) {} + + // Make sure we set the data so it isn't changed later + dataUser.set( elem, key, data ); + } else { + data = undefined; + } + } + return data; +} + +jQuery.extend( { + hasData: function( elem ) { + return dataUser.hasData( elem ) || dataPriv.hasData( elem ); + }, + + data: function( elem, name, data ) { + return dataUser.access( elem, name, data ); + }, + + removeData: function( elem, name ) { + dataUser.remove( elem, name ); + }, + + // TODO: Now that all calls to _data and _removeData have been replaced + // with direct calls to dataPriv methods, these can be deprecated. + _data: function( elem, name, data ) { + return dataPriv.access( elem, name, data ); + }, + + _removeData: function( elem, name ) { + dataPriv.remove( elem, name ); + } +} ); + +jQuery.fn.extend( { + data: function( key, value ) { + var i, name, data, + elem = this[ 0 ], + attrs = elem && elem.attributes; + + // Gets all values + if ( key === undefined ) { + if ( this.length ) { + data = dataUser.get( elem ); + + if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) { + i = attrs.length; + while ( i-- ) { + + // Support: IE 11 only + // The attrs elements can be null (#14894) + if ( attrs[ i ] ) { + name = attrs[ i ].name; + if ( name.indexOf( "data-" ) === 0 ) { + name = camelCase( name.slice( 5 ) ); + dataAttr( elem, name, data[ name ] ); + } + } + } + dataPriv.set( elem, "hasDataAttrs", true ); + } + } + + return data; + } + + // Sets multiple values + if ( typeof key === "object" ) { + return this.each( function() { + dataUser.set( this, key ); + } ); + } + + return access( this, function( value ) { + var data; + + // The calling jQuery object (element matches) is not empty + // (and therefore has an element appears at this[ 0 ]) and the + // `value` parameter was not undefined. An empty jQuery object + // will result in `undefined` for elem = this[ 0 ] which will + // throw an exception if an attempt to read a data cache is made. + if ( elem && value === undefined ) { + + // Attempt to get data from the cache + // The key will always be camelCased in Data + data = dataUser.get( elem, key ); + if ( data !== undefined ) { + return data; + } + + // Attempt to "discover" the data in + // HTML5 custom data-* attrs + data = dataAttr( elem, key ); + if ( data !== undefined ) { + return data; + } + + // We tried really hard, but the data doesn't exist. + return; + } + + // Set the data... + this.each( function() { + + // We always store the camelCased key + dataUser.set( this, key, value ); + } ); + }, null, value, arguments.length > 1, null, true ); + }, + + removeData: function( key ) { + return this.each( function() { + dataUser.remove( this, key ); + } ); + } +} ); + + +jQuery.extend( { + queue: function( elem, type, data ) { + var queue; + + if ( elem ) { + type = ( type || "fx" ) + "queue"; + queue = dataPriv.get( elem, type ); + + // Speed up dequeue by getting out quickly if this is just a lookup + if ( data ) { + if ( !queue || Array.isArray( data ) ) { + queue = dataPriv.access( elem, type, jQuery.makeArray( data ) ); + } else { + queue.push( data ); + } + } + return queue || []; + } + }, + + dequeue: function( elem, type ) { + type = type || "fx"; + + var queue = jQuery.queue( elem, type ), + startLength = queue.length, + fn = queue.shift(), + hooks = jQuery._queueHooks( elem, type ), + next = function() { + jQuery.dequeue( elem, type ); + }; + + // If the fx queue is dequeued, always remove the progress sentinel + if ( fn === "inprogress" ) { + fn = queue.shift(); + startLength--; + } + + if ( fn ) { + + // Add a progress sentinel to prevent the fx queue from being + // automatically dequeued + if ( type === "fx" ) { + queue.unshift( "inprogress" ); + } + + // Clear up the last queue stop function + delete hooks.stop; + fn.call( elem, next, hooks ); + } + + if ( !startLength && hooks ) { + hooks.empty.fire(); + } + }, + + // Not public - generate a queueHooks object, or return the current one + _queueHooks: function( elem, type ) { + var key = type + "queueHooks"; + return dataPriv.get( elem, key ) || dataPriv.access( elem, key, { + empty: jQuery.Callbacks( "once memory" ).add( function() { + dataPriv.remove( elem, [ type + "queue", key ] ); + } ) + } ); + } +} ); + +jQuery.fn.extend( { + queue: function( type, data ) { + var setter = 2; + + if ( typeof type !== "string" ) { + data = type; + type = "fx"; + setter--; + } + + if ( arguments.length < setter ) { + return jQuery.queue( this[ 0 ], type ); + } + + return data === undefined ? + this : + this.each( function() { + var queue = jQuery.queue( this, type, data ); + + // Ensure a hooks for this queue + jQuery._queueHooks( this, type ); + + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { + jQuery.dequeue( this, type ); + } + } ); + }, + dequeue: function( type ) { + return this.each( function() { + jQuery.dequeue( this, type ); + } ); + }, + clearQueue: function( type ) { + return this.queue( type || "fx", [] ); + }, + + // Get a promise resolved when queues of a certain type + // are emptied (fx is the type by default) + promise: function( type, obj ) { + var tmp, + count = 1, + defer = jQuery.Deferred(), + elements = this, + i = this.length, + resolve = function() { + if ( !( --count ) ) { + defer.resolveWith( elements, [ elements ] ); + } + }; + + if ( typeof type !== "string" ) { + obj = type; + type = undefined; + } + type = type || "fx"; + + while ( i-- ) { + tmp = dataPriv.get( elements[ i ], type + "queueHooks" ); + if ( tmp && tmp.empty ) { + count++; + tmp.empty.add( resolve ); + } + } + resolve(); + return defer.promise( obj ); + } +} ); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + + +var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; + +var documentElement = document.documentElement; + + + + var isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ); + }, + composed = { composed: true }; + + // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only + // Check attachment across shadow DOM boundaries when possible (gh-3504) + // Support: iOS 10.0-10.2 only + // Early iOS 10 versions support `attachShadow` but not `getRootNode`, + // leading to errors. We need to check for `getRootNode`. + if ( documentElement.getRootNode ) { + isAttached = function( elem ) { + return jQuery.contains( elem.ownerDocument, elem ) || + elem.getRootNode( composed ) === elem.ownerDocument; + }; + } +var isHiddenWithinTree = function( elem, el ) { + + // isHiddenWithinTree might be called from jQuery#filter function; + // in that case, element will be second argument + elem = el || elem; + + // Inline style trumps all + return elem.style.display === "none" || + elem.style.display === "" && + + // Otherwise, check computed style + // Support: Firefox <=43 - 45 + // Disconnected elements can have computed display: none, so first confirm that elem is + // in the document. + isAttached( elem ) && + + jQuery.css( elem, "display" ) === "none"; + }; + + + +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, scale, + maxIterations = 20, + currentValue = tween ? + function() { + return tween.cur(); + } : + function() { + return jQuery.css( elem, prop, "" ); + }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = elem.nodeType && + ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Support: Firefox <=54 + // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144) + initial = initial / 2; + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + while ( maxIterations-- ) { + + // Evaluate and update our best guess (doubling guesses that zero out). + // Finish if the scale equals or crosses 1 (making the old*new product non-positive). + jQuery.style( elem, prop, initialInUnit + unit ); + if ( ( 1 - scale ) * ( 1 - ( scale = currentValue() / initial || 0.5 ) ) <= 0 ) { + maxIterations = 0; + } + initialInUnit = initialInUnit / scale; + + } + + initialInUnit = initialInUnit * 2; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + +var defaultDisplayMap = {}; + +function getDefaultDisplay( elem ) { + var temp, + doc = elem.ownerDocument, + nodeName = elem.nodeName, + display = defaultDisplayMap[ nodeName ]; + + if ( display ) { + return display; + } + + temp = doc.body.appendChild( doc.createElement( nodeName ) ); + display = jQuery.css( temp, "display" ); + + temp.parentNode.removeChild( temp ); + + if ( display === "none" ) { + display = "block"; + } + defaultDisplayMap[ nodeName ] = display; + + return display; +} + +function showHide( elements, show ) { + var display, elem, + values = [], + index = 0, + length = elements.length; + + // Determine new display value for elements that need to change + for ( ; index < length; index++ ) { + elem = elements[ index ]; + if ( !elem.style ) { + continue; + } + + display = elem.style.display; + if ( show ) { + + // Since we force visibility upon cascade-hidden elements, an immediate (and slow) + // check is required in this first loop unless we have a nonempty display value (either + // inline or about-to-be-restored) + if ( display === "none" ) { + values[ index ] = dataPriv.get( elem, "display" ) || null; + if ( !values[ index ] ) { + elem.style.display = ""; + } + } + if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) { + values[ index ] = getDefaultDisplay( elem ); + } + } else { + if ( display !== "none" ) { + values[ index ] = "none"; + + // Remember what we're overwriting + dataPriv.set( elem, "display", display ); + } + } + } + + // Set the display of the elements in a second loop to avoid constant reflow + for ( index = 0; index < length; index++ ) { + if ( values[ index ] != null ) { + elements[ index ].style.display = values[ index ]; + } + } + + return elements; +} + +jQuery.fn.extend( { + show: function() { + return showHide( this, true ); + }, + hide: function() { + return showHide( this ); + }, + toggle: function( state ) { + if ( typeof state === "boolean" ) { + return state ? this.show() : this.hide(); + } + + return this.each( function() { + if ( isHiddenWithinTree( this ) ) { + jQuery( this ).show(); + } else { + jQuery( this ).hide(); + } + } ); + } +} ); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); + +var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]*)/i ); + +var rscriptType = ( /^$|^module$|\/(?:java|ecma)script/i ); + + + +( function() { + var fragment = document.createDocumentFragment(), + div = fragment.appendChild( document.createElement( "div" ) ), + input = document.createElement( "input" ); + + // Support: Android 4.0 - 4.3 only + // Check state lost if the name is set (#11217) + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); + + // Support: Android <=4.1 only + // Older WebKit doesn't clone checked state correctly in fragments + support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; + + // Support: IE <=11 only + // Make sure textarea (and checkbox) defaultValue is properly cloned + div.innerHTML = ""; + support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; + + // Support: IE <=9 only + // IE <=9 replaces "; + support.option = !!div.lastChild; +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + + // XHTML parsers do not magically insert elements in the + // same way that tag soup parsers do. So we cannot shorten + // this by omitting or other required elements. + thead: [ 1, "", "
" ], + col: [ 2, "", "
" ], + tr: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + _default: [ 0, "", "" ] +}; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + +// Support: IE <=9 only +if ( !support.option ) { + wrapMap.optgroup = wrapMap.option = [ 1, "" ]; +} + + +function getAll( context, tag ) { + + // Support: IE <=9 - 11 only + // Use typeof to avoid zero-argument method invocation on host objects (#15151) + var ret; + + if ( typeof context.getElementsByTagName !== "undefined" ) { + ret = context.getElementsByTagName( tag || "*" ); + + } else if ( typeof context.querySelectorAll !== "undefined" ) { + ret = context.querySelectorAll( tag || "*" ); + + } else { + ret = []; + } + + if ( tag === undefined || tag && nodeName( context, tag ) ) { + return jQuery.merge( [ context ], ret ); + } + + return ret; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + dataPriv.set( + elems[ i ], + "globalEval", + !refElements || dataPriv.get( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/; + +function buildFragment( elems, context, scripts, selection, ignored ) { + var elem, tmp, tag, wrap, attached, j, + fragment = context.createDocumentFragment(), + nodes = [], + i = 0, + l = elems.length; + + for ( ; i < l; i++ ) { + elem = elems[ i ]; + + if ( elem || elem === 0 ) { + + // Add nodes directly + if ( toType( elem ) === "object" ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); + + // Convert non-html into a text node + } else if ( !rhtml.test( elem ) ) { + nodes.push( context.createTextNode( elem ) ); + + // Convert html into DOM nodes + } else { + tmp = tmp || fragment.appendChild( context.createElement( "div" ) ); + + // Deserialize a standard representation + tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase(); + wrap = wrapMap[ tag ] || wrapMap._default; + tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ]; + + // Descend through wrappers to the right content + j = wrap[ 0 ]; + while ( j-- ) { + tmp = tmp.lastChild; + } + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( nodes, tmp.childNodes ); + + // Remember the top-level container + tmp = fragment.firstChild; + + // Ensure the created nodes are orphaned (#12392) + tmp.textContent = ""; + } + } + } + + // Remove wrapper from fragment + fragment.textContent = ""; + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + continue; + } + + attached = isAttached( elem ); + + // Append to fragment + tmp = getAll( fragment.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( attached ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } + } + } + + return fragment; +} + + +var rtypenamespace = /^([^.]*)(?:\.(.+)|)/; + +function returnTrue() { + return true; +} + +function returnFalse() { + return false; +} + +// Support: IE <=9 - 11+ +// focus() and blur() are asynchronous, except when they are no-op. +// So expect focus to be synchronous when the element is already active, +// and blur to be synchronous when the element is not already active. +// (focus and blur are always synchronous in other supported browsers, +// this just defines when we can count on it). +function expectSync( elem, type ) { + return ( elem === safeActiveElement() ) === ( type === "focus" ); +} + +// Support: IE <=9 only +// Accessing document.activeElement can throw unexpectedly +// https://bugs.jquery.com/ticket/13393 +function safeActiveElement() { + try { + return document.activeElement; + } catch ( err ) { } +} + +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + +/* + * Helper functions for managing events -- not part of the public interface. + * Props to Dean Edwards' addEvent library for many of the ideas. + */ +jQuery.event = { + + global: {}, + + add: function( elem, types, handler, data, selector ) { + + var handleObjIn, eventHandle, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.get( elem ); + + // Only attach events to objects that accept data + if ( !acceptData( elem ) ) { + return; + } + + // Caller can pass in an object of custom data in lieu of the handler + if ( handler.handler ) { + handleObjIn = handler; + handler = handleObjIn.handler; + selector = handleObjIn.selector; + } + + // Ensure that invalid selectors throw exceptions at attach time + // Evaluate against documentElement in case elem is a non-element node (e.g., document) + if ( selector ) { + jQuery.find.matchesSelector( documentElement, selector ); + } + + // Make sure that the handler has a unique ID, used to find/remove it later + if ( !handler.guid ) { + handler.guid = jQuery.guid++; + } + + // Init the element's event structure and main handler, if this is the first + if ( !( events = elemData.events ) ) { + events = elemData.events = Object.create( null ); + } + if ( !( eventHandle = elemData.handle ) ) { + eventHandle = elemData.handle = function( e ) { + + // Discard the second event of a jQuery.event.trigger() and + // when an event is called after a page has unloaded + return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ? + jQuery.event.dispatch.apply( elem, arguments ) : undefined; + }; + } + + // Handle multiple events separated by a space + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // There *must* be a type, no attaching namespace-only handlers + if ( !type ) { + continue; + } + + // If event changes its type, use the special event handlers for the changed type + special = jQuery.event.special[ type ] || {}; + + // If selector defined, determine special event api type, otherwise given type + type = ( selector ? special.delegateType : special.bindType ) || type; + + // Update special based on newly reset type + special = jQuery.event.special[ type ] || {}; + + // handleObj is passed to all event handlers + handleObj = jQuery.extend( { + type: type, + origType: origType, + data: data, + handler: handler, + guid: handler.guid, + selector: selector, + needsContext: selector && jQuery.expr.match.needsContext.test( selector ), + namespace: namespaces.join( "." ) + }, handleObjIn ); + + // Init the event handler queue if we're the first + if ( !( handlers = events[ type ] ) ) { + handlers = events[ type ] = []; + handlers.delegateCount = 0; + + // Only use addEventListener if the special events handler returns false + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + + if ( elem.addEventListener ) { + elem.addEventListener( type, eventHandle ); + } + } + } + + if ( special.add ) { + special.add.call( elem, handleObj ); + + if ( !handleObj.handler.guid ) { + handleObj.handler.guid = handler.guid; + } + } + + // Add to the element's handler list, delegates in front + if ( selector ) { + handlers.splice( handlers.delegateCount++, 0, handleObj ); + } else { + handlers.push( handleObj ); + } + + // Keep track of which events have ever been used, for event optimization + jQuery.event.global[ type ] = true; + } + + }, + + // Detach an event or set of events from an element + remove: function( elem, types, handler, selector, mappedTypes ) { + + var j, origCount, tmp, + events, t, handleObj, + special, handlers, type, namespaces, origType, + elemData = dataPriv.hasData( elem ) && dataPriv.get( elem ); + + if ( !elemData || !( events = elemData.events ) ) { + return; + } + + // Once for each type.namespace in types; type may be omitted + types = ( types || "" ).match( rnothtmlwhite ) || [ "" ]; + t = types.length; + while ( t-- ) { + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); + + // Unbind all events (on this namespace, if provided) for the element + if ( !type ) { + for ( type in events ) { + jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); + } + continue; + } + + special = jQuery.event.special[ type ] || {}; + type = ( selector ? special.delegateType : special.bindType ) || type; + handlers = events[ type ] || []; + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); + + // Remove matching events + origCount = j = handlers.length; + while ( j-- ) { + handleObj = handlers[ j ]; + + if ( ( mappedTypes || origType === handleObj.origType ) && + ( !handler || handler.guid === handleObj.guid ) && + ( !tmp || tmp.test( handleObj.namespace ) ) && + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { + handlers.splice( j, 1 ); + + if ( handleObj.selector ) { + handlers.delegateCount--; + } + if ( special.remove ) { + special.remove.call( elem, handleObj ); + } + } + } + + // Remove generic event handler if we removed something and no more handlers exist + // (avoids potential for endless recursion during removal of special event handlers) + if ( origCount && !handlers.length ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + + jQuery.removeEvent( elem, type, elemData.handle ); + } + + delete events[ type ]; + } + } + + // Remove data and the expando if it's no longer used + if ( jQuery.isEmptyObject( events ) ) { + dataPriv.remove( elem, "handle events" ); + } + }, + + dispatch: function( nativeEvent ) { + + var i, j, ret, matched, handleObj, handlerQueue, + args = new Array( arguments.length ), + + // Make a writable jQuery.Event from the native event object + event = jQuery.event.fix( nativeEvent ), + + handlers = ( + dataPriv.get( this, "events" ) || Object.create( null ) + )[ event.type ] || [], + special = jQuery.event.special[ event.type ] || {}; + + // Use the fix-ed jQuery.Event rather than the (read-only) native event + args[ 0 ] = event; + + for ( i = 1; i < arguments.length; i++ ) { + args[ i ] = arguments[ i ]; + } + + event.delegateTarget = this; + + // Call the preDispatch hook for the mapped type, and let it bail if desired + if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { + return; + } + + // Determine handlers + handlerQueue = jQuery.event.handlers.call( this, event, handlers ); + + // Run delegates first; they may want to stop propagation beneath us + i = 0; + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { + event.currentTarget = matched.elem; + + j = 0; + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { + + // If the event is namespaced, then each handler is only invoked if it is + // specially universal or its namespaces are a superset of the event's. + if ( !event.rnamespace || handleObj.namespace === false || + event.rnamespace.test( handleObj.namespace ) ) { + + event.handleObj = handleObj; + event.data = handleObj.data; + + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); + + if ( ret !== undefined ) { + if ( ( event.result = ret ) === false ) { + event.preventDefault(); + event.stopPropagation(); + } + } + } + } + } + + // Call the postDispatch hook for the mapped type + if ( special.postDispatch ) { + special.postDispatch.call( this, event ); + } + + return event.result; + }, + + handlers: function( event, handlers ) { + var i, handleObj, sel, matchedHandlers, matchedSelectors, + handlerQueue = [], + delegateCount = handlers.delegateCount, + cur = event.target; + + // Find delegate handlers + if ( delegateCount && + + // Support: IE <=9 + // Black-hole SVG instance trees (trac-13180) + cur.nodeType && + + // Support: Firefox <=42 + // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861) + // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click + // Support: IE 11 only + // ...but not arrow key "clicks" of radio inputs, which can have `button` -1 (gh-2343) + !( event.type === "click" && event.button >= 1 ) ) { + + for ( ; cur !== this; cur = cur.parentNode || this ) { + + // Don't check non-elements (#13208) + // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) + if ( cur.nodeType === 1 && !( event.type === "click" && cur.disabled === true ) ) { + matchedHandlers = []; + matchedSelectors = {}; + for ( i = 0; i < delegateCount; i++ ) { + handleObj = handlers[ i ]; + + // Don't conflict with Object.prototype properties (#13203) + sel = handleObj.selector + " "; + + if ( matchedSelectors[ sel ] === undefined ) { + matchedSelectors[ sel ] = handleObj.needsContext ? + jQuery( sel, this ).index( cur ) > -1 : + jQuery.find( sel, this, null, [ cur ] ).length; + } + if ( matchedSelectors[ sel ] ) { + matchedHandlers.push( handleObj ); + } + } + if ( matchedHandlers.length ) { + handlerQueue.push( { elem: cur, handlers: matchedHandlers } ); + } + } + } + } + + // Add the remaining (directly-bound) handlers + cur = this; + if ( delegateCount < handlers.length ) { + handlerQueue.push( { elem: cur, handlers: handlers.slice( delegateCount ) } ); + } + + return handlerQueue; + }, + + addProp: function( name, hook ) { + Object.defineProperty( jQuery.Event.prototype, name, { + enumerable: true, + configurable: true, + + get: isFunction( hook ) ? + function() { + if ( this.originalEvent ) { + return hook( this.originalEvent ); + } + } : + function() { + if ( this.originalEvent ) { + return this.originalEvent[ name ]; + } + }, + + set: function( value ) { + Object.defineProperty( this, name, { + enumerable: true, + configurable: true, + writable: true, + value: value + } ); + } + } ); + }, + + fix: function( originalEvent ) { + return originalEvent[ jQuery.expando ] ? + originalEvent : + new jQuery.Event( originalEvent ); + }, + + special: { + load: { + + // Prevent triggered image.load events from bubbling to window.load + noBubble: true + }, + click: { + + // Utilize native event to ensure correct state for checkable inputs + setup: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Claim the first handler + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + // dataPriv.set( el, "click", ... ) + leverageNative( el, "click", returnTrue ); + } + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function( data ) { + + // For mutual compressibility with _default, replace `this` access with a local var. + // `|| data` is dead code meant only to preserve the variable through minification. + var el = this || data; + + // Force setup before triggering a click + if ( rcheckableType.test( el.type ) && + el.click && nodeName( el, "input" ) ) { + + leverageNative( el, "click" ); + } + + // Return non-false to allow normal event-path propagation + return true; + }, + + // For cross-browser consistency, suppress native .click() on links + // Also prevent it if we're currently inside a leveraged native-event stack + _default: function( event ) { + var target = event.target; + return rcheckableType.test( target.type ) && + target.click && nodeName( target, "input" ) && + dataPriv.get( target, "click" ) || + nodeName( target, "a" ); + } + }, + + beforeunload: { + postDispatch: function( event ) { + + // Support: Firefox 20+ + // Firefox doesn't alert if the returnValue field is not set. + if ( event.result !== undefined && event.originalEvent ) { + event.originalEvent.returnValue = event.result; + } + } + } + } +}; + +// Ensure the presence of an event listener that handles manually-triggered +// synthetic events by interrupting progress until reinvoked in response to +// *native* events that it fires directly, ensuring that state changes have +// already occurred before other listeners are invoked. +function leverageNative( el, type, expectSync ) { + + // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add + if ( !expectSync ) { + if ( dataPriv.get( el, type ) === undefined ) { + jQuery.event.add( el, type, returnTrue ); + } + return; + } + + // Register the controller as a special universal handler for all event namespaces + dataPriv.set( el, type, false ); + jQuery.event.add( el, type, { + namespace: false, + handler: function( event ) { + var notAsync, result, + saved = dataPriv.get( this, type ); + + if ( ( event.isTrigger & 1 ) && this[ type ] ) { + + // Interrupt processing of the outer synthetic .trigger()ed event + // Saved data should be false in such cases, but might be a leftover capture object + // from an async native handler (gh-4350) + if ( !saved.length ) { + + // Store arguments for use when handling the inner native event + // There will always be at least one argument (an event object), so this array + // will not be confused with a leftover capture object. + saved = slice.call( arguments ); + dataPriv.set( this, type, saved ); + + // Trigger the native event and capture its result + // Support: IE <=9 - 11+ + // focus() and blur() are asynchronous + notAsync = expectSync( this, type ); + this[ type ](); + result = dataPriv.get( this, type ); + if ( saved !== result || notAsync ) { + dataPriv.set( this, type, false ); + } else { + result = {}; + } + if ( saved !== result ) { + + // Cancel the outer synthetic event + event.stopImmediatePropagation(); + event.preventDefault(); + + // Support: Chrome 86+ + // In Chrome, if an element having a focusout handler is blurred by + // clicking outside of it, it invokes the handler synchronously. If + // that handler calls `.remove()` on the element, the data is cleared, + // leaving `result` undefined. We need to guard against this. + return result && result.value; + } + + // If this is an inner synthetic event for an event with a bubbling surrogate + // (focus or blur), assume that the surrogate already propagated from triggering the + // native event and prevent that from happening again here. + // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the + // bubbling surrogate propagates *after* the non-bubbling base), but that seems + // less bad than duplication. + } else if ( ( jQuery.event.special[ type ] || {} ).delegateType ) { + event.stopPropagation(); + } + + // If this is a native event triggered above, everything is now in order + // Fire an inner synthetic event with the original arguments + } else if ( saved.length ) { + + // ...and capture the result + dataPriv.set( this, type, { + value: jQuery.event.trigger( + + // Support: IE <=9 - 11+ + // Extend with the prototype to reset the above stopImmediatePropagation() + jQuery.extend( saved[ 0 ], jQuery.Event.prototype ), + saved.slice( 1 ), + this + ) + } ); + + // Abort handling of the native event + event.stopImmediatePropagation(); + } + } + } ); +} + +jQuery.removeEvent = function( elem, type, handle ) { + + // This "if" is needed for plain objects + if ( elem.removeEventListener ) { + elem.removeEventListener( type, handle ); + } +}; + +jQuery.Event = function( src, props ) { + + // Allow instantiation without the 'new' keyword + if ( !( this instanceof jQuery.Event ) ) { + return new jQuery.Event( src, props ); + } + + // Event object + if ( src && src.type ) { + this.originalEvent = src; + this.type = src.type; + + // Events bubbling up the document may have been marked as prevented + // by a handler lower down the tree; reflect the correct value. + this.isDefaultPrevented = src.defaultPrevented || + src.defaultPrevented === undefined && + + // Support: Android <=2.3 only + src.returnValue === false ? + returnTrue : + returnFalse; + + // Create target properties + // Support: Safari <=6 - 7 only + // Target should not be a text node (#504, #13143) + this.target = ( src.target && src.target.nodeType === 3 ) ? + src.target.parentNode : + src.target; + + this.currentTarget = src.currentTarget; + this.relatedTarget = src.relatedTarget; + + // Event type + } else { + this.type = src; + } + + // Put explicitly provided properties onto the event object + if ( props ) { + jQuery.extend( this, props ); + } + + // Create a timestamp if incoming event doesn't have one + this.timeStamp = src && src.timeStamp || Date.now(); + + // Mark it as fixed + this[ jQuery.expando ] = true; +}; + +// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding +// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html +jQuery.Event.prototype = { + constructor: jQuery.Event, + isDefaultPrevented: returnFalse, + isPropagationStopped: returnFalse, + isImmediatePropagationStopped: returnFalse, + isSimulated: false, + + preventDefault: function() { + var e = this.originalEvent; + + this.isDefaultPrevented = returnTrue; + + if ( e && !this.isSimulated ) { + e.preventDefault(); + } + }, + stopPropagation: function() { + var e = this.originalEvent; + + this.isPropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopPropagation(); + } + }, + stopImmediatePropagation: function() { + var e = this.originalEvent; + + this.isImmediatePropagationStopped = returnTrue; + + if ( e && !this.isSimulated ) { + e.stopImmediatePropagation(); + } + + this.stopPropagation(); + } +}; + +// Includes all common event props including KeyEvent and MouseEvent specific props +jQuery.each( { + altKey: true, + bubbles: true, + cancelable: true, + changedTouches: true, + ctrlKey: true, + detail: true, + eventPhase: true, + metaKey: true, + pageX: true, + pageY: true, + shiftKey: true, + view: true, + "char": true, + code: true, + charCode: true, + key: true, + keyCode: true, + button: true, + buttons: true, + clientX: true, + clientY: true, + offsetX: true, + offsetY: true, + pointerId: true, + pointerType: true, + screenX: true, + screenY: true, + targetTouches: true, + toElement: true, + touches: true, + which: true +}, jQuery.event.addProp ); + +jQuery.each( { focus: "focusin", blur: "focusout" }, function( type, delegateType ) { + jQuery.event.special[ type ] = { + + // Utilize native event if possible so blur/focus sequence is correct + setup: function() { + + // Claim the first handler + // dataPriv.set( this, "focus", ... ) + // dataPriv.set( this, "blur", ... ) + leverageNative( this, type, expectSync ); + + // Return false to allow normal processing in the caller + return false; + }, + trigger: function() { + + // Force setup before trigger + leverageNative( this, type ); + + // Return non-false to allow normal event-path propagation + return true; + }, + + // Suppress native focus or blur as it's already being fired + // in leverageNative. + _default: function() { + return true; + }, + + delegateType: delegateType + }; +} ); + +// Create mouseenter/leave events using mouseover/out and event-time checks +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://bugs.chromium.org/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { + mouseenter: "mouseover", + mouseleave: "mouseout", + pointerenter: "pointerover", + pointerleave: "pointerout" +}, function( orig, fix ) { + jQuery.event.special[ orig ] = { + delegateType: fix, + bindType: fix, + + handle: function( event ) { + var ret, + target = this, + related = event.relatedTarget, + handleObj = event.handleObj; + + // For mouseenter/leave call the handler if related is outside the target. + // NB: No relatedTarget if the mouse left/entered the browser window + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { + event.type = handleObj.origType; + ret = handleObj.handler.apply( this, arguments ); + event.type = fix; + } + return ret; + } + }; +} ); + +jQuery.fn.extend( { + + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); + }, + one: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn, 1 ); + }, + off: function( types, selector, fn ) { + var handleObj, type; + if ( types && types.preventDefault && types.handleObj ) { + + // ( event ) dispatched jQuery.Event + handleObj = types.handleObj; + jQuery( types.delegateTarget ).off( + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, + handleObj.selector, + handleObj.handler + ); + return this; + } + if ( typeof types === "object" ) { + + // ( types-object [, selector] ) + for ( type in types ) { + this.off( type, selector, types[ type ] ); + } + return this; + } + if ( selector === false || typeof selector === "function" ) { + + // ( types [, fn] ) + fn = selector; + selector = undefined; + } + if ( fn === false ) { + fn = returnFalse; + } + return this.each( function() { + jQuery.event.remove( this, types, fn, selector ); + } ); + } +} ); + + +var + + // Support: IE <=10 - 11, Edge 12 - 13 only + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /\s*$/g; + +// Prefer a tbody over its parent table for containing new rows +function manipulationTarget( elem, content ) { + if ( nodeName( elem, "table" ) && + nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) { + + return jQuery( elem ).children( "tbody" )[ 0 ] || elem; + } + + return elem; +} + +// Replace/restore the type attribute of script elements for safe DOM manipulation +function disableScript( elem ) { + elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type; + return elem; +} +function restoreScript( elem ) { + if ( ( elem.type || "" ).slice( 0, 5 ) === "true/" ) { + elem.type = elem.type.slice( 5 ); + } else { + elem.removeAttribute( "type" ); + } + + return elem; +} + +function cloneCopyEvent( src, dest ) { + var i, l, type, pdataOld, udataOld, udataCur, events; + + if ( dest.nodeType !== 1 ) { + return; + } + + // 1. Copy private data: events, handlers, etc. + if ( dataPriv.hasData( src ) ) { + pdataOld = dataPriv.get( src ); + events = pdataOld.events; + + if ( events ) { + dataPriv.remove( dest, "handle events" ); + + for ( type in events ) { + for ( i = 0, l = events[ type ].length; i < l; i++ ) { + jQuery.event.add( dest, type, events[ type ][ i ] ); + } + } + } + } + + // 2. Copy user data + if ( dataUser.hasData( src ) ) { + udataOld = dataUser.access( src ); + udataCur = jQuery.extend( {}, udataOld ); + + dataUser.set( dest, udataCur ); + } +} + +// Fix IE bugs, see support tests +function fixInput( src, dest ) { + var nodeName = dest.nodeName.toLowerCase(); + + // Fails to persist the checked state of a cloned checkbox or radio button. + if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + dest.checked = src.checked; + + // Fails to return the selected option to the default selected state when cloning options + } else if ( nodeName === "input" || nodeName === "textarea" ) { + dest.defaultValue = src.defaultValue; + } +} + +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = flat( args ); + + var fragment, first, scripts, hasScripts, node, doc, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + valueIsFunction = isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( valueIsFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( valueIsFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !dataPriv.access( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src && ( node.type || "" ).toLowerCase() !== "module" ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl && !node.noModule ) { + jQuery._evalUrl( node.src, { + nonce: node.nonce || node.getAttribute( "nonce" ) + }, doc ); + } + } else { + DOMEval( node.textContent.replace( rcleanScript, "" ), node, doc ); + } + } + } + } + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + nodes = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = nodes[ i ] ) != null; i++ ) { + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && isAttached( node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html; + }, + + clone: function( elem, dataAndEvents, deepDataAndEvents ) { + var i, l, srcElements, destElements, + clone = elem.cloneNode( true ), + inPage = isAttached( elem ); + + // Fix IE cloning issues + if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) && + !jQuery.isXMLDoc( elem ) ) { + + // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2 + destElements = getAll( clone ); + srcElements = getAll( elem ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + fixInput( srcElements[ i ], destElements[ i ] ); + } + } + + // Copy the events from the original to the clone + if ( dataAndEvents ) { + if ( deepDataAndEvents ) { + srcElements = srcElements || getAll( elem ); + destElements = destElements || getAll( clone ); + + for ( i = 0, l = srcElements.length; i < l; i++ ) { + cloneCopyEvent( srcElements[ i ], destElements[ i ] ); + } + } else { + cloneCopyEvent( elem, clone ); + } + } + + // Preserve script evaluation history + destElements = getAll( clone, "script" ); + if ( destElements.length > 0 ) { + setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); + } + + // Return the cloned set + return clone; + }, + + cleanData: function( elems ) { + var data, elem, type, + special = jQuery.event.special, + i = 0; + + for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) { + if ( acceptData( elem ) ) { + if ( ( data = elem[ dataPriv.expando ] ) ) { + if ( data.events ) { + for ( type in data.events ) { + if ( special[ type ] ) { + jQuery.event.remove( elem, type ); + + // This is a shortcut to avoid jQuery.event.remove's overhead + } else { + jQuery.removeEvent( elem, type, data.handle ); + } + } + } + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataPriv.expando ] = undefined; + } + if ( elem[ dataUser.expando ] ) { + + // Support: Chrome <=35 - 45+ + // Assign undefined instead of using delete, see Data#remove + elem[ dataUser.expando ] = undefined; + } + } + } + } +} ); + +jQuery.fn.extend( { + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, + + text: function( value ) { + return access( this, function( value ) { + return value === undefined ? + jQuery.text( this ) : + this.empty().each( function() { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + this.textContent = value; + } + } ); + }, null, value, arguments.length ); + }, + + append: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.appendChild( elem ); + } + } ); + }, + + prepend: function() { + return domManip( this, arguments, function( elem ) { + if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { + var target = manipulationTarget( this, elem ); + target.insertBefore( elem, target.firstChild ); + } + } ); + }, + + before: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this ); + } + } ); + }, + + after: function() { + return domManip( this, arguments, function( elem ) { + if ( this.parentNode ) { + this.parentNode.insertBefore( elem, this.nextSibling ); + } + } ); + }, + + empty: function() { + var elem, + i = 0; + + for ( ; ( elem = this[ i ] ) != null; i++ ) { + if ( elem.nodeType === 1 ) { + + // Prevent memory leaks + jQuery.cleanData( getAll( elem, false ) ); + + // Remove any remaining nodes + elem.textContent = ""; + } + } + + return this; + }, + + clone: function( dataAndEvents, deepDataAndEvents ) { + dataAndEvents = dataAndEvents == null ? false : dataAndEvents; + deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; + + return this.map( function() { + return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); + } ); + }, + + html: function( value ) { + return access( this, function( value ) { + var elem = this[ 0 ] || {}, + i = 0, + l = this.length; + + if ( value === undefined && elem.nodeType === 1 ) { + return elem.innerHTML; + } + + // See if we can take a shortcut and just use innerHTML + if ( typeof value === "string" && !rnoInnerhtml.test( value ) && + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { + + value = jQuery.htmlPrefilter( value ); + + try { + for ( ; i < l; i++ ) { + elem = this[ i ] || {}; + + // Remove element nodes and prevent memory leaks + if ( elem.nodeType === 1 ) { + jQuery.cleanData( getAll( elem, false ) ); + elem.innerHTML = value; + } + } + + elem = 0; + + // If using innerHTML throws an exception, use the fallback method + } catch ( e ) {} + } + + if ( elem ) { + this.empty().append( value ); + } + }, null, value, arguments.length ); + }, + + replaceWith: function() { + var ignored = []; + + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; + + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } + } + + // Force callback invocation + }, ignored ); + } +} ); + +jQuery.each( { + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" +}, function( name, original ) { + jQuery.fn[ name ] = function( selector ) { + var elems, + ret = [], + insert = jQuery( selector ), + last = insert.length - 1, + i = 0; + + for ( ; i <= last; i++ ) { + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); + + // Support: Android <=4.0 only, PhantomJS 1 only + // .get() because push.apply(_, arraylike) throws on ancient WebKit + push.apply( ret, elems.get() ); + } + + return this.pushStack( ret ); + }; +} ); +var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); + +var getStyles = function( elem ) { + + // Support: IE <=11 only, Firefox <=30 (#15098, #14150) + // IE throws on elements created in popups + // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" + var view = elem.ownerDocument.defaultView; + + if ( !view || !view.opener ) { + view = window; + } + + return view.getComputedStyle( elem ); + }; + +var swap = function( elem, options, callback ) { + var ret, name, + old = {}; + + // Remember the old values, and insert the new ones + for ( name in options ) { + old[ name ] = elem.style[ name ]; + elem.style[ name ] = options[ name ]; + } + + ret = callback.call( elem ); + + // Revert the old values + for ( name in options ) { + elem.style[ name ] = old[ name ]; + } + + return ret; +}; + + +var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); + + + +( function() { + + // Executing both pixelPosition & boxSizingReliable tests require only one layout + // so they're executed at the same time to save the second computation. + function computeStyleTests() { + + // This is a singleton, we need to execute it only once + if ( !div ) { + return; + } + + container.style.cssText = "position:absolute;left:-11111px;width:60px;" + + "margin-top:1px;padding:0;border:0"; + div.style.cssText = + "position:relative;display:block;box-sizing:border-box;overflow:scroll;" + + "margin:auto;border:1px;padding:1px;" + + "width:60%;top:1%"; + documentElement.appendChild( container ).appendChild( div ); + + var divStyle = window.getComputedStyle( div ); + pixelPositionVal = divStyle.top !== "1%"; + + // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44 + reliableMarginLeftVal = roundPixelMeasures( divStyle.marginLeft ) === 12; + + // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3 + // Some styles come back with percentage values, even though they shouldn't + div.style.right = "60%"; + pixelBoxStylesVal = roundPixelMeasures( divStyle.right ) === 36; + + // Support: IE 9 - 11 only + // Detect misreporting of content dimensions for box-sizing:border-box elements + boxSizingReliableVal = roundPixelMeasures( divStyle.width ) === 36; + + // Support: IE 9 only + // Detect overflow:scroll screwiness (gh-3699) + // Support: Chrome <=64 + // Don't get tricked when zoom affects offsetWidth (gh-4029) + div.style.position = "absolute"; + scrollboxSizeVal = roundPixelMeasures( div.offsetWidth / 3 ) === 12; + + documentElement.removeChild( container ); + + // Nullify the div so it wouldn't be stored in the memory and + // it will also be a sign that checks already performed + div = null; + } + + function roundPixelMeasures( measure ) { + return Math.round( parseFloat( measure ) ); + } + + var pixelPositionVal, boxSizingReliableVal, scrollboxSizeVal, pixelBoxStylesVal, + reliableTrDimensionsVal, reliableMarginLeftVal, + container = document.createElement( "div" ), + div = document.createElement( "div" ); + + // Finish early in limited (non-browser) environments + if ( !div.style ) { + return; + } + + // Support: IE <=9 - 11 only + // Style of cloned element affects source element cloned (#8908) + div.style.backgroundClip = "content-box"; + div.cloneNode( true ).style.backgroundClip = ""; + support.clearCloneStyle = div.style.backgroundClip === "content-box"; + + jQuery.extend( support, { + boxSizingReliable: function() { + computeStyleTests(); + return boxSizingReliableVal; + }, + pixelBoxStyles: function() { + computeStyleTests(); + return pixelBoxStylesVal; + }, + pixelPosition: function() { + computeStyleTests(); + return pixelPositionVal; + }, + reliableMarginLeft: function() { + computeStyleTests(); + return reliableMarginLeftVal; + }, + scrollboxSize: function() { + computeStyleTests(); + return scrollboxSizeVal; + }, + + // Support: IE 9 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Behavior in IE 9 is more subtle than in newer versions & it passes + // some versions of this test; make sure not to make it pass there! + // + // Support: Firefox 70+ + // Only Firefox includes border widths + // in computed dimensions. (gh-4529) + reliableTrDimensions: function() { + var table, tr, trChild, trStyle; + if ( reliableTrDimensionsVal == null ) { + table = document.createElement( "table" ); + tr = document.createElement( "tr" ); + trChild = document.createElement( "div" ); + + table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; + tr.style.cssText = "border:1px solid"; + + // Support: Chrome 86+ + // Height set through cssText does not get applied. + // Computed height then comes back as 0. + tr.style.height = "1px"; + trChild.style.height = "9px"; + + // Support: Android 8 Chrome 86+ + // In our bodyBackground.html iframe, + // display for all div elements is set to "inline", + // which causes a problem only in Android 8 Chrome 86. + // Ensuring the div is display: block + // gets around this issue. + trChild.style.display = "block"; + + documentElement + .appendChild( table ) + .appendChild( tr ) + .appendChild( trChild ); + + trStyle = window.getComputedStyle( tr ); + reliableTrDimensionsVal = ( parseInt( trStyle.height, 10 ) + + parseInt( trStyle.borderTopWidth, 10 ) + + parseInt( trStyle.borderBottomWidth, 10 ) ) === tr.offsetHeight; + + documentElement.removeChild( table ); + } + return reliableTrDimensionsVal; + } + } ); +} )(); + + +function curCSS( elem, name, computed ) { + var width, minWidth, maxWidth, ret, + + // Support: Firefox 51+ + // Retrieving style before computed somehow + // fixes an issue with getting wrong values + // on detached elements + style = elem.style; + + computed = computed || getStyles( elem ); + + // getPropertyValue is needed for: + // .css('filter') (IE 9 only, #12537) + // .css('--customProperty) (#3144) + if ( computed ) { + ret = computed.getPropertyValue( name ) || computed[ name ]; + + if ( ret === "" && !isAttached( elem ) ) { + ret = jQuery.style( elem, name ); + } + + // A tribute to the "awesome hack by Dean Edwards" + // Android Browser returns percentage for some values, + // but width seems to be reliably pixels. + // This is against the CSSOM draft spec: + // https://drafts.csswg.org/cssom/#resolved-values + if ( !support.pixelBoxStyles() && rnumnonpx.test( ret ) && rboxStyle.test( name ) ) { + + // Remember the original values + width = style.width; + minWidth = style.minWidth; + maxWidth = style.maxWidth; + + // Put in the new values to get a computed value out + style.minWidth = style.maxWidth = style.width = ret; + ret = computed.width; + + // Revert the changed values + style.width = width; + style.minWidth = minWidth; + style.maxWidth = maxWidth; + } + } + + return ret !== undefined ? + + // Support: IE <=9 - 11 only + // IE returns zIndex value as an integer. + ret + "" : + ret; +} + + +function addGetHookIf( conditionFn, hookFn ) { + + // Define the hook, we'll check on the first run if it's really needed. + return { + get: function() { + if ( conditionFn() ) { + + // Hook not needed (or it's not possible to use it due + // to missing dependency), remove it. + delete this.get; + return; + } + + // Hook needed; redefine it so that the support test is not executed again. + return ( this.get = hookFn ).apply( this, arguments ); + } + }; +} + + +var cssPrefixes = [ "Webkit", "Moz", "ms" ], + emptyStyle = document.createElement( "div" ).style, + vendorProps = {}; + +// Return a vendor-prefixed property or undefined +function vendorPropName( name ) { + + // Check for vendor prefixed names + var capName = name[ 0 ].toUpperCase() + name.slice( 1 ), + i = cssPrefixes.length; + + while ( i-- ) { + name = cssPrefixes[ i ] + capName; + if ( name in emptyStyle ) { + return name; + } + } +} + +// Return a potentially-mapped jQuery.cssProps or vendor prefixed property +function finalPropName( name ) { + var final = jQuery.cssProps[ name ] || vendorProps[ name ]; + + if ( final ) { + return final; + } + if ( name in emptyStyle ) { + return name; + } + return vendorProps[ name ] = vendorPropName( name ) || name; +} + + +var + + // Swappable if display is none or starts with table + // except "table", "table-cell", or "table-caption" + // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display + rdisplayswap = /^(none|table(?!-c[ea]).+)/, + rcustomProp = /^--/, + cssShow = { position: "absolute", visibility: "hidden", display: "block" }, + cssNormalTransform = { + letterSpacing: "0", + fontWeight: "400" + }; + +function setPositiveNumber( _elem, value, subtract ) { + + // Any relative (+/-) values have already been + // normalized at this point + var matches = rcssNum.exec( value ); + return matches ? + + // Guard against undefined "subtract", e.g., when used as in cssHooks + Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) : + value; +} + +function boxModelAdjustment( elem, dimension, box, isBorderBox, styles, computedVal ) { + var i = dimension === "width" ? 1 : 0, + extra = 0, + delta = 0; + + // Adjustment may not be necessary + if ( box === ( isBorderBox ? "border" : "content" ) ) { + return 0; + } + + for ( ; i < 4; i += 2 ) { + + // Both box models exclude margin + if ( box === "margin" ) { + delta += jQuery.css( elem, box + cssExpand[ i ], true, styles ); + } + + // If we get here with a content-box, we're seeking "padding" or "border" or "margin" + if ( !isBorderBox ) { + + // Add padding + delta += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + + // For "border" or "margin", add border + if ( box !== "padding" ) { + delta += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + + // But still keep track of it otherwise + } else { + extra += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + + // If we get here with a border-box (content + padding + border), we're seeking "content" or + // "padding" or "margin" + } else { + + // For "content", subtract padding + if ( box === "content" ) { + delta -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); + } + + // For "content" or "padding", subtract border + if ( box !== "margin" ) { + delta -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); + } + } + } + + // Account for positive content-box scroll gutter when requested by providing computedVal + if ( !isBorderBox && computedVal >= 0 ) { + + // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border + // Assuming integer scroll gutter, subtract the rest and round down + delta += Math.max( 0, Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + computedVal - + delta - + extra - + 0.5 + + // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter + // Use an explicit zero to avoid NaN (gh-3964) + ) ) || 0; + } + + return delta; +} + +function getWidthOrHeight( elem, dimension, extra ) { + + // Start with computed style + var styles = getStyles( elem ), + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322). + // Fake content-box until we know it's needed to know the true value. + boxSizingNeeded = !support.boxSizingReliable() || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + valueIsBorderBox = isBorderBox, + + val = curCSS( elem, dimension, styles ), + offsetProp = "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ); + + // Support: Firefox <=54 + // Return a confounding non-pixel value or feign ignorance, as appropriate. + if ( rnumnonpx.test( val ) ) { + if ( !extra ) { + return val; + } + val = "auto"; + } + + + // Support: IE 9 - 11 only + // Use offsetWidth/offsetHeight for when box sizing is unreliable. + // In those cases, the computed value can be trusted to be border-box. + if ( ( !support.boxSizingReliable() && isBorderBox || + + // Support: IE 10 - 11+, Edge 15 - 18+ + // IE/Edge misreport `getComputedStyle` of table rows with width/height + // set in CSS while `offset*` properties report correct values. + // Interestingly, in some cases IE 9 doesn't suffer from this issue. + !support.reliableTrDimensions() && nodeName( elem, "tr" ) || + + // Fall back to offsetWidth/offsetHeight when value is "auto" + // This happens for inline elements with no explicit setting (gh-3571) + val === "auto" || + + // Support: Android <=4.1 - 4.3 only + // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602) + !parseFloat( val ) && jQuery.css( elem, "display", false, styles ) === "inline" ) && + + // Make sure the element is visible & connected + elem.getClientRects().length ) { + + isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; + + // Where available, offsetWidth/offsetHeight approximate border box dimensions. + // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the + // retrieved value as a content box dimension. + valueIsBorderBox = offsetProp in elem; + if ( valueIsBorderBox ) { + val = elem[ offsetProp ]; + } + } + + // Normalize "" and auto + val = parseFloat( val ) || 0; + + // Adjust for the element's box model + return ( val + + boxModelAdjustment( + elem, + dimension, + extra || ( isBorderBox ? "border" : "content" ), + valueIsBorderBox, + styles, + + // Provide the current computed size to request scroll gutter calculation (gh-3589) + val + ) + ) + "px"; +} + +jQuery.extend( { + + // Add in style property hooks for overriding the default + // behavior of getting and setting a style property + cssHooks: { + opacity: { + get: function( elem, computed ) { + if ( computed ) { + + // We should always get a number back from opacity + var ret = curCSS( elem, "opacity" ); + return ret === "" ? "1" : ret; + } + } + } + }, + + // Don't automatically add "px" to these possibly-unitless properties + cssNumber: { + "animationIterationCount": true, + "columnCount": true, + "fillOpacity": true, + "flexGrow": true, + "flexShrink": true, + "fontWeight": true, + "gridArea": true, + "gridColumn": true, + "gridColumnEnd": true, + "gridColumnStart": true, + "gridRow": true, + "gridRowEnd": true, + "gridRowStart": true, + "lineHeight": true, + "opacity": true, + "order": true, + "orphans": true, + "widows": true, + "zIndex": true, + "zoom": true + }, + + // Add in properties whose names you wish to fix before + // setting or getting the value + cssProps: {}, + + // Get and set the style property on a DOM Node + style: function( elem, name, value, extra ) { + + // Don't set styles on text and comment nodes + if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { + return; + } + + // Make sure that we're working with the right name + var ret, type, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ), + style = elem.style; + + // Make sure that we're working with the right name. We don't + // want to query the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Gets hook for the prefixed version, then unprefixed version + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // Check if we're setting a value + if ( value !== undefined ) { + type = typeof value; + + // Convert "+=" or "-=" to relative numbers (#7345) + if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) { + value = adjustCSS( elem, name, ret ); + + // Fixes bug #9237 + type = "number"; + } + + // Make sure that null and NaN values aren't set (#7116) + if ( value == null || value !== value ) { + return; + } + + // If a number was passed in, add the unit (except for certain CSS properties) + // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append + // "px" to a few hardcoded values. + if ( type === "number" && !isCustomProp ) { + value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" ); + } + + // background-* props affect original clone's values + if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { + style[ name ] = "inherit"; + } + + // If a hook was provided, use that value, otherwise just set the specified value + if ( !hooks || !( "set" in hooks ) || + ( value = hooks.set( elem, value, extra ) ) !== undefined ) { + + if ( isCustomProp ) { + style.setProperty( name, value ); + } else { + style[ name ] = value; + } + } + + } else { + + // If a hook was provided get the non-computed value from there + if ( hooks && "get" in hooks && + ( ret = hooks.get( elem, false, extra ) ) !== undefined ) { + + return ret; + } + + // Otherwise just get the value from the style object + return style[ name ]; + } + }, + + css: function( elem, name, extra, styles ) { + var val, num, hooks, + origName = camelCase( name ), + isCustomProp = rcustomProp.test( name ); + + // Make sure that we're working with the right name. We don't + // want to modify the value if it is a CSS custom property + // since they are user-defined. + if ( !isCustomProp ) { + name = finalPropName( origName ); + } + + // Try prefixed name followed by the unprefixed name + hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; + + // If a hook was provided get the computed value from there + if ( hooks && "get" in hooks ) { + val = hooks.get( elem, true, extra ); + } + + // Otherwise, if a way to get the computed value exists, use that + if ( val === undefined ) { + val = curCSS( elem, name, styles ); + } + + // Convert "normal" to computed value + if ( val === "normal" && name in cssNormalTransform ) { + val = cssNormalTransform[ name ]; + } + + // Make numeric if forced or a qualifier was provided and val looks numeric + if ( extra === "" || extra ) { + num = parseFloat( val ); + return extra === true || isFinite( num ) ? num || 0 : val; + } + + return val; + } +} ); + +jQuery.each( [ "height", "width" ], function( _i, dimension ) { + jQuery.cssHooks[ dimension ] = { + get: function( elem, computed, extra ) { + if ( computed ) { + + // Certain elements can have dimension info if we invisibly show them + // but it must have a current display style that would benefit + return rdisplayswap.test( jQuery.css( elem, "display" ) ) && + + // Support: Safari 8+ + // Table columns in Safari have non-zero offsetWidth & zero + // getBoundingClientRect().width unless display is changed. + // Support: IE <=11 only + // Running getBoundingClientRect on a disconnected node + // in IE throws an error. + ( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ? + swap( elem, cssShow, function() { + return getWidthOrHeight( elem, dimension, extra ); + } ) : + getWidthOrHeight( elem, dimension, extra ); + } + }, + + set: function( elem, value, extra ) { + var matches, + styles = getStyles( elem ), + + // Only read styles.position if the test has a chance to fail + // to avoid forcing a reflow. + scrollboxSizeBuggy = !support.scrollboxSize() && + styles.position === "absolute", + + // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991) + boxSizingNeeded = scrollboxSizeBuggy || extra, + isBorderBox = boxSizingNeeded && + jQuery.css( elem, "boxSizing", false, styles ) === "border-box", + subtract = extra ? + boxModelAdjustment( + elem, + dimension, + extra, + isBorderBox, + styles + ) : + 0; + + // Account for unreliable border-box dimensions by comparing offset* to computed and + // faking a content-box to get border and padding (gh-3699) + if ( isBorderBox && scrollboxSizeBuggy ) { + subtract -= Math.ceil( + elem[ "offset" + dimension[ 0 ].toUpperCase() + dimension.slice( 1 ) ] - + parseFloat( styles[ dimension ] ) - + boxModelAdjustment( elem, dimension, "border", false, styles ) - + 0.5 + ); + } + + // Convert to pixels if value adjustment is needed + if ( subtract && ( matches = rcssNum.exec( value ) ) && + ( matches[ 3 ] || "px" ) !== "px" ) { + + elem.style[ dimension ] = value; + value = jQuery.css( elem, dimension ); + } + + return setPositiveNumber( elem, value, subtract ); + } + }; +} ); + +jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft, + function( elem, computed ) { + if ( computed ) { + return ( parseFloat( curCSS( elem, "marginLeft" ) ) || + elem.getBoundingClientRect().left - + swap( elem, { marginLeft: 0 }, function() { + return elem.getBoundingClientRect().left; + } ) + ) + "px"; + } + } +); + +// These hooks are used by animate to expand properties +jQuery.each( { + margin: "", + padding: "", + border: "Width" +}, function( prefix, suffix ) { + jQuery.cssHooks[ prefix + suffix ] = { + expand: function( value ) { + var i = 0, + expanded = {}, + + // Assumes a single number if not a string + parts = typeof value === "string" ? value.split( " " ) : [ value ]; + + for ( ; i < 4; i++ ) { + expanded[ prefix + cssExpand[ i ] + suffix ] = + parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; + } + + return expanded; + } + }; + + if ( prefix !== "margin" ) { + jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; + } +} ); + +jQuery.fn.extend( { + css: function( name, value ) { + return access( this, function( elem, name, value ) { + var styles, len, + map = {}, + i = 0; + + if ( Array.isArray( name ) ) { + styles = getStyles( elem ); + len = name.length; + + for ( ; i < len; i++ ) { + map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); + } + + return map; + } + + return value !== undefined ? + jQuery.style( elem, name, value ) : + jQuery.css( elem, name ); + }, name, value, arguments.length > 1 ); + } +} ); + + +function Tween( elem, options, prop, end, easing ) { + return new Tween.prototype.init( elem, options, prop, end, easing ); +} +jQuery.Tween = Tween; + +Tween.prototype = { + constructor: Tween, + init: function( elem, options, prop, end, easing, unit ) { + this.elem = elem; + this.prop = prop; + this.easing = easing || jQuery.easing._default; + this.options = options; + this.start = this.now = this.cur(); + this.end = end; + this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); + }, + cur: function() { + var hooks = Tween.propHooks[ this.prop ]; + + return hooks && hooks.get ? + hooks.get( this ) : + Tween.propHooks._default.get( this ); + }, + run: function( percent ) { + var eased, + hooks = Tween.propHooks[ this.prop ]; + + if ( this.options.duration ) { + this.pos = eased = jQuery.easing[ this.easing ]( + percent, this.options.duration * percent, 0, 1, this.options.duration + ); + } else { + this.pos = eased = percent; + } + this.now = ( this.end - this.start ) * eased + this.start; + + if ( this.options.step ) { + this.options.step.call( this.elem, this.now, this ); + } + + if ( hooks && hooks.set ) { + hooks.set( this ); + } else { + Tween.propHooks._default.set( this ); + } + return this; + } +}; + +Tween.prototype.init.prototype = Tween.prototype; + +Tween.propHooks = { + _default: { + get: function( tween ) { + var result; + + // Use a property on the element directly when it is not a DOM element, + // or when there is no matching style property that exists. + if ( tween.elem.nodeType !== 1 || + tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) { + return tween.elem[ tween.prop ]; + } + + // Passing an empty string as a 3rd parameter to .css will automatically + // attempt a parseFloat and fallback to a string if the parse fails. + // Simple values such as "10px" are parsed to Float; + // complex values such as "rotate(1rad)" are returned as-is. + result = jQuery.css( tween.elem, tween.prop, "" ); + + // Empty strings, null, undefined and "auto" are converted to 0. + return !result || result === "auto" ? 0 : result; + }, + set: function( tween ) { + + // Use step hook for back compat. + // Use cssHook if its there. + // Use .style if available and use plain properties where available. + if ( jQuery.fx.step[ tween.prop ] ) { + jQuery.fx.step[ tween.prop ]( tween ); + } else if ( tween.elem.nodeType === 1 && ( + jQuery.cssHooks[ tween.prop ] || + tween.elem.style[ finalPropName( tween.prop ) ] != null ) ) { + jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); + } else { + tween.elem[ tween.prop ] = tween.now; + } + } + } +}; + +// Support: IE <=9 only +// Panic based approach to setting things on disconnected nodes +Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { + set: function( tween ) { + if ( tween.elem.nodeType && tween.elem.parentNode ) { + tween.elem[ tween.prop ] = tween.now; + } + } +}; + +jQuery.easing = { + linear: function( p ) { + return p; + }, + swing: function( p ) { + return 0.5 - Math.cos( p * Math.PI ) / 2; + }, + _default: "swing" +}; + +jQuery.fx = Tween.prototype.init; + +// Back compat <1.8 extension point +jQuery.fx.step = {}; + + + + +var + fxNow, inProgress, + rfxtypes = /^(?:toggle|show|hide)$/, + rrun = /queueHooks$/; + +function schedule() { + if ( inProgress ) { + if ( document.hidden === false && window.requestAnimationFrame ) { + window.requestAnimationFrame( schedule ); + } else { + window.setTimeout( schedule, jQuery.fx.interval ); + } + + jQuery.fx.tick(); + } +} + +// Animations created synchronously will run synchronously +function createFxNow() { + window.setTimeout( function() { + fxNow = undefined; + } ); + return ( fxNow = Date.now() ); +} + +// Generate parameters to create a standard animation +function genFx( type, includeWidth ) { + var which, + i = 0, + attrs = { height: type }; + + // If we include width, step value is 1 to do all cssExpand values, + // otherwise step value is 2 to skip over Left and Right + includeWidth = includeWidth ? 1 : 0; + for ( ; i < 4; i += 2 - includeWidth ) { + which = cssExpand[ i ]; + attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; + } + + if ( includeWidth ) { + attrs.opacity = attrs.width = type; + } + + return attrs; +} + +function createTween( value, prop, animation ) { + var tween, + collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ), + index = 0, + length = collection.length; + for ( ; index < length; index++ ) { + if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) { + + // We're done with this property + return tween; + } + } +} + +function defaultPrefilter( elem, props, opts ) { + var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display, + isBox = "width" in props || "height" in props, + anim = this, + orig = {}, + style = elem.style, + hidden = elem.nodeType && isHiddenWithinTree( elem ), + dataShow = dataPriv.get( elem, "fxshow" ); + + // Queue-skipping animations hijack the fx hooks + if ( !opts.queue ) { + hooks = jQuery._queueHooks( elem, "fx" ); + if ( hooks.unqueued == null ) { + hooks.unqueued = 0; + oldfire = hooks.empty.fire; + hooks.empty.fire = function() { + if ( !hooks.unqueued ) { + oldfire(); + } + }; + } + hooks.unqueued++; + + anim.always( function() { + + // Ensure the complete handler is called before this completes + anim.always( function() { + hooks.unqueued--; + if ( !jQuery.queue( elem, "fx" ).length ) { + hooks.empty.fire(); + } + } ); + } ); + } + + // Detect show/hide animations + for ( prop in props ) { + value = props[ prop ]; + if ( rfxtypes.test( value ) ) { + delete props[ prop ]; + toggle = toggle || value === "toggle"; + if ( value === ( hidden ? "hide" : "show" ) ) { + + // Pretend to be hidden if this is a "show" and + // there is still data from a stopped show/hide + if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { + hidden = true; + + // Ignore all other no-op show/hide data + } else { + continue; + } + } + orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); + } + } + + // Bail out if this is a no-op like .hide().hide() + propTween = !jQuery.isEmptyObject( props ); + if ( !propTween && jQuery.isEmptyObject( orig ) ) { + return; + } + + // Restrict "overflow" and "display" styles during box animations + if ( isBox && elem.nodeType === 1 ) { + + // Support: IE <=9 - 11, Edge 12 - 15 + // Record all 3 overflow attributes because IE does not infer the shorthand + // from identically-valued overflowX and overflowY and Edge just mirrors + // the overflowX value there. + opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; + + // Identify a display type, preferring old show/hide data over the CSS cascade + restoreDisplay = dataShow && dataShow.display; + if ( restoreDisplay == null ) { + restoreDisplay = dataPriv.get( elem, "display" ); + } + display = jQuery.css( elem, "display" ); + if ( display === "none" ) { + if ( restoreDisplay ) { + display = restoreDisplay; + } else { + + // Get nonempty value(s) by temporarily forcing visibility + showHide( [ elem ], true ); + restoreDisplay = elem.style.display || restoreDisplay; + display = jQuery.css( elem, "display" ); + showHide( [ elem ] ); + } + } + + // Animate inline elements as inline-block + if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) { + if ( jQuery.css( elem, "float" ) === "none" ) { + + // Restore the original display value at the end of pure show/hide animations + if ( !propTween ) { + anim.done( function() { + style.display = restoreDisplay; + } ); + if ( restoreDisplay == null ) { + display = style.display; + restoreDisplay = display === "none" ? "" : display; + } + } + style.display = "inline-block"; + } + } + } + + if ( opts.overflow ) { + style.overflow = "hidden"; + anim.always( function() { + style.overflow = opts.overflow[ 0 ]; + style.overflowX = opts.overflow[ 1 ]; + style.overflowY = opts.overflow[ 2 ]; + } ); + } + + // Implement show/hide animations + propTween = false; + for ( prop in orig ) { + + // General show/hide setup for this element animation + if ( !propTween ) { + if ( dataShow ) { + if ( "hidden" in dataShow ) { + hidden = dataShow.hidden; + } + } else { + dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } ); + } + + // Store hidden/visible for toggle so `.stop().toggle()` "reverses" + if ( toggle ) { + dataShow.hidden = !hidden; + } + + // Show elements before animating them + if ( hidden ) { + showHide( [ elem ], true ); + } + + /* eslint-disable no-loop-func */ + + anim.done( function() { + + /* eslint-enable no-loop-func */ + + // The final step of a "hide" animation is actually hiding the element + if ( !hidden ) { + showHide( [ elem ] ); + } + dataPriv.remove( elem, "fxshow" ); + for ( prop in orig ) { + jQuery.style( elem, prop, orig[ prop ] ); + } + } ); + } + + // Per-property setup + propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); + if ( !( prop in dataShow ) ) { + dataShow[ prop ] = propTween.start; + if ( hidden ) { + propTween.end = propTween.start; + propTween.start = 0; + } + } + } +} + +function propFilter( props, specialEasing ) { + var index, name, easing, value, hooks; + + // camelCase, specialEasing and expand cssHook pass + for ( index in props ) { + name = camelCase( index ); + easing = specialEasing[ name ]; + value = props[ index ]; + if ( Array.isArray( value ) ) { + easing = value[ 1 ]; + value = props[ index ] = value[ 0 ]; + } + + if ( index !== name ) { + props[ name ] = value; + delete props[ index ]; + } + + hooks = jQuery.cssHooks[ name ]; + if ( hooks && "expand" in hooks ) { + value = hooks.expand( value ); + delete props[ name ]; + + // Not quite $.extend, this won't overwrite existing keys. + // Reusing 'index' because we have the correct "name" + for ( index in value ) { + if ( !( index in props ) ) { + props[ index ] = value[ index ]; + specialEasing[ index ] = easing; + } + } + } else { + specialEasing[ name ] = easing; + } + } +} + +function Animation( elem, properties, options ) { + var result, + stopped, + index = 0, + length = Animation.prefilters.length, + deferred = jQuery.Deferred().always( function() { + + // Don't match elem in the :animated selector + delete tick.elem; + } ), + tick = function() { + if ( stopped ) { + return false; + } + var currentTime = fxNow || createFxNow(), + remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), + + // Support: Android 2.3 only + // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) + temp = remaining / animation.duration || 0, + percent = 1 - temp, + index = 0, + length = animation.tweens.length; + + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( percent ); + } + + deferred.notifyWith( elem, [ animation, percent, remaining ] ); + + // If there's more to do, yield + if ( percent < 1 && length ) { + return remaining; + } + + // If this was an empty animation, synthesize a final progress notification + if ( !length ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + } + + // Resolve the animation and report its conclusion + deferred.resolveWith( elem, [ animation ] ); + return false; + }, + animation = deferred.promise( { + elem: elem, + props: jQuery.extend( {}, properties ), + opts: jQuery.extend( true, { + specialEasing: {}, + easing: jQuery.easing._default + }, options ), + originalProperties: properties, + originalOptions: options, + startTime: fxNow || createFxNow(), + duration: options.duration, + tweens: [], + createTween: function( prop, end ) { + var tween = jQuery.Tween( elem, animation.opts, prop, end, + animation.opts.specialEasing[ prop ] || animation.opts.easing ); + animation.tweens.push( tween ); + return tween; + }, + stop: function( gotoEnd ) { + var index = 0, + + // If we are going to the end, we want to run all the tweens + // otherwise we skip this part + length = gotoEnd ? animation.tweens.length : 0; + if ( stopped ) { + return this; + } + stopped = true; + for ( ; index < length; index++ ) { + animation.tweens[ index ].run( 1 ); + } + + // Resolve when we played the last frame; otherwise, reject + if ( gotoEnd ) { + deferred.notifyWith( elem, [ animation, 1, 0 ] ); + deferred.resolveWith( elem, [ animation, gotoEnd ] ); + } else { + deferred.rejectWith( elem, [ animation, gotoEnd ] ); + } + return this; + } + } ), + props = animation.props; + + propFilter( props, animation.opts.specialEasing ); + + for ( ; index < length; index++ ) { + result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts ); + if ( result ) { + if ( isFunction( result.stop ) ) { + jQuery._queueHooks( animation.elem, animation.opts.queue ).stop = + result.stop.bind( result ); + } + return result; + } + } + + jQuery.map( props, createTween, animation ); + + if ( isFunction( animation.opts.start ) ) { + animation.opts.start.call( elem, animation ); + } + + // Attach callbacks from options + animation + .progress( animation.opts.progress ) + .done( animation.opts.done, animation.opts.complete ) + .fail( animation.opts.fail ) + .always( animation.opts.always ); + + jQuery.fx.timer( + jQuery.extend( tick, { + elem: elem, + anim: animation, + queue: animation.opts.queue + } ) + ); + + return animation; +} + +jQuery.Animation = jQuery.extend( Animation, { + + tweeners: { + "*": [ function( prop, value ) { + var tween = this.createTween( prop, value ); + adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween ); + return tween; + } ] + }, + + tweener: function( props, callback ) { + if ( isFunction( props ) ) { + callback = props; + props = [ "*" ]; + } else { + props = props.match( rnothtmlwhite ); + } + + var prop, + index = 0, + length = props.length; + + for ( ; index < length; index++ ) { + prop = props[ index ]; + Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || []; + Animation.tweeners[ prop ].unshift( callback ); + } + }, + + prefilters: [ defaultPrefilter ], + + prefilter: function( callback, prepend ) { + if ( prepend ) { + Animation.prefilters.unshift( callback ); + } else { + Animation.prefilters.push( callback ); + } + } +} ); + +jQuery.speed = function( speed, easing, fn ) { + var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { + complete: fn || !fn && easing || + isFunction( speed ) && speed, + duration: speed, + easing: fn && easing || easing && !isFunction( easing ) && easing + }; + + // Go to the end state if fx are off + if ( jQuery.fx.off ) { + opt.duration = 0; + + } else { + if ( typeof opt.duration !== "number" ) { + if ( opt.duration in jQuery.fx.speeds ) { + opt.duration = jQuery.fx.speeds[ opt.duration ]; + + } else { + opt.duration = jQuery.fx.speeds._default; + } + } + } + + // Normalize opt.queue - true/undefined/null -> "fx" + if ( opt.queue == null || opt.queue === true ) { + opt.queue = "fx"; + } + + // Queueing + opt.old = opt.complete; + + opt.complete = function() { + if ( isFunction( opt.old ) ) { + opt.old.call( this ); + } + + if ( opt.queue ) { + jQuery.dequeue( this, opt.queue ); + } + }; + + return opt; +}; + +jQuery.fn.extend( { + fadeTo: function( speed, to, easing, callback ) { + + // Show any hidden elements after setting opacity to 0 + return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show() + + // Animate to the value specified + .end().animate( { opacity: to }, speed, easing, callback ); + }, + animate: function( prop, speed, easing, callback ) { + var empty = jQuery.isEmptyObject( prop ), + optall = jQuery.speed( speed, easing, callback ), + doAnimation = function() { + + // Operate on a copy of prop so per-property easing won't be lost + var anim = Animation( this, jQuery.extend( {}, prop ), optall ); + + // Empty animations, or finishing resolves immediately + if ( empty || dataPriv.get( this, "finish" ) ) { + anim.stop( true ); + } + }; + + doAnimation.finish = doAnimation; + + return empty || optall.queue === false ? + this.each( doAnimation ) : + this.queue( optall.queue, doAnimation ); + }, + stop: function( type, clearQueue, gotoEnd ) { + var stopQueue = function( hooks ) { + var stop = hooks.stop; + delete hooks.stop; + stop( gotoEnd ); + }; + + if ( typeof type !== "string" ) { + gotoEnd = clearQueue; + clearQueue = type; + type = undefined; + } + if ( clearQueue ) { + this.queue( type || "fx", [] ); + } + + return this.each( function() { + var dequeue = true, + index = type != null && type + "queueHooks", + timers = jQuery.timers, + data = dataPriv.get( this ); + + if ( index ) { + if ( data[ index ] && data[ index ].stop ) { + stopQueue( data[ index ] ); + } + } else { + for ( index in data ) { + if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { + stopQueue( data[ index ] ); + } + } + } + + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && + ( type == null || timers[ index ].queue === type ) ) { + + timers[ index ].anim.stop( gotoEnd ); + dequeue = false; + timers.splice( index, 1 ); + } + } + + // Start the next in the queue if the last step wasn't forced. + // Timers currently will call their complete callbacks, which + // will dequeue but only if they were gotoEnd. + if ( dequeue || !gotoEnd ) { + jQuery.dequeue( this, type ); + } + } ); + }, + finish: function( type ) { + if ( type !== false ) { + type = type || "fx"; + } + return this.each( function() { + var index, + data = dataPriv.get( this ), + queue = data[ type + "queue" ], + hooks = data[ type + "queueHooks" ], + timers = jQuery.timers, + length = queue ? queue.length : 0; + + // Enable finishing flag on private data + data.finish = true; + + // Empty the queue first + jQuery.queue( this, type, [] ); + + if ( hooks && hooks.stop ) { + hooks.stop.call( this, true ); + } + + // Look for any active animations, and finish them + for ( index = timers.length; index--; ) { + if ( timers[ index ].elem === this && timers[ index ].queue === type ) { + timers[ index ].anim.stop( true ); + timers.splice( index, 1 ); + } + } + + // Look for any animations in the old queue and finish them + for ( index = 0; index < length; index++ ) { + if ( queue[ index ] && queue[ index ].finish ) { + queue[ index ].finish.call( this ); + } + } + + // Turn off finishing flag + delete data.finish; + } ); + } +} ); + +jQuery.each( [ "toggle", "show", "hide" ], function( _i, name ) { + var cssFn = jQuery.fn[ name ]; + jQuery.fn[ name ] = function( speed, easing, callback ) { + return speed == null || typeof speed === "boolean" ? + cssFn.apply( this, arguments ) : + this.animate( genFx( name, true ), speed, easing, callback ); + }; +} ); + +// Generate shortcuts for custom animations +jQuery.each( { + slideDown: genFx( "show" ), + slideUp: genFx( "hide" ), + slideToggle: genFx( "toggle" ), + fadeIn: { opacity: "show" }, + fadeOut: { opacity: "hide" }, + fadeToggle: { opacity: "toggle" } +}, function( name, props ) { + jQuery.fn[ name ] = function( speed, easing, callback ) { + return this.animate( props, speed, easing, callback ); + }; +} ); + +jQuery.timers = []; +jQuery.fx.tick = function() { + var timer, + i = 0, + timers = jQuery.timers; + + fxNow = Date.now(); + + for ( ; i < timers.length; i++ ) { + timer = timers[ i ]; + + // Run the timer and safely remove it when done (allowing for external removal) + if ( !timer() && timers[ i ] === timer ) { + timers.splice( i--, 1 ); + } + } + + if ( !timers.length ) { + jQuery.fx.stop(); + } + fxNow = undefined; +}; + +jQuery.fx.timer = function( timer ) { + jQuery.timers.push( timer ); + jQuery.fx.start(); +}; + +jQuery.fx.interval = 13; +jQuery.fx.start = function() { + if ( inProgress ) { + return; + } + + inProgress = true; + schedule(); +}; + +jQuery.fx.stop = function() { + inProgress = null; +}; + +jQuery.fx.speeds = { + slow: 600, + fast: 200, + + // Default speed + _default: 400 +}; + + +// Based off of the plugin by Clint Helfers, with permission. +// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/ +jQuery.fn.delay = function( time, type ) { + time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; + type = type || "fx"; + + return this.queue( type, function( next, hooks ) { + var timeout = window.setTimeout( next, time ); + hooks.stop = function() { + window.clearTimeout( timeout ); + }; + } ); +}; + + +( function() { + var input = document.createElement( "input" ), + select = document.createElement( "select" ), + opt = select.appendChild( document.createElement( "option" ) ); + + input.type = "checkbox"; + + // Support: Android <=4.3 only + // Default value for a checkbox should be "on" + support.checkOn = input.value !== ""; + + // Support: IE <=11 only + // Must access selectedIndex to make default options select + support.optSelected = opt.selected; + + // Support: IE <=11 only + // An input loses its value after becoming a radio + input = document.createElement( "input" ); + input.value = "t"; + input.type = "radio"; + support.radioValue = input.value === "t"; +} )(); + + +var boolHook, + attrHandle = jQuery.expr.attrHandle; + +jQuery.fn.extend( { + attr: function( name, value ) { + return access( this, jQuery.attr, name, value, arguments.length > 1 ); + }, + + removeAttr: function( name ) { + return this.each( function() { + jQuery.removeAttr( this, name ); + } ); + } +} ); + +jQuery.extend( { + attr: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set attributes on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + // Fallback to prop when attributes are not supported + if ( typeof elem.getAttribute === "undefined" ) { + return jQuery.prop( elem, name, value ); + } + + // Attribute hooks are determined by the lowercase version + // Grab necessary hook if one is defined + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + hooks = jQuery.attrHooks[ name.toLowerCase() ] || + ( jQuery.expr.match.bool.test( name ) ? boolHook : undefined ); + } + + if ( value !== undefined ) { + if ( value === null ) { + jQuery.removeAttr( elem, name ); + return; + } + + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + elem.setAttribute( name, value + "" ); + return value; + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + ret = jQuery.find.attr( elem, name ); + + // Non-existent attributes return null, we normalize to undefined + return ret == null ? undefined : ret; + }, + + attrHooks: { + type: { + set: function( elem, value ) { + if ( !support.radioValue && value === "radio" && + nodeName( elem, "input" ) ) { + var val = elem.value; + elem.setAttribute( "type", value ); + if ( val ) { + elem.value = val; + } + return value; + } + } + } + }, + + removeAttr: function( elem, value ) { + var name, + i = 0, + + // Attribute names can contain non-HTML whitespace characters + // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2 + attrNames = value && value.match( rnothtmlwhite ); + + if ( attrNames && elem.nodeType === 1 ) { + while ( ( name = attrNames[ i++ ] ) ) { + elem.removeAttribute( name ); + } + } + } +} ); + +// Hooks for boolean attributes +boolHook = { + set: function( elem, value, name ) { + if ( value === false ) { + + // Remove boolean attributes when set to false + jQuery.removeAttr( elem, name ); + } else { + elem.setAttribute( name, name ); + } + return name; + } +}; + +jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( _i, name ) { + var getter = attrHandle[ name ] || jQuery.find.attr; + + attrHandle[ name ] = function( elem, name, isXML ) { + var ret, handle, + lowercaseName = name.toLowerCase(); + + if ( !isXML ) { + + // Avoid an infinite loop by temporarily removing this function from the getter + handle = attrHandle[ lowercaseName ]; + attrHandle[ lowercaseName ] = ret; + ret = getter( elem, name, isXML ) != null ? + lowercaseName : + null; + attrHandle[ lowercaseName ] = handle; + } + return ret; + }; +} ); + + + + +var rfocusable = /^(?:input|select|textarea|button)$/i, + rclickable = /^(?:a|area)$/i; + +jQuery.fn.extend( { + prop: function( name, value ) { + return access( this, jQuery.prop, name, value, arguments.length > 1 ); + }, + + removeProp: function( name ) { + return this.each( function() { + delete this[ jQuery.propFix[ name ] || name ]; + } ); + } +} ); + +jQuery.extend( { + prop: function( elem, name, value ) { + var ret, hooks, + nType = elem.nodeType; + + // Don't get/set properties on text, comment and attribute nodes + if ( nType === 3 || nType === 8 || nType === 2 ) { + return; + } + + if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { + + // Fix name and attach hooks + name = jQuery.propFix[ name ] || name; + hooks = jQuery.propHooks[ name ]; + } + + if ( value !== undefined ) { + if ( hooks && "set" in hooks && + ( ret = hooks.set( elem, value, name ) ) !== undefined ) { + return ret; + } + + return ( elem[ name ] = value ); + } + + if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) { + return ret; + } + + return elem[ name ]; + }, + + propHooks: { + tabIndex: { + get: function( elem ) { + + // Support: IE <=9 - 11 only + // elem.tabIndex doesn't always return the + // correct value when it hasn't been explicitly set + // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ + // Use proper attribute retrieval(#12072) + var tabindex = jQuery.find.attr( elem, "tabindex" ); + + if ( tabindex ) { + return parseInt( tabindex, 10 ); + } + + if ( + rfocusable.test( elem.nodeName ) || + rclickable.test( elem.nodeName ) && + elem.href + ) { + return 0; + } + + return -1; + } + } + }, + + propFix: { + "for": "htmlFor", + "class": "className" + } +} ); + +// Support: IE <=11 only +// Accessing the selectedIndex property +// forces the browser to respect setting selected +// on the option +// The getter ensures a default option is selected +// when in an optgroup +// eslint rule "no-unused-expressions" is disabled for this code +// since it considers such accessions noop +if ( !support.optSelected ) { + jQuery.propHooks.selected = { + get: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent && parent.parentNode ) { + parent.parentNode.selectedIndex; + } + return null; + }, + set: function( elem ) { + + /* eslint no-unused-expressions: "off" */ + + var parent = elem.parentNode; + if ( parent ) { + parent.selectedIndex; + + if ( parent.parentNode ) { + parent.parentNode.selectedIndex; + } + } + } + }; +} + +jQuery.each( [ + "tabIndex", + "readOnly", + "maxLength", + "cellSpacing", + "cellPadding", + "rowSpan", + "colSpan", + "useMap", + "frameBorder", + "contentEditable" +], function() { + jQuery.propFix[ this.toLowerCase() ] = this; +} ); + + + + + // Strip and collapse whitespace according to HTML spec + // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace + function stripAndCollapse( value ) { + var tokens = value.match( rnothtmlwhite ) || []; + return tokens.join( " " ); + } + + +function getClass( elem ) { + return elem.getAttribute && elem.getAttribute( "class" ) || ""; +} + +function classesToArray( value ) { + if ( Array.isArray( value ) ) { + return value; + } + if ( typeof value === "string" ) { + return value.match( rnothtmlwhite ) || []; + } + return []; +} + +jQuery.fn.extend( { + addClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).addClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + if ( cur.indexOf( " " + clazz + " " ) < 0 ) { + cur += clazz + " "; + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + removeClass: function( value ) { + var classes, elem, cur, curValue, clazz, j, finalValue, + i = 0; + + if ( isFunction( value ) ) { + return this.each( function( j ) { + jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) ); + } ); + } + + if ( !arguments.length ) { + return this.attr( "class", "" ); + } + + classes = classesToArray( value ); + + if ( classes.length ) { + while ( ( elem = this[ i++ ] ) ) { + curValue = getClass( elem ); + + // This expression is here for better compressibility (see addClass) + cur = elem.nodeType === 1 && ( " " + stripAndCollapse( curValue ) + " " ); + + if ( cur ) { + j = 0; + while ( ( clazz = classes[ j++ ] ) ) { + + // Remove *all* instances + while ( cur.indexOf( " " + clazz + " " ) > -1 ) { + cur = cur.replace( " " + clazz + " ", " " ); + } + } + + // Only assign if different to avoid unneeded rendering. + finalValue = stripAndCollapse( cur ); + if ( curValue !== finalValue ) { + elem.setAttribute( "class", finalValue ); + } + } + } + } + + return this; + }, + + toggleClass: function( value, stateVal ) { + var type = typeof value, + isValidValue = type === "string" || Array.isArray( value ); + + if ( typeof stateVal === "boolean" && isValidValue ) { + return stateVal ? this.addClass( value ) : this.removeClass( value ); + } + + if ( isFunction( value ) ) { + return this.each( function( i ) { + jQuery( this ).toggleClass( + value.call( this, i, getClass( this ), stateVal ), + stateVal + ); + } ); + } + + return this.each( function() { + var className, i, self, classNames; + + if ( isValidValue ) { + + // Toggle individual class names + i = 0; + self = jQuery( this ); + classNames = classesToArray( value ); + + while ( ( className = classNames[ i++ ] ) ) { + + // Check each className given, space separated list + if ( self.hasClass( className ) ) { + self.removeClass( className ); + } else { + self.addClass( className ); + } + } + + // Toggle whole class name + } else if ( value === undefined || type === "boolean" ) { + className = getClass( this ); + if ( className ) { + + // Store className if set + dataPriv.set( this, "__className__", className ); + } + + // If the element has a class name or if we're passed `false`, + // then remove the whole classname (if there was one, the above saved it). + // Otherwise bring back whatever was previously saved (if anything), + // falling back to the empty string if nothing was stored. + if ( this.setAttribute ) { + this.setAttribute( "class", + className || value === false ? + "" : + dataPriv.get( this, "__className__" ) || "" + ); + } + } + } ); + }, + + hasClass: function( selector ) { + var className, elem, + i = 0; + + className = " " + selector + " "; + while ( ( elem = this[ i++ ] ) ) { + if ( elem.nodeType === 1 && + ( " " + stripAndCollapse( getClass( elem ) ) + " " ).indexOf( className ) > -1 ) { + return true; + } + } + + return false; + } +} ); + + + + +var rreturn = /\r/g; + +jQuery.fn.extend( { + val: function( value ) { + var hooks, ret, valueIsFunction, + elem = this[ 0 ]; + + if ( !arguments.length ) { + if ( elem ) { + hooks = jQuery.valHooks[ elem.type ] || + jQuery.valHooks[ elem.nodeName.toLowerCase() ]; + + if ( hooks && + "get" in hooks && + ( ret = hooks.get( elem, "value" ) ) !== undefined + ) { + return ret; + } + + ret = elem.value; + + // Handle most common string cases + if ( typeof ret === "string" ) { + return ret.replace( rreturn, "" ); + } + + // Handle cases where value is null/undef or number + return ret == null ? "" : ret; + } + + return; + } + + valueIsFunction = isFunction( value ); + + return this.each( function( i ) { + var val; + + if ( this.nodeType !== 1 ) { + return; + } + + if ( valueIsFunction ) { + val = value.call( this, i, jQuery( this ).val() ); + } else { + val = value; + } + + // Treat null/undefined as ""; convert numbers to string + if ( val == null ) { + val = ""; + + } else if ( typeof val === "number" ) { + val += ""; + + } else if ( Array.isArray( val ) ) { + val = jQuery.map( val, function( value ) { + return value == null ? "" : value + ""; + } ); + } + + hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; + + // If set returns undefined, fall back to normal setting + if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) { + this.value = val; + } + } ); + } +} ); + +jQuery.extend( { + valHooks: { + option: { + get: function( elem ) { + + var val = jQuery.find.attr( elem, "value" ); + return val != null ? + val : + + // Support: IE <=10 - 11 only + // option.text throws exceptions (#14686, #14858) + // Strip and collapse whitespace + // https://html.spec.whatwg.org/#strip-and-collapse-whitespace + stripAndCollapse( jQuery.text( elem ) ); + } + }, + select: { + get: function( elem ) { + var value, option, i, + options = elem.options, + index = elem.selectedIndex, + one = elem.type === "select-one", + values = one ? null : [], + max = one ? index + 1 : options.length; + + if ( index < 0 ) { + i = max; + + } else { + i = one ? index : 0; + } + + // Loop through all the selected options + for ( ; i < max; i++ ) { + option = options[ i ]; + + // Support: IE <=9 only + // IE8-9 doesn't update selected after form reset (#2551) + if ( ( option.selected || i === index ) && + + // Don't return options that are disabled or in a disabled optgroup + !option.disabled && + ( !option.parentNode.disabled || + !nodeName( option.parentNode, "optgroup" ) ) ) { + + // Get the specific value for the option + value = jQuery( option ).val(); + + // We don't need an array for one selects + if ( one ) { + return value; + } + + // Multi-Selects return an array + values.push( value ); + } + } + + return values; + }, + + set: function( elem, value ) { + var optionSet, option, + options = elem.options, + values = jQuery.makeArray( value ), + i = options.length; + + while ( i-- ) { + option = options[ i ]; + + /* eslint-disable no-cond-assign */ + + if ( option.selected = + jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 + ) { + optionSet = true; + } + + /* eslint-enable no-cond-assign */ + } + + // Force browsers to behave consistently when non-matching value is set + if ( !optionSet ) { + elem.selectedIndex = -1; + } + return values; + } + } + } +} ); + +// Radios and checkboxes getter/setter +jQuery.each( [ "radio", "checkbox" ], function() { + jQuery.valHooks[ this ] = { + set: function( elem, value ) { + if ( Array.isArray( value ) ) { + return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 ); + } + } + }; + if ( !support.checkOn ) { + jQuery.valHooks[ this ].get = function( elem ) { + return elem.getAttribute( "value" ) === null ? "on" : elem.value; + }; + } +} ); + + + + +// Return jQuery for attributes-only inclusion + + +support.focusin = "onfocusin" in window; + + +var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, + stopPropagationCallback = function( e ) { + e.stopPropagation(); + }; + +jQuery.extend( jQuery.event, { + + trigger: function( event, data, elem, onlyHandlers ) { + + var i, cur, tmp, bubbleType, ontype, handle, special, lastElement, + eventPath = [ elem || document ], + type = hasOwn.call( event, "type" ) ? event.type : event, + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; + + cur = lastElement = tmp = elem = elem || document; + + // Don't do events on text and comment nodes + if ( elem.nodeType === 3 || elem.nodeType === 8 ) { + return; + } + + // focus/blur morphs to focusin/out; ensure we're not firing them right now + if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { + return; + } + + if ( type.indexOf( "." ) > -1 ) { + + // Namespaced trigger; create a regexp to match event type in handle() + namespaces = type.split( "." ); + type = namespaces.shift(); + namespaces.sort(); + } + ontype = type.indexOf( ":" ) < 0 && "on" + type; + + // Caller can pass in a jQuery.Event object, Object, or just an event type string + event = event[ jQuery.expando ] ? + event : + new jQuery.Event( type, typeof event === "object" && event ); + + // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) + event.isTrigger = onlyHandlers ? 2 : 3; + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : + null; + + // Clean up the event in case it is being reused + event.result = undefined; + if ( !event.target ) { + event.target = elem; + } + + // Clone any incoming data and prepend the event, creating the handler arg list + data = data == null ? + [ event ] : + jQuery.makeArray( data, [ event ] ); + + // Allow special events to draw outside the lines + special = jQuery.event.special[ type ] || {}; + if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { + return; + } + + // Determine event propagation path in advance, per W3C events spec (#9951) + // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) + if ( !onlyHandlers && !special.noBubble && !isWindow( elem ) ) { + + bubbleType = special.delegateType || type; + if ( !rfocusMorph.test( bubbleType + type ) ) { + cur = cur.parentNode; + } + for ( ; cur; cur = cur.parentNode ) { + eventPath.push( cur ); + tmp = cur; + } + + // Only add window if we got to document (e.g., not plain obj or detached DOM) + if ( tmp === ( elem.ownerDocument || document ) ) { + eventPath.push( tmp.defaultView || tmp.parentWindow || window ); + } + } + + // Fire handlers on the event path + i = 0; + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { + lastElement = cur; + event.type = i > 1 ? + bubbleType : + special.bindType || type; + + // jQuery handler + handle = ( dataPriv.get( cur, "events" ) || Object.create( null ) )[ event.type ] && + dataPriv.get( cur, "handle" ); + if ( handle ) { + handle.apply( cur, data ); + } + + // Native handler + handle = ontype && cur[ ontype ]; + if ( handle && handle.apply && acceptData( cur ) ) { + event.result = handle.apply( cur, data ); + if ( event.result === false ) { + event.preventDefault(); + } + } + } + event.type = type; + + // If nobody prevented the default action, do it now + if ( !onlyHandlers && !event.isDefaultPrevented() ) { + + if ( ( !special._default || + special._default.apply( eventPath.pop(), data ) === false ) && + acceptData( elem ) ) { + + // Call a native DOM method on the target with the same name as the event. + // Don't do default actions on window, that's where global variables be (#6170) + if ( ontype && isFunction( elem[ type ] ) && !isWindow( elem ) ) { + + // Don't re-trigger an onFOO event when we call its FOO() method + tmp = elem[ ontype ]; + + if ( tmp ) { + elem[ ontype ] = null; + } + + // Prevent re-triggering of the same event, since we already bubbled it above + jQuery.event.triggered = type; + + if ( event.isPropagationStopped() ) { + lastElement.addEventListener( type, stopPropagationCallback ); + } + + elem[ type ](); + + if ( event.isPropagationStopped() ) { + lastElement.removeEventListener( type, stopPropagationCallback ); + } + + jQuery.event.triggered = undefined; + + if ( tmp ) { + elem[ ontype ] = tmp; + } + } + } + } + + return event.result; + }, + + // Piggyback on a donor event to simulate a different one + // Used only for `focus(in | out)` events + simulate: function( type, elem, event ) { + var e = jQuery.extend( + new jQuery.Event(), + event, + { + type: type, + isSimulated: true + } + ); + + jQuery.event.trigger( e, null, elem ); + } + +} ); + +jQuery.fn.extend( { + + trigger: function( type, data ) { + return this.each( function() { + jQuery.event.trigger( type, data, this ); + } ); + }, + triggerHandler: function( type, data ) { + var elem = this[ 0 ]; + if ( elem ) { + return jQuery.event.trigger( type, data, elem, true ); + } + } +} ); + + +// Support: Firefox <=44 +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1 +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { + + // Attach a single capturing handler on the document while someone wants focusin/focusout + var handler = function( event ) { + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; + + jQuery.event.special[ fix ] = { + setup: function() { + + // Handle: regular nodes (via `this.ownerDocument`), window + // (via `this.document`) & document (via `this`). + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ); + + if ( !attaches ) { + doc.addEventListener( orig, handler, true ); + } + dataPriv.access( doc, fix, ( attaches || 0 ) + 1 ); + }, + teardown: function() { + var doc = this.ownerDocument || this.document || this, + attaches = dataPriv.access( doc, fix ) - 1; + + if ( !attaches ) { + doc.removeEventListener( orig, handler, true ); + dataPriv.remove( doc, fix ); + + } else { + dataPriv.access( doc, fix, attaches ); + } + } + }; + } ); +} +var location = window.location; + +var nonce = { guid: Date.now() }; + +var rquery = ( /\?/ ); + + + +// Cross-browser xml parsing +jQuery.parseXML = function( data ) { + var xml, parserErrorElem; + if ( !data || typeof data !== "string" ) { + return null; + } + + // Support: IE 9 - 11 only + // IE throws on parseFromString with invalid input. + try { + xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" ); + } catch ( e ) {} + + parserErrorElem = xml && xml.getElementsByTagName( "parsererror" )[ 0 ]; + if ( !xml || parserErrorElem ) { + jQuery.error( "Invalid XML: " + ( + parserErrorElem ? + jQuery.map( parserErrorElem.childNodes, function( el ) { + return el.textContent; + } ).join( "\n" ) : + data + ) ); + } + return xml; +}; + + +var + rbracket = /\[\]$/, + rCRLF = /\r?\n/g, + rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, + rsubmittable = /^(?:input|select|textarea|keygen)/i; + +function buildParams( prefix, obj, traditional, add ) { + var name; + + if ( Array.isArray( obj ) ) { + + // Serialize array item. + jQuery.each( obj, function( i, v ) { + if ( traditional || rbracket.test( prefix ) ) { + + // Treat each array item as a scalar. + add( prefix, v ); + + } else { + + // Item is non-scalar (array or object), encode its numeric index. + buildParams( + prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]", + v, + traditional, + add + ); + } + } ); + + } else if ( !traditional && toType( obj ) === "object" ) { + + // Serialize object item. + for ( name in obj ) { + buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); + } + + } else { + + // Serialize scalar item. + add( prefix, obj ); + } +} + +// Serialize an array of form elements or a set of +// key/values into a query string +jQuery.param = function( a, traditional ) { + var prefix, + s = [], + add = function( key, valueOrFunction ) { + + // If value is a function, invoke it and use its return value + var value = isFunction( valueOrFunction ) ? + valueOrFunction() : + valueOrFunction; + + s[ s.length ] = encodeURIComponent( key ) + "=" + + encodeURIComponent( value == null ? "" : value ); + }; + + if ( a == null ) { + return ""; + } + + // If an array was passed in, assume that it is an array of form elements. + if ( Array.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { + + // Serialize the form elements + jQuery.each( a, function() { + add( this.name, this.value ); + } ); + + } else { + + // If traditional, encode the "old" way (the way 1.3.2 or older + // did it), otherwise encode params recursively. + for ( prefix in a ) { + buildParams( prefix, a[ prefix ], traditional, add ); + } + } + + // Return the resulting serialization + return s.join( "&" ); +}; + +jQuery.fn.extend( { + serialize: function() { + return jQuery.param( this.serializeArray() ); + }, + serializeArray: function() { + return this.map( function() { + + // Can add propHook for "elements" to filter or add form elements + var elements = jQuery.prop( this, "elements" ); + return elements ? jQuery.makeArray( elements ) : this; + } ).filter( function() { + var type = this.type; + + // Use .is( ":disabled" ) so that fieldset[disabled] works + return this.name && !jQuery( this ).is( ":disabled" ) && + rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && + ( this.checked || !rcheckableType.test( type ) ); + } ).map( function( _i, elem ) { + var val = jQuery( this ).val(); + + if ( val == null ) { + return null; + } + + if ( Array.isArray( val ) ) { + return jQuery.map( val, function( val ) { + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ); + } + + return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; + } ).get(); + } +} ); + + +var + r20 = /%20/g, + rhash = /#.*$/, + rantiCache = /([?&])_=[^&]*/, + rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, + + // #7653, #8125, #8152: local protocol detection + rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, + rnoContent = /^(?:GET|HEAD)$/, + rprotocol = /^\/\//, + + /* Prefilters + * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) + * 2) These are called: + * - BEFORE asking for a transport + * - AFTER param serialization (s.data is a string if s.processData is true) + * 3) key is the dataType + * 4) the catchall symbol "*" can be used + * 5) execution will start with transport dataType and THEN continue down to "*" if needed + */ + prefilters = {}, + + /* Transports bindings + * 1) key is the dataType + * 2) the catchall symbol "*" can be used + * 3) selection will start with transport dataType and THEN go to "*" if needed + */ + transports = {}, + + // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression + allTypes = "*/".concat( "*" ), + + // Anchor tag for parsing the document origin + originAnchor = document.createElement( "a" ); + +originAnchor.href = location.href; + +// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport +function addToPrefiltersOrTransports( structure ) { + + // dataTypeExpression is optional and defaults to "*" + return function( dataTypeExpression, func ) { + + if ( typeof dataTypeExpression !== "string" ) { + func = dataTypeExpression; + dataTypeExpression = "*"; + } + + var dataType, + i = 0, + dataTypes = dataTypeExpression.toLowerCase().match( rnothtmlwhite ) || []; + + if ( isFunction( func ) ) { + + // For each dataType in the dataTypeExpression + while ( ( dataType = dataTypes[ i++ ] ) ) { + + // Prepend if requested + if ( dataType[ 0 ] === "+" ) { + dataType = dataType.slice( 1 ) || "*"; + ( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func ); + + // Otherwise append + } else { + ( structure[ dataType ] = structure[ dataType ] || [] ).push( func ); + } + } + } + }; +} + +// Base inspection function for prefilters and transports +function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { + + var inspected = {}, + seekingTransport = ( structure === transports ); + + function inspect( dataType ) { + var selected; + inspected[ dataType ] = true; + jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { + var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); + if ( typeof dataTypeOrTransport === "string" && + !seekingTransport && !inspected[ dataTypeOrTransport ] ) { + + options.dataTypes.unshift( dataTypeOrTransport ); + inspect( dataTypeOrTransport ); + return false; + } else if ( seekingTransport ) { + return !( selected = dataTypeOrTransport ); + } + } ); + return selected; + } + + return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); +} + +// A special extend for ajax options +// that takes "flat" options (not to be deep extended) +// Fixes #9887 +function ajaxExtend( target, src ) { + var key, deep, + flatOptions = jQuery.ajaxSettings.flatOptions || {}; + + for ( key in src ) { + if ( src[ key ] !== undefined ) { + ( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ]; + } + } + if ( deep ) { + jQuery.extend( true, target, deep ); + } + + return target; +} + +/* Handles responses to an ajax request: + * - finds the right dataType (mediates between content-type and expected dataType) + * - returns the corresponding response + */ +function ajaxHandleResponses( s, jqXHR, responses ) { + + var ct, type, finalDataType, firstDataType, + contents = s.contents, + dataTypes = s.dataTypes; + + // Remove auto dataType and get content-type in the process + while ( dataTypes[ 0 ] === "*" ) { + dataTypes.shift(); + if ( ct === undefined ) { + ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" ); + } + } + + // Check if we're dealing with a known content-type + if ( ct ) { + for ( type in contents ) { + if ( contents[ type ] && contents[ type ].test( ct ) ) { + dataTypes.unshift( type ); + break; + } + } + } + + // Check to see if we have a response for the expected dataType + if ( dataTypes[ 0 ] in responses ) { + finalDataType = dataTypes[ 0 ]; + } else { + + // Try convertible dataTypes + for ( type in responses ) { + if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) { + finalDataType = type; + break; + } + if ( !firstDataType ) { + firstDataType = type; + } + } + + // Or just use first one + finalDataType = finalDataType || firstDataType; + } + + // If we found a dataType + // We add the dataType to the list if needed + // and return the corresponding response + if ( finalDataType ) { + if ( finalDataType !== dataTypes[ 0 ] ) { + dataTypes.unshift( finalDataType ); + } + return responses[ finalDataType ]; + } +} + +/* Chain conversions given the request and the original response + * Also sets the responseXXX fields on the jqXHR instance + */ +function ajaxConvert( s, response, jqXHR, isSuccess ) { + var conv2, current, conv, tmp, prev, + converters = {}, + + // Work with a copy of dataTypes in case we need to modify it for conversion + dataTypes = s.dataTypes.slice(); + + // Create converters map with lowercased keys + if ( dataTypes[ 1 ] ) { + for ( conv in s.converters ) { + converters[ conv.toLowerCase() ] = s.converters[ conv ]; + } + } + + current = dataTypes.shift(); + + // Convert to each sequential dataType + while ( current ) { + + if ( s.responseFields[ current ] ) { + jqXHR[ s.responseFields[ current ] ] = response; + } + + // Apply the dataFilter if provided + if ( !prev && isSuccess && s.dataFilter ) { + response = s.dataFilter( response, s.dataType ); + } + + prev = current; + current = dataTypes.shift(); + + if ( current ) { + + // There's only work to do if current dataType is non-auto + if ( current === "*" ) { + + current = prev; + + // Convert response if prev dataType is non-auto and differs from current + } else if ( prev !== "*" && prev !== current ) { + + // Seek a direct converter + conv = converters[ prev + " " + current ] || converters[ "* " + current ]; + + // If none found, seek a pair + if ( !conv ) { + for ( conv2 in converters ) { + + // If conv2 outputs current + tmp = conv2.split( " " ); + if ( tmp[ 1 ] === current ) { + + // If prev can be converted to accepted input + conv = converters[ prev + " " + tmp[ 0 ] ] || + converters[ "* " + tmp[ 0 ] ]; + if ( conv ) { + + // Condense equivalence converters + if ( conv === true ) { + conv = converters[ conv2 ]; + + // Otherwise, insert the intermediate dataType + } else if ( converters[ conv2 ] !== true ) { + current = tmp[ 0 ]; + dataTypes.unshift( tmp[ 1 ] ); + } + break; + } + } + } + } + + // Apply converter (if not an equivalence) + if ( conv !== true ) { + + // Unless errors are allowed to bubble, catch and return them + if ( conv && s.throws ) { + response = conv( response ); + } else { + try { + response = conv( response ); + } catch ( e ) { + return { + state: "parsererror", + error: conv ? e : "No conversion from " + prev + " to " + current + }; + } + } + } + } + } + } + + return { state: "success", data: response }; +} + +jQuery.extend( { + + // Counter for holding the number of active queries + active: 0, + + // Last-Modified header cache for next request + lastModified: {}, + etag: {}, + + ajaxSettings: { + url: location.href, + type: "GET", + isLocal: rlocalProtocol.test( location.protocol ), + global: true, + processData: true, + async: true, + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + + /* + timeout: 0, + data: null, + dataType: null, + username: null, + password: null, + cache: null, + throws: false, + traditional: false, + headers: {}, + */ + + accepts: { + "*": allTypes, + text: "text/plain", + html: "text/html", + xml: "application/xml, text/xml", + json: "application/json, text/javascript" + }, + + contents: { + xml: /\bxml\b/, + html: /\bhtml/, + json: /\bjson\b/ + }, + + responseFields: { + xml: "responseXML", + text: "responseText", + json: "responseJSON" + }, + + // Data converters + // Keys separate source (or catchall "*") and destination types with a single space + converters: { + + // Convert anything to text + "* text": String, + + // Text to html (true = no transformation) + "text html": true, + + // Evaluate text as a json expression + "text json": JSON.parse, + + // Parse text as xml + "text xml": jQuery.parseXML + }, + + // For options that shouldn't be deep extended: + // you can add your own custom options here if + // and when you create one that shouldn't be + // deep extended (see ajaxExtend) + flatOptions: { + url: true, + context: true + } + }, + + // Creates a full fledged settings object into target + // with both ajaxSettings and settings fields. + // If target is omitted, writes into ajaxSettings. + ajaxSetup: function( target, settings ) { + return settings ? + + // Building a settings object + ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : + + // Extending ajaxSettings + ajaxExtend( jQuery.ajaxSettings, target ); + }, + + ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), + ajaxTransport: addToPrefiltersOrTransports( transports ), + + // Main method + ajax: function( url, options ) { + + // If url is an object, simulate pre-1.5 signature + if ( typeof url === "object" ) { + options = url; + url = undefined; + } + + // Force options to be an object + options = options || {}; + + var transport, + + // URL without anti-cache param + cacheURL, + + // Response headers + responseHeadersString, + responseHeaders, + + // timeout handle + timeoutTimer, + + // Url cleanup var + urlAnchor, + + // Request state (becomes false upon send and true upon completion) + completed, + + // To know if global events are to be dispatched + fireGlobals, + + // Loop variable + i, + + // uncached part of the url + uncached, + + // Create the final options object + s = jQuery.ajaxSetup( {}, options ), + + // Callbacks context + callbackContext = s.context || s, + + // Context for global events is callbackContext if it is a DOM node or jQuery collection + globalEventContext = s.context && + ( callbackContext.nodeType || callbackContext.jquery ) ? + jQuery( callbackContext ) : + jQuery.event, + + // Deferreds + deferred = jQuery.Deferred(), + completeDeferred = jQuery.Callbacks( "once memory" ), + + // Status-dependent callbacks + statusCode = s.statusCode || {}, + + // Headers (they are sent all at once) + requestHeaders = {}, + requestHeadersNames = {}, + + // Default abort message + strAbort = "canceled", + + // Fake xhr + jqXHR = { + readyState: 0, + + // Builds headers hashtable if needed + getResponseHeader: function( key ) { + var match; + if ( completed ) { + if ( !responseHeaders ) { + responseHeaders = {}; + while ( ( match = rheaders.exec( responseHeadersString ) ) ) { + responseHeaders[ match[ 1 ].toLowerCase() + " " ] = + ( responseHeaders[ match[ 1 ].toLowerCase() + " " ] || [] ) + .concat( match[ 2 ] ); + } + } + match = responseHeaders[ key.toLowerCase() + " " ]; + } + return match == null ? null : match.join( ", " ); + }, + + // Raw string + getAllResponseHeaders: function() { + return completed ? responseHeadersString : null; + }, + + // Caches the header + setRequestHeader: function( name, value ) { + if ( completed == null ) { + name = requestHeadersNames[ name.toLowerCase() ] = + requestHeadersNames[ name.toLowerCase() ] || name; + requestHeaders[ name ] = value; + } + return this; + }, + + // Overrides response content-type header + overrideMimeType: function( type ) { + if ( completed == null ) { + s.mimeType = type; + } + return this; + }, + + // Status-dependent callbacks + statusCode: function( map ) { + var code; + if ( map ) { + if ( completed ) { + + // Execute the appropriate callbacks + jqXHR.always( map[ jqXHR.status ] ); + } else { + + // Lazy-add the new callbacks in a way that preserves old ones + for ( code in map ) { + statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; + } + } + } + return this; + }, + + // Cancel the request + abort: function( statusText ) { + var finalText = statusText || strAbort; + if ( transport ) { + transport.abort( finalText ); + } + done( 0, finalText ); + return this; + } + }; + + // Attach deferreds + deferred.promise( jqXHR ); + + // Add protocol if not provided (prefilters might expect it) + // Handle falsy url in the settings object (#10093: consistency with old signature) + // We also use the url parameter if available + s.url = ( ( url || s.url || location.href ) + "" ) + .replace( rprotocol, location.protocol + "//" ); + + // Alias method option to type as per ticket #12004 + s.type = options.method || options.type || s.method || s.type; + + // Extract dataTypes list + s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnothtmlwhite ) || [ "" ]; + + // A cross-domain request is in order when the origin doesn't match the current origin. + if ( s.crossDomain == null ) { + urlAnchor = document.createElement( "a" ); + + // Support: IE <=8 - 11, Edge 12 - 15 + // IE throws exception on accessing the href property if url is malformed, + // e.g. http://example.com:80x/ + try { + urlAnchor.href = s.url; + + // Support: IE <=8 - 11 only + // Anchor's host property isn't correctly set when s.url is relative + urlAnchor.href = urlAnchor.href; + s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !== + urlAnchor.protocol + "//" + urlAnchor.host; + } catch ( e ) { + + // If there is an error parsing the URL, assume it is crossDomain, + // it can be rejected by the transport if it is invalid + s.crossDomain = true; + } + } + + // Convert data if not already a string + if ( s.data && s.processData && typeof s.data !== "string" ) { + s.data = jQuery.param( s.data, s.traditional ); + } + + // Apply prefilters + inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); + + // If request was aborted inside a prefilter, stop there + if ( completed ) { + return jqXHR; + } + + // We can fire global events as of now if asked to + // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) + fireGlobals = jQuery.event && s.global; + + // Watch for a new set of requests + if ( fireGlobals && jQuery.active++ === 0 ) { + jQuery.event.trigger( "ajaxStart" ); + } + + // Uppercase the type + s.type = s.type.toUpperCase(); + + // Determine if request has content + s.hasContent = !rnoContent.test( s.type ); + + // Save the URL in case we're toying with the If-Modified-Since + // and/or If-None-Match header later on + // Remove hash to simplify url manipulation + cacheURL = s.url.replace( rhash, "" ); + + // More options handling for requests with no content + if ( !s.hasContent ) { + + // Remember the hash so we can put it back + uncached = s.url.slice( cacheURL.length ); + + // If data is available and should be processed, append data to url + if ( s.data && ( s.processData || typeof s.data === "string" ) ) { + cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data; + + // #9682: remove data so that it's not used in an eventual retry + delete s.data; + } + + // Add or update anti-cache param if needed + if ( s.cache === false ) { + cacheURL = cacheURL.replace( rantiCache, "$1" ); + uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce.guid++ ) + + uncached; + } + + // Put hash and anti-cache on the URL that will be requested (gh-1732) + s.url = cacheURL + uncached; + + // Change '%20' to '+' if this is encoded form body content (gh-2658) + } else if ( s.data && s.processData && + ( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) { + s.data = s.data.replace( r20, "+" ); + } + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + if ( jQuery.lastModified[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); + } + if ( jQuery.etag[ cacheURL ] ) { + jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); + } + } + + // Set the correct header, if data is being sent + if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { + jqXHR.setRequestHeader( "Content-Type", s.contentType ); + } + + // Set the Accepts header for the server, depending on the dataType + jqXHR.setRequestHeader( + "Accept", + s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ? + s.accepts[ s.dataTypes[ 0 ] ] + + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : + s.accepts[ "*" ] + ); + + // Check for headers option + for ( i in s.headers ) { + jqXHR.setRequestHeader( i, s.headers[ i ] ); + } + + // Allow custom headers/mimetypes and early abort + if ( s.beforeSend && + ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) { + + // Abort if not done already and return + return jqXHR.abort(); + } + + // Aborting is no longer a cancellation + strAbort = "abort"; + + // Install callbacks on deferreds + completeDeferred.add( s.complete ); + jqXHR.done( s.success ); + jqXHR.fail( s.error ); + + // Get transport + transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); + + // If no transport, we auto-abort + if ( !transport ) { + done( -1, "No Transport" ); + } else { + jqXHR.readyState = 1; + + // Send global event + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); + } + + // If request was aborted inside ajaxSend, stop there + if ( completed ) { + return jqXHR; + } + + // Timeout + if ( s.async && s.timeout > 0 ) { + timeoutTimer = window.setTimeout( function() { + jqXHR.abort( "timeout" ); + }, s.timeout ); + } + + try { + completed = false; + transport.send( requestHeaders, done ); + } catch ( e ) { + + // Rethrow post-completion exceptions + if ( completed ) { + throw e; + } + + // Propagate others as results + done( -1, e ); + } + } + + // Callback for when everything is done + function done( status, nativeStatusText, responses, headers ) { + var isSuccess, success, error, response, modified, + statusText = nativeStatusText; + + // Ignore repeat invocations + if ( completed ) { + return; + } + + completed = true; + + // Clear timeout if it exists + if ( timeoutTimer ) { + window.clearTimeout( timeoutTimer ); + } + + // Dereference transport for early garbage collection + // (no matter how long the jqXHR object will be used) + transport = undefined; + + // Cache response headers + responseHeadersString = headers || ""; + + // Set readyState + jqXHR.readyState = status > 0 ? 4 : 0; + + // Determine if successful + isSuccess = status >= 200 && status < 300 || status === 304; + + // Get response data + if ( responses ) { + response = ajaxHandleResponses( s, jqXHR, responses ); + } + + // Use a noop converter for missing script but not if jsonp + if ( !isSuccess && + jQuery.inArray( "script", s.dataTypes ) > -1 && + jQuery.inArray( "json", s.dataTypes ) < 0 ) { + s.converters[ "text script" ] = function() {}; + } + + // Convert no matter what (that way responseXXX fields are always set) + response = ajaxConvert( s, response, jqXHR, isSuccess ); + + // If successful, handle type chaining + if ( isSuccess ) { + + // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. + if ( s.ifModified ) { + modified = jqXHR.getResponseHeader( "Last-Modified" ); + if ( modified ) { + jQuery.lastModified[ cacheURL ] = modified; + } + modified = jqXHR.getResponseHeader( "etag" ); + if ( modified ) { + jQuery.etag[ cacheURL ] = modified; + } + } + + // if no content + if ( status === 204 || s.type === "HEAD" ) { + statusText = "nocontent"; + + // if not modified + } else if ( status === 304 ) { + statusText = "notmodified"; + + // If we have data, let's convert it + } else { + statusText = response.state; + success = response.data; + error = response.error; + isSuccess = !error; + } + } else { + + // Extract error from statusText and normalize for non-aborts + error = statusText; + if ( status || !statusText ) { + statusText = "error"; + if ( status < 0 ) { + status = 0; + } + } + } + + // Set data for the fake xhr object + jqXHR.status = status; + jqXHR.statusText = ( nativeStatusText || statusText ) + ""; + + // Success/Error + if ( isSuccess ) { + deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); + } else { + deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); + } + + // Status-dependent callbacks + jqXHR.statusCode( statusCode ); + statusCode = undefined; + + if ( fireGlobals ) { + globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", + [ jqXHR, s, isSuccess ? success : error ] ); + } + + // Complete + completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); + + if ( fireGlobals ) { + globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); + + // Handle the global AJAX counter + if ( !( --jQuery.active ) ) { + jQuery.event.trigger( "ajaxStop" ); + } + } + } + + return jqXHR; + }, + + getJSON: function( url, data, callback ) { + return jQuery.get( url, data, callback, "json" ); + }, + + getScript: function( url, callback ) { + return jQuery.get( url, undefined, callback, "script" ); + } +} ); + +jQuery.each( [ "get", "post" ], function( _i, method ) { + jQuery[ method ] = function( url, data, callback, type ) { + + // Shift arguments if data argument was omitted + if ( isFunction( data ) ) { + type = type || callback; + callback = data; + data = undefined; + } + + // The url can be an options object (which then must have .url) + return jQuery.ajax( jQuery.extend( { + url: url, + type: method, + dataType: type, + data: data, + success: callback + }, jQuery.isPlainObject( url ) && url ) ); + }; +} ); + +jQuery.ajaxPrefilter( function( s ) { + var i; + for ( i in s.headers ) { + if ( i.toLowerCase() === "content-type" ) { + s.contentType = s.headers[ i ] || ""; + } + } +} ); + + +jQuery._evalUrl = function( url, options, doc ) { + return jQuery.ajax( { + url: url, + + // Make this explicit, since user can override this through ajaxSetup (#11264) + type: "GET", + dataType: "script", + cache: true, + async: false, + global: false, + + // Only evaluate the response if it is successful (gh-4126) + // dataFilter is not invoked for failure responses, so using it instead + // of the default converter is kludgy but it works. + converters: { + "text script": function() {} + }, + dataFilter: function( response ) { + jQuery.globalEval( response, options, doc ); + } + } ); +}; + + +jQuery.fn.extend( { + wrapAll: function( html ) { + var wrap; + + if ( this[ 0 ] ) { + if ( isFunction( html ) ) { + html = html.call( this[ 0 ] ); + } + + // The elements to wrap the target around + wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); + + if ( this[ 0 ].parentNode ) { + wrap.insertBefore( this[ 0 ] ); + } + + wrap.map( function() { + var elem = this; + + while ( elem.firstElementChild ) { + elem = elem.firstElementChild; + } + + return elem; + } ).append( this ); + } + + return this; + }, + + wrapInner: function( html ) { + if ( isFunction( html ) ) { + return this.each( function( i ) { + jQuery( this ).wrapInner( html.call( this, i ) ); + } ); + } + + return this.each( function() { + var self = jQuery( this ), + contents = self.contents(); + + if ( contents.length ) { + contents.wrapAll( html ); + + } else { + self.append( html ); + } + } ); + }, + + wrap: function( html ) { + var htmlIsFunction = isFunction( html ); + + return this.each( function( i ) { + jQuery( this ).wrapAll( htmlIsFunction ? html.call( this, i ) : html ); + } ); + }, + + unwrap: function( selector ) { + this.parent( selector ).not( "body" ).each( function() { + jQuery( this ).replaceWith( this.childNodes ); + } ); + return this; + } +} ); + + +jQuery.expr.pseudos.hidden = function( elem ) { + return !jQuery.expr.pseudos.visible( elem ); +}; +jQuery.expr.pseudos.visible = function( elem ) { + return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length ); +}; + + + + +jQuery.ajaxSettings.xhr = function() { + try { + return new window.XMLHttpRequest(); + } catch ( e ) {} +}; + +var xhrSuccessStatus = { + + // File protocol always yields status code 0, assume 200 + 0: 200, + + // Support: IE <=9 only + // #1450: sometimes IE returns 1223 when it should be 204 + 1223: 204 + }, + xhrSupported = jQuery.ajaxSettings.xhr(); + +support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); +support.ajax = xhrSupported = !!xhrSupported; + +jQuery.ajaxTransport( function( options ) { + var callback, errorCallback; + + // Cross domain only allowed if supported through XMLHttpRequest + if ( support.cors || xhrSupported && !options.crossDomain ) { + return { + send: function( headers, complete ) { + var i, + xhr = options.xhr(); + + xhr.open( + options.type, + options.url, + options.async, + options.username, + options.password + ); + + // Apply custom fields if provided + if ( options.xhrFields ) { + for ( i in options.xhrFields ) { + xhr[ i ] = options.xhrFields[ i ]; + } + } + + // Override mime type if needed + if ( options.mimeType && xhr.overrideMimeType ) { + xhr.overrideMimeType( options.mimeType ); + } + + // X-Requested-With header + // For cross-domain requests, seeing as conditions for a preflight are + // akin to a jigsaw puzzle, we simply never set it to be sure. + // (it can always be set on a per-request basis or even using ajaxSetup) + // For same-domain requests, won't change header if already provided. + if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) { + headers[ "X-Requested-With" ] = "XMLHttpRequest"; + } + + // Set headers + for ( i in headers ) { + xhr.setRequestHeader( i, headers[ i ] ); + } + + // Callback + callback = function( type ) { + return function() { + if ( callback ) { + callback = errorCallback = xhr.onload = + xhr.onerror = xhr.onabort = xhr.ontimeout = + xhr.onreadystatechange = null; + + if ( type === "abort" ) { + xhr.abort(); + } else if ( type === "error" ) { + + // Support: IE <=9 only + // On a manual native abort, IE9 throws + // errors on any property access that is not readyState + if ( typeof xhr.status !== "number" ) { + complete( 0, "error" ); + } else { + complete( + + // File: protocol always yields status 0; see #8605, #14207 + xhr.status, + xhr.statusText + ); + } + } else { + complete( + xhrSuccessStatus[ xhr.status ] || xhr.status, + xhr.statusText, + + // Support: IE <=9 only + // IE9 has no XHR2 but throws on binary (trac-11426) + // For XHR2 non-text, let the caller handle it (gh-2498) + ( xhr.responseType || "text" ) !== "text" || + typeof xhr.responseText !== "string" ? + { binary: xhr.response } : + { text: xhr.responseText }, + xhr.getAllResponseHeaders() + ); + } + } + }; + }; + + // Listen to events + xhr.onload = callback(); + errorCallback = xhr.onerror = xhr.ontimeout = callback( "error" ); + + // Support: IE 9 only + // Use onreadystatechange to replace onabort + // to handle uncaught aborts + if ( xhr.onabort !== undefined ) { + xhr.onabort = errorCallback; + } else { + xhr.onreadystatechange = function() { + + // Check readyState before timeout as it changes + if ( xhr.readyState === 4 ) { + + // Allow onerror to be called first, + // but that will not handle a native abort + // Also, save errorCallback to a variable + // as xhr.onerror cannot be accessed + window.setTimeout( function() { + if ( callback ) { + errorCallback(); + } + } ); + } + }; + } + + // Create the abort callback + callback = callback( "abort" ); + + try { + + // Do send the request (this may raise an exception) + xhr.send( options.hasContent && options.data || null ); + } catch ( e ) { + + // #14683: Only rethrow if this hasn't been notified as an error yet + if ( callback ) { + throw e; + } + } + }, + + abort: function() { + if ( callback ) { + callback(); + } + } + }; + } +} ); + + + + +// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432) +jQuery.ajaxPrefilter( function( s ) { + if ( s.crossDomain ) { + s.contents.script = false; + } +} ); + +// Install script dataType +jQuery.ajaxSetup( { + accepts: { + script: "text/javascript, application/javascript, " + + "application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /\b(?:java|ecma)script\b/ + }, + converters: { + "text script": function( text ) { + jQuery.globalEval( text ); + return text; + } + } +} ); + +// Handle cache's special case and crossDomain +jQuery.ajaxPrefilter( "script", function( s ) { + if ( s.cache === undefined ) { + s.cache = false; + } + if ( s.crossDomain ) { + s.type = "GET"; + } +} ); + +// Bind script tag hack transport +jQuery.ajaxTransport( "script", function( s ) { + + // This transport only deals with cross domain or forced-by-attrs requests + if ( s.crossDomain || s.scriptAttrs ) { + var script, callback; + return { + send: function( _, complete ) { + script = jQuery( " +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

backup-restore.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/contribute.html b/rp-vp-kid/it/contribute.html new file mode 100644 index 000000000..3496b8b15 --- /dev/null +++ b/rp-vp-kid/it/contribute.html @@ -0,0 +1,1261 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | contribute.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

contribute.rst

+

Instruction to join in the development here.

+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/defined-terms.html b/rp-vp-kid/it/defined-terms.html new file mode 100644 index 000000000..d4c248749 --- /dev/null +++ b/rp-vp-kid/it/defined-terms.html @@ -0,0 +1,1359 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | defined-terms.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

defined-terms.rst

+

Di seguito le descrizioni di acronimi e definizioni, correlati al presente documento utili ad approfondimenti su tematiche che completano l' it-wallet e i componenti con i quali interagisce.

+
+

Acronimi

+ ++++ + + + + + + + + + + + + + + + + + + + + + + +

Acronimo

Descrizione

OID4VP

OpenID for Verifiable Presentation

PID

Person Identification Data

VC

Verifiable Credential

VP

Verifiable Presentation

API

Application Programming Interface. Insieme componenti previsti per semplificare gli scenari di integrazione di uno specifico Sistema.

+
+
+

Definizioni

+ ++++ + + + + + + + + + + + + + +

Definizione

Descrizione

Wallet Instance

Mobile App che gestisce, memorizza e protegge le Verifiable Credentials di un holder e ne consente la presentazione ad una Relying Party

Relying Party

Entità che riceve da una Wallet Instance una o più VP e processa le stesse

+
+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/genindex.html b/rp-vp-kid/it/genindex.html new file mode 100644 index 000000000..9a2e2af14 --- /dev/null +++ b/rp-vp-kid/it/genindex.html @@ -0,0 +1,1253 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Index + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + +

Index

+ +
+ +
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/index.html b/rp-vp-kid/it/index.html new file mode 100644 index 000000000..78b5183b6 --- /dev/null +++ b/rp-vp-kid/it/index.html @@ -0,0 +1,1397 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | The Italian EUDI Wallet implementation profile + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + +
+

The Italian EUDI Wallet implementation profile

+

[TODO INTRO]

+

Introduzione

+

cos'è eIDAS

+

cos’è IT-Wallet

+

scopo delle regole tecniche

+

In this documentation you can find the technical specification +for implementing the following components:

+
+
    +
  • Entities of the ecosystem according to EIDAS-ARF.

  • +
  • Infrastructure of trust attesting realiability and eligibility of the participants.

  • +
  • PID and EAAs data schemes and attribute sets.

  • +
  • PID/EAA in MDL CBOR format.

  • +
  • PID/EAA in SD-JWT format.

  • +
  • Wallet Solution general architecture.

  • +
  • Wallet Instance Attestation data model in JWS format.

  • +
  • Issuance of PID/EAA according to OpenID4VCI.

  • +
  • Presentation of PID/EAA according to OpenID4VP.

  • +
  • Presentation of pseudonyms according to SIOPv2.

  • +
  • PID/EAA backup and restore mechanisms.

  • +
  • PID/EAA revocation lists.

  • +
+
+
+

Index of content

+
+ +
+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/issuance.html b/rp-vp-kid/it/issuance.html new file mode 100644 index 000000000..dac374446 --- /dev/null +++ b/rp-vp-kid/it/issuance.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | issuance.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

issuance.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/objects.inv b/rp-vp-kid/it/objects.inv new file mode 100644 index 0000000000000000000000000000000000000000..adbbdf73562e9157c4391746ad67d425cda4b5a7 GIT binary patch literal 678 zcmV;X0$KedAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkZXk{Qt zbYX01VQwHrRYXZ3S7B^yWpp5EZE$R5ZDnqBVRUJ4ZXj@SZ)Rz1WeOu8R%LQ?X>V>i zAa-SPb7^mGIv{LebY*jN3L_v?Xk{RBWo=<;Ze(S0Aa78b#rNMXCQiPX<{x4c-n=PL2uk35QXpl6_z+tsn?#H!yYO{YO9>FnPh3P zv0&U}|9y=C!(g&|W4?iT?^)O$#Q1kzxCMvCLhn$1lVW7i5h8S{Dl7kRj3KXTg zl80l2c$YP(Wa|N}B++p~)27PD!Pu6Cqe*>aT$&-Y?TF4}CtP`RlK*+fma)*Gt|BWf zWz_aljA4`|Ck|F=<{N!yGK~&$y{nV5Ql>{)u9ITEGY>A)^9`@tMJIR4!apJ6`F4z=DULq5mx2pmR=fwSBy{RO9|47YXWKIDMi% zK?_y}TEkdPQvwvT6jqW4dcc?>m3enVm7HNmx$EQ!Xjexr{tkjpSo)C1ifZJ&Y+uF< z@B4RhOXo$mFPA{veoCT#$al5{{d*g{s|S7R^^qF8vw`MvMz5b_NiE|4fQ9FhHGPsv Mtb) + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | pid-eaa-data.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

pid-eaa-data.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/pid-eaa-mdoc-cbor.html b/rp-vp-kid/it/pid-eaa-mdoc-cbor.html new file mode 100644 index 000000000..45229946c --- /dev/null +++ b/rp-vp-kid/it/pid-eaa-mdoc-cbor.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | pid-eaa-mdoc-cbor.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

pid-eaa-mdoc-cbor.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/pid-eaa-sd-jwt.html b/rp-vp-kid/it/pid-eaa-sd-jwt.html new file mode 100644 index 000000000..00f6a2381 --- /dev/null +++ b/rp-vp-kid/it/pid-eaa-sd-jwt.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | pid-eaa-sd-jwt.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

pid-eaa-sd-jwt.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/pseudonyms.html b/rp-vp-kid/it/pseudonyms.html new file mode 100644 index 000000000..0d610c1be --- /dev/null +++ b/rp-vp-kid/it/pseudonyms.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | pseudonyms.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

pseudonyms.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/revocation-lists.html b/rp-vp-kid/it/revocation-lists.html new file mode 100644 index 000000000..5cdf58d7c --- /dev/null +++ b/rp-vp-kid/it/revocation-lists.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | revocation-lists.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

revocation-lists.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/search.html b/rp-vp-kid/it/search.html new file mode 100644 index 000000000..054dcf081 --- /dev/null +++ b/rp-vp-kid/it/search.html @@ -0,0 +1,1267 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Search + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + + +
+ +
+ + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/searchindex.js b/rp-vp-kid/it/searchindex.js new file mode 100644 index 000000000..d9eae94c9 --- /dev/null +++ b/rp-vp-kid/it/searchindex.js @@ -0,0 +1 @@ +Search.setIndex({"docnames": ["backup-restore", "contribute", "defined-terms", "index", "issuance", "pid-eaa-data", "pid-eaa-mdoc-cbor", "pid-eaa-sd-jwt", "pseudonyms", "revocation-lists", "ssi-introduction", "standards", "trust", "wallet-instance-attestation", "wallet-solution"], "filenames": ["backup-restore.rst", "contribute.rst", "defined-terms.rst", "index.rst", "issuance.rst", "pid-eaa-data.rst", "pid-eaa-mdoc-cbor.rst", "pid-eaa-sd-jwt.rst", "pseudonyms.rst", "revocation-lists.rst", "ssi-introduction.rst", "standards.rst", "trust.rst", "wallet-instance-attestation.rst", "wallet-solution.rst"], "titles": ["backup-restore.rst", "contribute.rst", "defined-terms.rst", "The Italian EUDI Wallet implementation profile", "issuance.rst", "pid-eaa-data.rst", "pid-eaa-mdoc-cbor.rst", "pid-eaa-sd-jwt.rst", "pseudonyms.rst", "revocation-lists.rst", "ssi-introduction.rst", "Standards", "trust.rst", "wallet-instance-attestation.rst", "wallet-solution.rst"], "terms": {"tutti": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "gli": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "esempi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "contenuti": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "questa": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "documentazion": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "sono": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "da": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "intendersi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "come": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "non": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "normativi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "all": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "exampl": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "contain": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "thi": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "document": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "ar": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "meant": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "norm": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "what": [0, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "useful": [0, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "todo": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14], "req": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "1": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "2": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "tabl": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "paramet": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "claim": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "descript": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "kei": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "valu": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "instruct": 1, "join": 1, "develop": 1, "here": 1, "di": 2, "seguito": 2, "le": 2, "descrizioni": 2, "e": 2, "correlati": 2, "al": 2, "present": [2, 3], "documento": 2, "utili": 2, "ad": 2, "approfondimenti": 2, "su": 2, "tematich": 2, "che": 2, "completano": 2, "l": 2, "wallet": 2, "i": 2, "componenti": 2, "con": 2, "quali": 2, "interagisc": 2, "acronimo": 2, "descrizion": 2, "oid4vp": 2, "openid": 2, "verifi": 2, "pid": [2, 3], "person": 2, "identif": 2, "data": [2, 3], "vc": 2, "credenti": 2, "vp": 2, "api": 2, "applic": 2, "program": 2, "interfac": 2, "insiem": 2, "previsti": 2, "per": 2, "semplificar": 2, "scenari": 2, "integrazion": 2, "uno": 2, "specifico": 2, "sistema": 2, "definizion": 2, "instanc": [2, 3], "mobil": 2, "app": 2, "gestisc": 2, "memorizza": 2, "protegg": 2, "un": 2, "holder": 2, "ne": 2, "consent": 2, "la": 2, "presentazion": 2, "una": 2, "reli": 2, "parti": 2, "entit\u00e0": 2, "ricev": 2, "o": 2, "pi\u00f9": 2, "processa": 2, "stess": 2, "intro": 3, "introduzion": 3, "co": 3, "\u00e8": 3, "eida": 3, "IT": 3, "scopo": 3, "dell": 3, "regol": 3, "tecnich": 3, "In": 3, "you": 3, "can": 3, "find": 3, "technic": 3, "specif": 3, "follow": 3, "compon": 3, "entiti": 3, "ecosystem": 3, "accord": 3, "arf": 3, "infrastructur": 3, "trust": 3, "attest": 3, "realiabl": 3, "elig": 3, "particip": 3, "eaa": 3, "scheme": 3, "attribut": 3, "set": 3, "mdl": 3, "cbor": 3, "format": 3, "sd": 3, "jwt": 3, "solut": 3, "gener": 3, "architectur": 3, "model": 3, "jw": 3, "issuanc": 3, "openid4vci": 3, "openid4vp": 3, "pseudonym": 3, "siopv2": 3, "backup": 3, "restor": 3, "mechan": 3, "revoc": 3, "list": 3, "ssi": 3, "introduct": 3, "rst": 3, "properti": 3, "requir": 3, "consider": 3, "librari": 3, "code": 3, "snippet": 3, "extern": 3, "refer": 3, "defin": 3, "term": 3, "acronimi": 3, "definizioni": 3, "mdoc": 3, "contribut": 3, "standard": 3}, "objects": {}, "objtypes": {}, "objnames": {}, "titleterms": {"backup": 0, "restor": 0, "rst": [0, 1, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "gener": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "properti": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "requir": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "attribut": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "implement": [0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "consider": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "librari": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "code": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "snippet": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "extern": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "refer": [0, 2, 4, 5, 6, 7, 8, 9, 10, 12, 13, 14], "contribut": 1, "defin": 2, "term": 2, "acronimi": 2, "definizioni": 2, "The": 3, "italian": 3, "eudi": 3, "wallet": [3, 13, 14], "profil": 3, "index": 3, "content": 3, "issuanc": 4, "pid": [5, 6, 7], "eaa": [5, 6, 7], "data": 5, "mdoc": 6, "cbor": 6, "sd": 7, "jwt": 7, "pseudonym": 8, "revoc": 9, "list": 9, "ssi": 10, "introduct": 10, "standard": 11, "trust": 12, "instanc": 13, "attest": 13, "solut": 14}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 6, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx.ext.todo": 2, "sphinx": 56}}) \ No newline at end of file diff --git a/rp-vp-kid/it/ssi-introduction.html b/rp-vp-kid/it/ssi-introduction.html new file mode 100644 index 000000000..17f026a2b --- /dev/null +++ b/rp-vp-kid/it/ssi-introduction.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | ssi-introduction.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

ssi-introduction.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/standards.html b/rp-vp-kid/it/standards.html new file mode 100644 index 000000000..e70988b8e --- /dev/null +++ b/rp-vp-kid/it/standards.html @@ -0,0 +1,1256 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | Standards + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

Standards

+

TODO

+
+ + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/trust.html b/rp-vp-kid/it/trust.html new file mode 100644 index 000000000..c9d3677e2 --- /dev/null +++ b/rp-vp-kid/it/trust.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | trust.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

trust.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/wallet-instance-attestation.html b/rp-vp-kid/it/wallet-instance-attestation.html new file mode 100644 index 000000000..17afb37e4 --- /dev/null +++ b/rp-vp-kid/it/wallet-instance-attestation.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | wallet-instance-attestation.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

wallet-instance-attestation.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rp-vp-kid/it/wallet-solution.html b/rp-vp-kid/it/wallet-solution.html new file mode 100644 index 000000000..89ae6834a --- /dev/null +++ b/rp-vp-kid/it/wallet-solution.html @@ -0,0 +1,1308 @@ + + + + + + + + The Italian EUDI Wallet implementation profile version: latest documentation | wallet-solution.rst + + + + + + + + + + + + + + + + + + + + + +
+ + +
+
+
+ +
+
+

+ + Docs Italia + + beta + + +

+

Public documents, made digital.

+
+
+ +
+
+
+
+ +
+ + +
+ +
+
+ +
+
+
+
+ + + + + +
+
+ + +
+
+
+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ +
+ + + + + +
+

wallet-solution.rst

+

[What is it]

+

[What it is usefull for]

+

[Example]

+
+

General Properties

+

[TODO]

+
+
+

Requirements

+
+
    +
  • req 1

  • +
  • req 2

  • +
+
+
+
+

Attributes

+

[Table with parameters/attributes]

+ ++++ + + + + + + + + + + +

Claim

Description

key

value

+
+
+

Implementation considerations

+

TODO

+
+
+

Libraries and code snippets

+

TODO

+
+
+

External references

+

TODO

+
+
+ + + + + +
+ +
+
+
+ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file

v!6&teSJki1`yMu#Z_|1+U58~u&sPlq)P<AwMRVMTy>VNtXHOb`?gEj>d16q z)VU+Iz^*Yvx4Z;zdQIiI+~S{7eaT^~3kLGup`L;6UMk;rnyOLK!-1a8 z?xBJ19`+CydMQ@mvpdz*J?QkN6Kkm<+ykW2J&D2o)xkv9;A+~jJBJ1bQ>(o5O@@@G zCn!#-oR~*|u#=|a*0W#o^q8s{YIS-4?0)u3aR23LG5xI0oUn9n75+|FL2=gk2%Zl# zkJgWpyKD1%zd!Ku--~P@os5{0Pgwko7uXlYK>9^YeD2RcD*8B71L=DKXRv|vOJX3I z4$ODhOhfk+QxZJh z@y<1L6O>B*?HIiZ1F0aR12K>uCj)7tCFbV}NnzQ(%=KBOO2W;4wp@f>iGOF|!!JD2@fRtbEQk~N2iBb(%9KlP{PeW8 ziiigG5MCEZ_>r%X_9_(BMraTrni(bq)-bL%_M?tO#_0#S)p=EGa?zl~A<9s*bmkr! zVWW3rq{8ip`xk&I2|r)eq)8QHZ*&!R`=N$Q#DKmCuj=iTb;sTuPzQijjOu? zD8;^W1P%1+uEv-$DKB3fJx!DFPZDaLi~dHg?hFUXLgm*k31#QobYx+6+o*BXqo{RdgISrQlTDNGTr!l#)`=KvT*; zjxlATly8lmrb#Ie5o*3A`Ws0p-^7}RQwo_CO-fmHc2Lb+X#hUjz|{`o>$B%TCrEfgQR=dAJqaZ3 zBP$};4TaEa4i|TkOmue)-!lAq)umQL!H>Tsa{rf#6Ai}{r)SOU z(ml*s@dTehDAAe={|Z|8ziM^iL%ZLvzJ<#nW@v2Wif$lQaK$m!M6X+KG|pLYXD8aV zpmUuf^dzFck$ln4nuhZQOBT$)CsB!8B6SW5BIo9GF~|K~l%zfIeicp4#z3wiXCEb` zO|^=&7HBHGskj*8wu$CVgD!?{KG{eetz8U-Bsh7Km#ybSvJRe1N#!?*Xr1M_*voR8<<`>IBy;gtptbk`ftMc;=6ll{Bmfsp>NF3sjTv;Km6( zC@%tCOu_g7V+PMu!*Wrv)TQKiMV142nCP&Jcf=fCv-&?|Gxv&U)U0ZNPM&N}`QGTB zzA+kyQc%;NOi-WS&!pAr@i{anPM?|iapEYslDLyvJE|R9mog{ryDwq2w@>goH-^_6 zuiF6SjVHen`D0o27{eXT_<$@?uoEFIjo-#&-d>(#d1KAAv8ztXraW8N%yAV7Ta(KE z%57OPK`aGRF&h_BW6%XCGZ8UQJ`N#3rF`CJjD+6YJ5bC(B$kK1SwX&eP~XamFNHT{ zq@-I?u2!&K&0OA~S&=VOT+MR}nF80uMG_u>z$&}BGM-xtWl9Tpk!P;;p%{6|L}Flm zhwDwSA+iF~X$gmxtJ^&35B7NA%mx>5T%e5rjT)s zuZE!UX}XE@;XaG0BWDF=W#-7|d#u`Bg|$+vkVND>b1_F<6uLArdOHKK#z|O^7f3V; zV{F-xMnhoRN2YM2L;Wz3ZVHa7M9_RfU=j_u2P=)fsy-A!0u(8QG((YFr4%x#7o`%$ zfT0w|{j}NGH>E1!1barjgk70@T*_xzvS*Pxw(&zs#Ut33^(@AfQ8fKt`~2^F0b#I+6AG&evJSvqIR)<3|)|a&PGM& z$^pjJSx@v1g|>;vjhnX-Zw=Whaj> z=DdojYos1UJhV)vxd{2YWh5RgFOe0u12EU@mW7h1rUPGPy-J!7qgX6_ClLL3gp!ai zHa(<^8F?$B9oCJRCXqx63&itXlI5EbCk@IIxsqlNw;Zu~$rQ4X;>39}5iOQjh$wi& zP^vqu7Z)W`0YmO0?#n|vEBVBWuww=u6I!aJ$kMj50*q7rK~?yIlr0 zO{10I4wgk5&c-StkcQiKKY0HB`~P=)?*iu7b(M*>-FDksiQ?X%B5=jcf1sJg1%w&kQxNk{v&)?RDvwbx#I ztsV3qZNnyq<=&e|xv@^d&U;&_lL)2O)ZS~KfnF-+!VHeod%zv&`15Gb z&)LQ2P>%KC!;}FD94|=rYE(=$2x@$@erUhr4S>|?O&C6W9ci?~v4DL}pTaBWb#TtX z|FQ|3>{fd8@FCsrDl_Du?qRyH>NcvizuCmF-Zp~%u6hy#<$JsJO|;$m1&q$iQuH2_ z`*|*B$)ES(8(8v<_YIsRoxp$&pVm{_$pC>8$&4-82tfIO% zpeH}F^gfhhS$f$fORx1_QVpC2v|0K4xHr&J{+e(f*}ARka3F3owH-N|H?w?Fwcfso z;XmNMO;(M%;d676{P-q@=PJqFhO~J}zPO2D<)kFPD&{sVY62kNBK|=V@pog`n-cN& z3K2gxMu@Gvw4yjg?fZdWr*e9aQcevcj%39eX)AwIo{VNGJU>dOe`9JFsK@DSV8nQn%9 zn^jyDy~K^yEpERZr{8=sHogt9HNTFGZ%#q^n;=1_pnQ`Oly0OYrRGCYYW5dWZ1E*; z?qd=9Tg(c`Ve%LjIGYq5TaMjK{tCl{Ii~>k);9mddtRilmQ&NaU+PUbVo+A<;Un4H zQu5VJjLucrbVJVOmy(^2d2XxvkoMzJMZd0X^3F;0y^g(+*0C=#^KN1t%i6Tr@mYY8 zlgco(;l$J5S%5>RFU*e7D!Ig$l2b z`%sQ;H6L~^kFVg-m;!@_H~KR4c5mRNL^a{}GQ^+B^h2zE_EdX_a^sqxNs}7~FR4jSz3Ohw&g^rDx1o(8t+${xgp5Bp~b>Xyam8wMOpt5)4c=&f1* z&?d%mGkcB=?|Jj$;%7H8qT2%U=-oN0!Hnr}9efipyw*eyb0u)&>zTNwJ)qT!Gw;zjfw7g9;#ac6kXVcTQ6 z#K2X;;XF4JkRdRHdyE;P9lkLtf<*6C41p>AzvMwsn~J^=V2c=}H~9=ZqM!7B(K7Eg z51s9sdAJ#=V7ST?vV9P@nQe}yh%>H!UN{htL2I6kJolVs;$O`mm^1&!+cEQRv(LN| z7QII_Ynn^sRug{V{h3JZ1(gFiGc~0wb>s+@QFfHrA>VXM&u<#gvv8EMCPB5AR9&l* zj=uZylZv#TL;UymoIzGP@_-MVJ9AhrhxV7|4DEP}r;VaQ-ud6aOxnHk6E^Ssg_BUQ zOb>aRU!?RJ6G`jfz(;GjjLHzUN8FEzg@w=|LR z(V+fwXO1C>Bz!;HfiwB+$>YcKCvy25fkJmSG&|rDXmK?S{;!Di6)1=xB^*7O!ZQ=t z@)kLLUWMZ;<$IJD$%Vbg@IN&fZakH*{;4z>{Nd3Ud}a`X_kNPNTj_Yrk>t$Y-~ioV zEa~p7_{-p6POD4gXO|5I)jOAqF1W_vRhgP}z@lLg_!)Ws4Qtm*6RVme@%?XHv$n{*E)IBL;rt!v7)tbW9yyg&dvo>#y(JrNxJe)n>@L1YYob< zb+A}?OzNJCB)#7mN{8docsY?y>smY+FD4Pcu&l+)p>ix9({$aU_rHopY|dE9W5xz- z@P?<=dY64(Ei3IlW2L3r_{Nn6rH zlLfIr(QCWzDLdnzSVc4#*v{2h(3>rafr?-Go(qzqa1~=+6^o}_cyIxuLl=ek&I7Js zz*`h|ZdlDVG}Drf%VN0aO39cj0DxM?*vgc;4l-yS89i_xgOyYaJKI8}EaSTn0~BKQ zrn9J_EHj6AzU;O%jvZjdrnzyDa1;HjHcolWIjlR<6i?le4Q=5bOx$>qoReg-k(d^> zt8}KIaTv@F*%?ID>+O+KhBSUv72#XG4~X}kJ5Ao>4cTeld&aVxbKDPi{mq26?M*(s z?_5DS`@Zw2ec$;h>%P;;$Kr-~KP%H4+t7`RP40m@24566*tUgx(9tj6@YDtK0%aq{66RG_IC!91gaEg;gS}t>~G?D5Zsp8GM z@>u*hqO&Oi)%HbRYp&wHA6@ekm%G|B8`Q#h#$GiuX0q!`KG@Z=OFmAbNwO|P|9N|I zt4YfxlsNczYU+5kjU+e43O0~dzU+5Qv>jesi%Kh#I}2Ox?ou}((KX4Gu(Y%T^=gA| z(V8}TW;G+?B(W^ zR_6wWs(=xdV5>65aS$UlM=`xytk25+5E~Iee!GzrYl@=Oe$ zF}i8uCNR}L)G3+=dSbDVwy2AyQq%j!A#6>coGlS5)Ru`j0H=tEO#wx$MLVr!#0C}{ z4U#Rimti4lJ7MW`TS)2=XlNI!OB`?_u&NhuEU|<@=Hk>rhPt3TyM6m1YM3@O`Z8_y zTFnAQR}w0pjF`b&AC`ln{bd~n#Re2dY{}51m0hsUqlg@QLZb;`h!aWKJXbf(xUX|8 zn7few=0lKJb|LfjU5Fyg-n}iuZb1f;e)jnHe*WfhckV74TVe7aqMa8&o2_4 z(kR{353EL7U`~fQLeRbe9hnwbGlAiv$)|Wzt9rd2ywGT_Hm1M<;>ZF#Y$jo)Gdwrk zD0}8TedAQ}?)H5o?=1NS?|j|{gT(OdmbXUjN#N*SR7Yw++pojiP@w)*=7&K;1Gu%xw{>Oga$&`KFU+>~vy30X#~lJqM@NWFG8;p0`BgCA$02$@#N0 z*s!n_Gzf=<&YJ0$*=#LI1a4`YCe+V+png-QXwTYlW8tAGL69uA?Z?>i>{6a*OUrF< zlqx1zD;{7um|n9F*fyC9`AL!0&MmJU-d(72Zn?;zMssdH`b;C6?$oMTt$MNY^s%ST z9f@Wxtv>nWi;L-0_spF3!ts2*&Az;-Y2?Jyc|{JwvkRf`@a1iY9*eVCBT1ghHkXK{ zUX0UFw$A0*7I4TJNX0sohY_0(vPQtGBu#}SNwj7evP+dFH{4_a_80p zH=a42nRWYd)3YImaoL3KIsSCnz&4I?wUXA+FgykF#40?Y^bVY~nRyqPd2J;aX3M33 zMNB%Ur^7D5G5(2S9Y-vkML|!)=1-1Q)*xko&~}23WpM&SmY7ROX;G)7?n~GUyvW*- zv%kI>HrsWbY5A)HU%rulht9lN$b$mRa-Ni6mK;VAW+8(z25_eXH?o$Z2Kh!%h5QEU zFzJQfO|V9Z*oc@8JD>2c&6W1M2MYQLTT9P5TQ&?ZbRa&Ub(3TUEhR{A$;t^kl{kBo zAn`z@G``B-ge#JFcO|{7b?co)t=L**e+mx>S65f3+bh-5^iuQUbhUGE9-ogzT;|a9 zn{llX?L)Z@32>4p&j^iYv!CiGE*9U`E(J+iTV;Z+3Gw?P@}UlcOIEQYOqH+fe^DTs zirGgkOMqbHN9*5-3k4eDwHZR+2<-f0$Wk@D32Ts4guyE#lr7t2UD?NNv7xpmgv5+S z%E;21hz6741k%B#%Hd!-T1o}W279c+`bNL<^0TZpVzn*KE1dpB#8UEy!O) zW2_JyM#O0HvQhUg26Qg#P6%QfNKCRE_hF+wJC?2G=yM;|?FC3=wL383HwMtTy*SWa zuP#@CEHgnZMm%8{$4VYBQd<+q_+2jz$FQ}};n=p8oFEtA0iw0aJa7Jk>52}7$Hd9;k- zQC5^uR)fK)u+Gxxs{mF29E|&$f1kpCGlGBfLVrTXy_nG#KDl9VTn5ITaR>=nQ7u24 zYPM)8VwxPTx~ZtGDPJ5)gBs3*a@d2Z+brQNSGJQVH5h{AP=@`z7DOp-UX4H)6GmbR z&}BFtis2qYIGXSU&h%u6y9dacZhk)-+hnVV*zhO2|UsQkooyScbrY8D~D z+~Jk2%D)q^^Nh3#PvlFv`HaVyW$X0Uun-L;1X;d+D&;Touj|yxAI0C1tpil;YApoZ z#)wt|s^f2#s3iS2x}GTNq2^nri7uw`Z#2sRHQ;ltHv8J71%c{sUZFI5H!TU!P47?7gy+SU0>3D8ZBN)Z2DRv zeCR4e+ZnvHxc}1MpS>Jd*Vf;JJfU3HE-k`$m-e*y&r#~&!N8Hsnd9WkL-!QzE!cuJ zEw-yma0`Y7(l{bDG{F2>f*`lao4(N ze9%v5mVR==ZTpV-oUJPV<__MY>}pMkpjm6S7ea3 zLyOH7Y}OZG{U1O(wxRhY9kbDEPc_53e(ey96up*}c|tjSE{Zc^Ot@W-ov`}th~pld zQk;ap=;53U9C1dtd5C+{(&5KRTb1UrPL~bX2Lnw=lkY$;l!H{m*~&^2H>%hCw;{?q zTd6mfn*Q71!;IoVsx;lc=(I==b+no2;0lCaM;nW+SgZlYOi8KQSzE+~cZWxh1&>Qr zoYBH#6PeqC!X3;sSxaSyR-4PaFB_hmV~0Y6C&mtiV~0W_1-s~z0+arZ9SVoaxxmEO zp-_;EQzMn?`q-h+U9Xl*Hg+hKn6UmGI~4ZqC9LSNsIu1A^7F_?23LDrFp3Ka4RY{$ zBSDaVH+MuZb|{qiv;Vc5SnR*4ZywYo3tods+?3&$bbastt{))B4u!6>LdSHNUtigI89Nl36Jh<}uE@K;?bnB0r_`Of#twyJhe9H}tF;ht8)Jt;=HbmK zl3bDI;i|4B@+^!U3JqjRC(^M)p`EA-p`2*P-@$^${TCNC*G6YxUEBAuL!lMn4#6f} zZ$#K4_(=6RG`@EH!)#PBb||!=gGgiqH`K91VY4xIC>$94>NV(4XvRDI7LRy`1Hw3V z^h=$M+L!OzvE%XvLL%1Qeg}fCPSk!DVPq?BK3=p(MYM!*{N!20y3V^q5~k4mTHwgj z^9PLNwG>vjg1jY&%1=RgSG2Wy6Io0UC=d6j5E%!>Ta-!+k)IGHyPzY7(1Ab!c>_u^ z7p|Fs!0>+UkM^6j#xjY1(X~TS`>S0ltZ-!) zjji_8zE_jAf9QKxx%=|QWMwa4xexyyz&|6~SZ&8GJ9Zp>kZAnxQ42%-S3Jbg+lchH zaXZ?U*ffTFci*eY+Wmd+EF5*~)D%T;?4ORh{T(hk9J;%vrgC~4`Nmc#K21N6|A00O61?3~P{I2Dpg_AYG-7mx2=DK_$6c`m zYkwcX`c>~bc36kT2(H~F(DK_pTHP&*8l+h4qmRkj$aHke)D*4~^<#MQttN(dqJYBe z6n^l7*|(zH2rPY>F#DKy9f{ch7adMT%e3m0s!P=lQo_+C7!Ao4kawoO)I=t`%Ceb* znttP0*$`*bfjJ~WFv6i8kk_d=GeSO#%lD{6nI1SEEiX~?hca~I$;^Xrje9j$f;k@( zVX>VdR z=UWLq-!>|GwwrPguD73ZK8;aI%0U4|IX~$GWTKo;d4p-CoRJ=4$Z13QicCpRFF9!DibFv zZ>F4VDig#*LbpC;Y-WZj*MARO85H{fDcAjV6cK+7W&JG0e~WS>EX6O=oJnYKCG}cp z*LUovAzqz!ZM3ni+I0})G^WR)T_40RekS8>4C!#q)WSgDL6b4*T}MikeOz?7MDfzD zkE0C(NO$e}BntR}^{Dr_tohMLIK6nFX0D2n7!-`j}@~$!t9IQbtGn2x#(~zD$%+m;x|fd#?8V5^~SMQ3Ec+z zHZlcreUaALt+Kg%U7OC#Rqls;OoN3|)ksjipG>X*~YzGbM<6WPR zrc6S7Mfx`B@{fH?l7%k6i;(}7QIWr`bP2l^r4i{T%zwl%<;qGW6lLCkd^&z);y1hj zwNmDH6LP-pT}M*p*SP3#%6$3A{K*r6r;)Ic6!v)?85ngVWr5Vx`Dn7a)Y4We)gtNb zZKc&ChzDhBH1g~=8v$g25{c?y_J%c_G=H*Hh_+xlA1X7ikHMI<`-qQew9xMN(DXcn zIv$#GxhwKSmjX|nBCepE zE2fBk^#Wk>%5y%*#lkD!OJs0a?UCj9nLwwcJ9nEoL(aM3o(b02ipV;skH*~OBGpxSp(@n zlM#GH5uDmM{3JQQilw2#s>w>XfJi!GnIP$pY~@w>C3C7_yZm3O8p&DtfRw}9m0&DF zF318*-WRoMT`M5Jmyv5&3(R*5%@(*AfyV;#GL@XkL$3u;Om6xiA0%YqrjHS6{NSjh zv8~*MQyN_P>F1zd#VDmVj{=Ho{>Jj5>weP2IR?*iYU6h*3)FMgc|LH$3ihN8k;nmAb#5 zQ1f-~I+D7-#zluy_jh?ww_yRH)xwjw`!*9?1y$98;Y#nTTHCO+m}Gt3jmxCxM|@1K zg`R(aChZ~A@w-ppNgIKlhZi+Y7=+Pqa8b7thTSfE&(Tg8ZkJvpy*Erx2N318d5Kc3 ztu2<}7PW{p=!R3%ATO87!@a#`r65%bq7r#_Rd&Ol>ubypW;*uXLx^AAKBzYi+UrcW z+MSJVK>^=Ggi1?t;-FA)g3$CWDdaWja$}YzC$G+$REM0U4aXcB+gmW>{dw&vOS~Gx zWbgKtzTE8S4Aw^NH{hbC%P!3y0|fI%?=Df)MB9cg{eX<_DsQ!Aq(6FV??J3e6sxnP zm-QCBixEAwAaaRqT;8aaK##RwMwjj08(a(GEE2_NP@)))i}uOM6fQxNl_~k6cjqZN zvw=ApuptzkuT2(e_+X*Ofy4_aX8?ANKECn)O>UO_Onw&dDd8sNm{m&Al4vmTtrpg{@pFm{ z=QajislauX##cgsaM~|o<4Anh(%Hfu&vYE18gHh zsU9fmElTu^lpL;`>{6A*|yY_l2aCB zQv-tZH`>rTNVI}*n%$*Jpbf)MCx{=GbRlM&2+PYxk7j_g!7@B6O>DIa)jBj5!XMcz zTC^Esb0T2SwTpVY)M~D*(1r|yBAj{%Z5nMIE_xTCfk>I(4xBy%w3l?=j8@A3d4^=U=s!& zv;#n){}@GyOwB7zhWjB=lNc>d5Xg6)3`Qt-q0w9gfy3z2><9~zCowSzp(-eKNf%RZ zVgOSr`#GL@hR6t0gfwjwt={f+kKvX?D&_z-8zoAVSw|UA%(GYqjP?7mG}6F?r(@3n zEJdP5vo8T-A7PHID$u^-b51-isTm|7{`6g-Enr48O{**6DnU`jZ^T6-5(OH)}6CvFo=yPi~|HQUN>w? z&a;w(RmcV|!d+9%H&3G>7HJd&gO@mJl7?#Np6$Ra4lX)PV$EYvq4N#BwX_zPoIRF* zoJA9j(T*leo>+syF|4jkDz~zQ+>PV)4{S_p)p-3gHZ7Z3{|v$k^>#v=Qo8QHXHBhQ zUi|6Z@2Y7@E&86mg;h266(33;nWL#o+ORAf0BMg^I3d8sDqIVT@NgAQk(!`d-+QG! zpt|1?RA>6@F1&EVjvZr_@EWUxN(uq>YCiwQDTQ!Rao$Y}m*)q#mFW7rYVzwor4e<_ z(&!xMVJ2YFu%tp_>MN`Pj<*4{YZ+x5pyotOvv0P&+l_5QJ9q3DZ!7FHX{f8?Z3SCl z#@h;E;a1xUC3V3$iXHb(?SRjvMfZD)pUt{d1p{9DdezZG+|lss5TqH>fLIpa1|}!X zaBLLdOJ8Ks7#js%uSNmIM}lE}ub=mt>*vraH68YLb+ACnvOF`i9V|Rg{8(<*aX3k) zWj^M`u|ge|SlC#|eonh|I&6iJU4!%UGTAv+>QxPfGq$r?&x**=4cl39md&+Hw}tKR z$ULY>`H)POLzg$$aifmrBXl$mj4U3iE>(iZbXcZ?bc!21d{!8-f~R0PlZTH%Aj139 zK8W^$6>6`}?Ga{!)y}F`uj`$l^@Jyg9NgxC{v9`225C$yZryzf=P2^5Ssp%rul+^s zEL33mYGEH_FrX6CJTnuRo<4~G!`z4Cf`h)nq%3_LzG(&xtyW8&3X-ITLi@x!tqw=` z863sXsepLZ(ONLg&IDvm!qwH)>6JQ2sJmRB20a~=Uk;+>gN0-1+4GHTBRYF&u5u}w z2_1^Q5M4aHe7t^gVPW>jGcP>3)O|6ZE_NbkPB%h@i$`*W#q-ViQ_<6Nha;D?!s5cE z;3e3V&PQV>POVg{?Gw31xLZCO?xdeQb!c(n+-fRS%tVjYx^s)s)Ah#ciQ|#dq1-bs zq%W4kr-SEKVx>~Pbphv5>7(bPsc?RNZYkX=&nAwnHuAHv!_~|)XEWVqH`zF`n5hS! zKApN$eCowRrATQxr61Mj4hM_J%bArExs|6%(G$z*Mmp45K6-3ci?(BjQ-xS8T$+En zb#^(qT0C*#h2)uB^wOmx`A{-@xKdwOeqrr}L?jl>K3$qi$Id)+TAP2mdMZ}Utm658qx-~z$viRgPPakd0>#5YS7f*HC7ca#R9X%Pp z)M;erpL%NLM75AfWX{&|sl#jKqphSiyR_1ID%V;IJzYPwaCr9Qp@?>BrI{}lmR`)A zJaTs7aQ;-c8aY*Ny>RB_`R3AvYCLhWe4=}?cbXn~DY$K8>X3n3k9a%hH&DLv|8l`h55{N)_B9&_e^R4+>Db#A7Z=J}W ztIg%+pVE%Jpq)RJSUP!pC3iFwOoY!JTB=_t9;qEUmW*dF#ZDY5*E2`YMnjj5J$Yy` z7G7-}JAF7;NY3RF+2lDSuRVD_J73P$F0Iw(pDrHCpPwzn+VyPr?CE3axg$@tpU$0m zA+25LUMipN&aPbwhMo+CM2tQ~@qtsO*di7eCfk8QW_mkuu(Z*e**yDf)O7GAJV}=D zr&b_|MVB7u@eQ1Q7T=ZdhWa#E&FbxfBMXgY;X7b?8#CCL!LAPmvx^j zq(evT571%nCRz2%1e1seJ)PUDv0<3)##bY4p7vjdZPaV&9E zUzx*vT@dJD)j5|%u7S%;tG*Da;r6b^Ww~80W1?H;W5@)FDyKwt}b49&Q zp{j}joMz(WmK0b%v0Z{64VeZ-C)BX&T^=j1G~xIl{cb3<9s9E2iihFL0u;8oMUGrF z$=-%!%W*qYXP*@E0g$ls`J}`MZ4{56n`fW*Y6GruRUBv1%q%ZcRGJR?O9meKKQ~%``)vKy-hnWxa&z7Lb1fPQC8E)AM8}74 zDiR8pQsGoQ6)R}5P&gEc;B6!v#}9EWl`5e`p{U2pv4~#Q;^}lOT8>7e@pLJor?hk; zRW3(T=~6n1B3djKD_~m~jYY$WWLb|ysFgxEp{I&v^iV1llZkXF7D^VhM7R_yMx&`n zG^yd&VmVsU6PlJtM#{xRNQ=jlnii$c$xsBti-s^x8hIIGEXPBIcqkT!Z+tl!ixeWo zSPIRgwP+!vhf5fDA{|aj@&5V&*d&)<@gNu1@Vm9}Ug&Ur!FLTu+5I+>QeHy6HynoR zK8$XSW}7sWMpJmXoAf;JcXPB~@)#{Gwiaf3n{6aE;$Aok%Mqn+3e5y2!qcIN1A%?y z)=GYtw3iOg$SCjo5Iq6P6kJ2``dPOB;O7JU^F9bLivKG#44bMJHe4Zb4oM!oZ3G2| zUX#xX#jI_#6Nyc};~fEXtuGh!61hE_Yz~J%ec32x&-8(@MQFGeI%_leYy_I6P3ePg zG5HH#Vs&y2=1ucg#-+y3V;1X`x$c}dhqiAxdgvy`2MrDk39{X!Y@MYCznODH>OIc z;D}YQ&#cT9X-n3kosbA^;H-stuI!J+^K8xjCXZq44BNH;n40D zLx|-C3?b8j!|Y7kz>Sf5v0LW`g)P8x(?B^>TfE|1dQpeRx^cCRBK?~Je%>@*&`4=~ zFx1r7f^y6V?GLLA`l6A-OoH)uJ9Q53?|OG2{+z}704ILgj(}bIWpP{LQp7TaR4TxT z(~V)-ZG@W=m;tfvnY1`YNQ(tenN(?o#R9LC#p1tvP?EG*{3Xh< z#o}Wi2Ny?&F$uilBw$JhnyV4^^(O~$eo}FM(v|Opm6NVn*j(LVVZ-emY1MPy5hC8j zMQmJyg?-V+8N`ZicORSJ$^{WGoR+l#-6$+2oTBh2s%w*=Qk_OeaIAA5WB%cpK4CJDMoNP!x{B0)uB1 zpX2l$zm>2RRhM)X3z zr7^xZL7adYDwztyiiGzO*YaUNPc23;7OoL50}I?kqUco{c#EJe@P}GJfPf5$Cs+!o z9rlJwD5+O<6FGU^O#KNXf=|ce`$tP{1!65W9*n8jHyhs z%rlLafbWFPqty8u&3yzVVE7X7V?L-fVG=k)P5IvF9k?vhC>i23L*^_2T0-pSvankIjZ0#4&e+u(Yzol)zz@mq@m@meNK`Us9N&~CZKd_AU@veaRCt6A;irk7S zt)WyLzX6(LBxZ~(6^li+FpQN6Eey*>I1YM_q@y7+X-4As8!nc#P>4;3Fdx!evLI@q z1d3>>L@ZU*qa~OlQGyCZ!(o_2!$tfajl;f(_r);i8rTEAVGgy7Arg|KQ20SzJ)8`c zq7fKX!uVf=458qg2)HK_jl?zM*Oc*V#QrPlYZwDKEu659AyghX2Escaj^iIXN`Pz> zT!7aBDGG&>p=b;i-cU>f>e7*NA)eMFiBgH|yv1^9k&qmGLD-Y>KX6RxTzYVSJ61 z^mwRP3d2HNz;NAX0^>{4q{U)nijJjXiG-exL?Q`26pLu3QYaZMq>80tELti9qiNWK zVe?JLwE~q1$0F%iQjbOBS~*=RU|KN(kVzR)5$_P0poZmp3*|4SR||^^?0<9EEPZj5%ixZ>l&caAPXqlBH5AR!YGpmeLC07$jq?PzqsyAmdmO^0X8wYp{4nipg*)7EgzZ@pK}smrL;| zK!R-?c#VZaaiE}348vfqhYM+Giy5y5Bn8H+!FV+ouLh14X}lV|epUl>-xKoKXebjR zxo#R6HH|~Pr);|pWh?BRJB!UdLM~$`Z0>c)k->}*D0a{;=YC{j6PxPx!2Q$N?Py(X zy`J#Eh~qqQ!G;9;)+>sw7o8_g;Mj%^5hvuiBE7@m&KVI?x{ddAozC<@E^c;8>`@L5|4 zl)-?_NM_UU`GR4xNPUW!d>dZjt(h1eothI1So((4S27*<-^?E9rM`A4BOm2YundYHh2HcIJr#8vtZ}BtQlBPp6Z&HGpvya2gm#n z@%jda4IoDlx}ME}PaPg0M*K;7>*fGr#tM8&28SlM73un6arNkTq>$&efZBdun^HT+ z_jsUNI#HZQIXbWHeMNXsye1K75+Ol5!pZ6f2GHHY5#@%E4u(TSeNW4HxlRlkEcac8QZ!0#~FTHsdF_-*WyK<^Zpzvz?9FB)XN@J@D17*7@lA|4pcbJ%2= z%tSaHftg+xtQnZn^GwyT0SIH=(NwG^^$dW_n7z}GP zH_#`?jDV}IAP(}*OHD_oBe0J}rX%ps6Ze$Bo4A+h<`%;DmP}tJF^qnOxzk`61AmfZ zc8lwPgjB^cANR>JAC)W6AU>^;NU)u z*5F8!h{4t8s@-)`QE^)g2kPV;LXJA@o|25k(sW*JxXtK1{!%St^1#fU^^vsL0VL&dxD#Wnfs$Z}0<9wNv3TTv+Hk{1M>qRF1$)0KEVo5giUg z=#$-!aBB{|#n3uF0aN8$7>+Q>c&vmL zKryI=GF%ESKRkLksKhYW>_kNHm$?*;q`y6Z;}TjXcc27DYI6s|dvbcAV|MB%R>pr~ z))R1^aG7<1De8%+8B>h=gyaHIE+oT6JzaoP7FBrtKsR7nGHSd|j+VvE7UO)J1V%-{GuoGS;zf$NoUfE5@|LWH=` z3zjeYh~w$9o=BAnaF8tNdaM`;LF7kMAzh2alF5)SdcmwndXes+ea@bPN1aSXQXo)v zY=smiC($yTBjL`8I*>vSfeNDdUl`wMRUuhMb*K$m=Z5o4#EFAYst_%Q zi||T>LuDB7!zU5f$MtBT02kz#FC4hLvJQsY_O zBn&6TP%#2m&je(u4hPX>x)9ZTts}rSQLsgC1m9a+fd|8pNMroCD2nNb!#x!q-BIKI ze;l5RE))p$z&ZZ79@gT8bU2P+atU24>pG^LTq>h*q)hwb`9AmG!6S~rUo{ej2dJ@L z>+YOVa*k8ibqIef0kq;{!jkapgeD%s5aEJaPWl-qAot;#J$UT!Gp6;N+@EQMj#5e1 zu88W%v720=$zfXRTVbpvu1?%0{Rx?!V)_%$G*(wv_iI}nhnyUFT(ozPQp4h0ZtDZ< z7>_H$d;yo?(Z^-1Kkln%$~niy5d7y;33%4RV^%Lki%_Jo0>#RuSP0(DzI2n(-1P^~ zH6%~kilgC<>M_hCIjTqDa-IrfFXY=%eXx_bAx&u~fa?p8uPmF%EkA+v-PJiAG6+%t zKG&|!>6TwnhTPU6s-iKgb9w|$%ftG`SR~c(T7&O>YYnXgv~sZigk2KK5an#rv7Mrd z=taaf3l*YqY(G+kVyRq22!j|T9Bz^pq$l-wYd+qZV;LQ9&Bt4FGBOP{H;lLD%8-^A zZ_USBbKACF(S}VObf}y|O*!MOxiEE)x8}6baJgkVSn)P#ZoD;*jJM_xB)C7!n`_+R z985Lit-0HcZIhSC%-}A+$6NCOHroJp!mk&SI_ubljGtUeBu0DEn|Oky)}=! zReA|Gd*lV4Q7@c5Yh25qTS4|qZuEvOX;qQ2rE@rkKEh#nU&Htfx6De-W&Bdv@8u(4 z-ZV0*BIpn~q8_GTTe#%L*SZE=cyn}W)O<=qqGWV!1%TR?h!FkIbE0Eh)kDoxl zHOJwIYK$7SPO_J)f-f{!uSz<)azdSJ>U}_4t9Zc@wHCI6;^oQU3lz(ZQAbZsNHUEM zWLxv9pa~BlP%k$JU*K3S>JA47#{byl1Ws4T?>QI=O{nn5kU#2zt3RnSWaaYmfA9sC z_1>>PxR7~k3*bsRIFK}EUJPZfShcWcV(JdLWMMl$IcLn~)6qK?H{5pIQ(12(nj$R$yF>$z$$4wX|v}Q~bVg44PcST$jfcs1_l-3I6 zkRH=QDR}j!iwGtNm#K6jlA>!1aQ@e0A*~3H@NyAumm$0h$D>G~lRyN(fq@NE9M}*y zAR>?^=`^AU(rp0vEEN!aF^XUr$uOcCrVxP;;X!e6piqdF(#3cR&Vq=6h!60w4Hqy{ zJspJ*2i{Vp5IpW;Nw^P{k|6|TO(Y6BU2(vb0c6I3yBlI-gk!oMLT_*y)o=#`{^}b3 zCX=a@S^-R&cA9eBLLU*+8^)bX9dfkVsgNaSV*XGjh>RnqV4@I7ehgA*4H@IQdXDWy zUeS)wlQPtB7K{)QmV{;#v(acQoXW=$iV``7lHq(RGM7q6;gpuo%*AITu~>XI8_T9* zx$ImhH5&@W^XXVRI+wMG6QmcZ?9b&R;aOxq;e05`Txu46!MR8_mr2j1XS4BCBA!K7 zqEK=!IUCERbGb0mrDT%n+*~Xh%0-iNmi9Oz4(h-G5PqNeXgr%w&&{Qh=~On7oSVyK zbMOzG4M&k|C7GTJ&E?_38%ZNON-T|_yWw;=l261f?Zs()`2+%E&LZCmlFP>82zi;9 z3+JPAafF&oAjD@joh4|qpvG7(A4_D?DP(lYlk-+SpUq|>mi7|V9>t;!<2;!vq)nzn?YKc9L72ui)6AGerz_9$wv}dM1qA+Et1yc;UJvKSjLy8 z_K;;b98S+Avl;v^G@BwY@d#sEE%cVsmgl4kJKyI-ZVX!K0aUIGjo5 za+x`BZ#ExEhaz+N6yYb6ipKM?Y}f)!jIbTc#AZQFiC8|Hj-=Dsa3+E)M|q?yN~0%8 zWAHW51SSdLMny6kN@hUG$+=kwX-EnyJB3+(KoUk`bF(?j*(@kM1Gr~nvD{n=B#*X| z2+k!4pW z^3Is;BbO7=?_4gF&Vvs9%33?1yKoFESjm5c$1vefi zw|ztoj^ly>!X3k(l1O&!A|mvN2@KD}-Sa(%=W5io=^fl`fYxBvVgna7GV@ za21Y1N<(BLbZ{|>c*+PTj5yShVkuoH6!b7!iAN+g33byztU)XuXEuhx(WZ(UH4P+BJqKp8| zC14He2oeW|%SG^hDUK^rxXf4vhnAr6ghSbBvc}moAB9rTcYZ^GtoP#^^0UbMasga8tC!sK6f{LN_$(Ty zt7%$2aF}Zb+ADgIZmN}JW_ya9O^r_n=DUS9Wsz%i>T4oSw>e%8ob5hBIY8lEAWntF z$Yf0VwjQ9fc7_K*=WZ}B z(&S1)y8l4j$7gS_bK<_oU)s35F z$n6)aD-}o=7B_r%cP7x*^}t!JP}c*I2o2-e!}BLOBW5s8UL2wx5@X7YFgjXT)?1LS z7xcA&OtDc46lf%7>J2l^0VUd?Odu@sjWQmm&ZJhrBdWCjCz zmK1{_BNYPf2?ubOx48--Z}d`al&W;opcF8mMwYLRE)a=Sjg59$Zynb=m1b!OI_ctW zvlUowBKL>AlE8jDuu4f(R`eF~m@Lz5i8Udhn~Y{ztWKW+5tnp=jM69Y^x*@gKxvlC z^(s1J3TWw_R#nI31(tb$?dd?qwfjJ&SueRydSFr@1^B-xi0tv{z{v&{8JecqWBEXH zr9-5L0kpd-bbUqQ4sSYov4Y#y7(sP;MO^si%gvOWrHpILypD-gn!8~_3&=TX>)_pH z;Q8kx&p$5^K3msMa(8V)HfMG*%$RLaOD260gAzEA1I4P?!2NF;?4&VN#@Q**4bd}3 zIj^?>B~4Wp0)pOT>s5RT90$G+aE>D8FChibojaU+e0uk8Ax6$iMwMc7QNHLsadk{9 z+Bd~uZHnY1OXi<8yTGz-2m#BoZM;#-_CX)w=%*lp4xk+8M!In(plZ|GcA@s!yOmJt z?GhqLO46H1AgLM|@BV6^L37qF-!_6cQ$2~X=|k5Ti=aJBf_9Rj9KJ5S2j%t&Y?$-8 zFe^0F&5F^@3DMV_2xXd?v@GxGO)pJGQ;Hq-Seuf>d8=Ib6xl3!6KI7Pq9{lp)C-QZ zWU7v+ff01FBSfEzqSGOQB}&q0#MM|}LrIgD(F;ivWJ23ibEdBIAqH_cJ6Txp7=ic! z261>DV!`(dRG2K-`!YfP8qz16v+@ZwE3Y|FO^W%U(J1CPQOpmFL@|RGgxVV+#A^@Z zLEDdK)SiRsQn23O+EmANX=w1$VAt`+is5!DhEC4;6@zmoD{48|J2mB;61gbcY5ze< z>|ggmoU}B2fe8{Oj;Ap716POf4&W+w0BTYQ*-$~h*Rn6}-OL*VIiEK~RO#RIp2FHk z(UfHtdpAt0`l7etQoypJogn%2c_s(%70szs_P&2=>U!SZmmP#&pn(9^9&jI z+Z{CbdAb(9vLJ zLJr{;U>nOydyZt6WFe=W{4Z}5c5=gBN!s@$nWbR3Gz?-kx-iL0m>3c5z~C;n zF&dviu{h|XFbD?%CveMUenrDE2oX11S|x447)ZA6sVSIjUPY$-rCL^?pGis+ttu@0J8!st9;bVMh7#DXFLHk(dC>Zr>BMcGmgQ3ZQH*j5kB zwDj`K^Eo;cAUh_RIfWVY9V^w+qONHa9!FbTrr)Mp?amXhw#xA|B(RJPiO0>g$})#- z;0A{qa2t?g40&NAw)LfEz=moenWhdmI%J=PnfMGzjmDHXtl+M6tyodGkhn8D72S#k z&NhweL@b47vkqcGhI?uJCp<%(kTe1b@sWo(zNFsCa^6Hg)IAq5Ph717CX~_yw{#5$ z6?Bo8=6EW5az4LEN55el<4})nba3mbZTm3P7sTnsq)p% z(Q4IiaW>nPi{dTD8>N(-_rch-i+UR6*y23tms?dIRCff$XMu#rJoh(zou&=`DKRe7 z@U-wLNEc?)tCA9%lo8jLgrLz}3;DoMUu)?=onAZHK)r2?WU$)T-+i@o%WQ7lV%_Cv zQObeau@p)EP<;BW%%{V7j%3061kZ(fh@zpSzp(@kUw>6+)W`@z;TaMNmqf>d4ekp! zGxv|Yx-$h|Co4ORW&637A-=XeOI=2 zOnHm7UlZ5~^^PhP=c;vkH4JLLU8qz{mw?FVdcOd&A)BcEfq@hly!Q6*A5`Ce=z@aD z%35z{yHnce-GXNjdyoy?>Gib?qWMpZmci)j?Lt)`eWUWB-fjGG8H)Bs?N3p!cMD$7 z_GhEFlRD_#jwkMh*Q>>9XJegzUe#KSjrB^e_kjCuhuzN*_+0v&Jx7#m&Xv_1EHJEW zQPS*WwJ=#Wsoc=7ct9r)l75NHRg|9jZazrbZb5y`#q=vHq@UmJrH>iNsv*G$ZJk3Y zMRu!~ii_@=CJr9V2}CQTAKi{}yjQwY2@=|otCpz5R?C9N(5B%hFjN-obAiIIEO?Y5 z8;pTLvfv=HZ7(EAFO%WJ1Zy|TP{;Tpo) z$EHxd?1+|(y2tuj&Gu6+MDASNh*i&s84mUKD^^uo8fsgbrQiaJ2&@(!rm9YFyS@GP zE;-P=wPh53EU}iAwgC4G}Hm^LgF?)Acw?R=`nL;YgnG|_Ot#1Ts0KxyjiA{VXtutM2RK+TOEuASt81L7`^mz78rH?Ym~cj`fzL97sOwR?ea z(r>u{PVN`8@P=Yf1E+I_^v4jF`e~Rl2PzM;TWxgU9)Ov})jx2$Zfup{1i)Ut;tnS6 zV`(ZI#?+MZI5NBhrj9oYxB^Gc7l zNidKza6@S>3+FCzfsU?v25`l@t<^iGqZizIdkDsNUTmicQhewc7(!Q2+WxyHgO<$ zkAxgi5B+YPaDvt1x@Y+788o6Mlz31!;haxuf=4gCx*WB+E~8UA-B>V8uM`Hw@^1K6 zu`7?F2N8q8Xd6^*vZZRD$cBp%gg_+wJz85UiF>0Y6-9H>!^c5D0jHA>^&tY@8%>-3 zUm8Y_w%W#x;5oRK3Fj)3#d^DltF3(FmF8FzUSFiZ@jYrfD}fVelm0L6Zl?m1Qsz@y z!*2U=iB#Kt?rY<8R3v?EQ%*+}AF2RtD0P(EtkV(I9l?syBy~gM{=7GF?-Aothe7dO zhSSj|^a`S#>qM)dp-B27b_Ov^he_))Lo_amjigaf>m-ucH`C@qxYhau^<*8eZ*79- z!pNsiP)@#5x&#g6)vHO+=&ywyVd=-Y>I~2#sD@fIbdCw(kCYutfU&?(d*+(zs;oK} z-u7!wgJ7Iqjs9S5z&Ve@wFfnw+o3zC*0)V_Fzm9X<*Jw9#bD%R#Arv|sJz40jx^ES zhJ{A7t*o6N;e~SeqDPDIcZfwV)VtlXX;#h9&rUP%ZRVa@4&WAJldbCgsCW0$z-x|R zm)N4KM%+5T)4r6+5$v%paH@r$-^4Jiz9(V?${6S2d$L06#)kw(9Y<`FmhqRvX z*fYtr_GJv+MfWrH7>VtEZ>-<-Ml>I}{X2o2Q16I3ndP0Au+qq5S^E~s<)($z(xRrD zTHk61j6XMU;^mC>mo6Ca>wxiRjFrL6I>-Uz?@(_$957l$$L3U78A4##H$!kkU-E!X z9&h{>ms5PQ@YKzue_J`5RaX+=Ry}Z2iYqm8E!0-$V0|jBRP8!2f6*{rtqLoRef!l_ zOD|3($5mOS@>{2>QfseoMV0Znc{SBq-8p~5lvFj1Td$(3wy&LndQYF6<+a}GQwe7+ zyC|00zyRIrO(9y02QO+Q_DKVM2<6xubi<5V$?4??cAhpZSPzJX1}k0*Kg0J(u5#_5 z>Dm63gL<(J)YrN}m0s~xg9h>HTr+6o+r45~`f$n{xAnr{LQ_TWy~|D(BkMkHY;C18 z6~}Oo^|j*6j8C?Hr)2AcBbpUeSJcD^LZC}RAnhsyEJ~%uGGMzIn5Nl^KOgK%RbFA{ zr6If;S=Yi;>MWBjy+#BA^>&jdoR%Io#kS9H_nOhi*P~p4DEZ{+=Os@MyaGWbwt5GC z32pkh0`Z~?6n=N$7a6j_%F3V}_{*rb9Xs$j!5w@BV&U)k z9@Iz@>=l<^uTJS@kt|9|ZK3S4w7)6I6&z_H>k~r{4y?{aVO6`|mCBSB@KY{q?RM$o zCj?E0diV9;w|(3aUXIF*pjE69Cw|hEU#vFWZ+T@GZ-GoxO|1PU2JE!tB08_qFC_MF zm9G@Szr+X{EDPnv?Y9I{LcPa*AE~NNs4^A`b+m!)CDUh)4{CAfCP%o(`dT&cC!>z? zo<3hN)tDHKJ;wGo4RRHe1AD;Tl}xqzRqr9nLl6^}HwGqE1IDm!yu%XudymymO%7#u zmA&l97NKhI3=@in&SUKcG!6Pz-CH?Dbnkm*c`tFw7nvxAcFG}Kf1S%Iy}b7?Uxlit zK)>R;$AEDs*X>qt$=TW^bZj+KlioAMrjmUq$EK1cy0CN&{1DX;scYv!AnwIEoI6dX zz1#VVYH7wBSjiP8yrEIuA60i^;J%6YeMH2MGM+a<#LsQ30l`Ub=P^ttx!vzN0!exI z^qDslq87d9g^BQ+897+E52+(OrMYZof2GDiZI7@vU#7`g;PGr?vY^=*=K6EmXzQiB`<&Oa6gZ*h$!&G4eJbnw|@iKQZd@yv^ zNl5O&3^ni;60Z+JlNwxG9tQrX$2u~w7uMIr{>HnPXExgl@1lgQ$-9??W35|wk!?_0 zbqqur{_FV=h~SrQ%7h2&=84X5s;1MsbgMPEkvyHPm7QW>@Bt9l+7|C-)$+AF{5iB$ zN0Kb=9A`#$DmMk9^|g{)zvELN{+1MoDZj>Lr=y?hliC_VR=%ILT+#oKqoz6=P+q@m zY2~XCnbKO-H%l6%XX@g;ufKkUVjmmA7Hp+N$%MPrOT`Xf^~r*NEm`od`pqq`UGG?h zCxU+jvGEd#jlb{`8@<$KmohP@Ci&OyjJT?&_H|Mc!XE2u1>(JE!^42UJA%7W&Uv9@ z_`<9Dpt>WV@!JTEd$>PuP4zZ0F7rZ1FRHLRnqaZ${ZTaP)cfH*Au(vQD=~YA?Y#m! z#b6Hyfi(ZP03pyT8V0%YK?%@mkFt1?rHdlNc|T`9jx>YRLptm1P2VRE!F=& z6P%)^?sHN{*;;>_S3=!7yB(k~!C6%=$b6w=34}?4+^t?Jda3!O#AN|?o@h?`DI&D@qNf&!~b>V7+hA*l$HRuMMs(dl633gUb!H{_e*e$RF)#&wfcgCuy^*X&Poo+^My!*J_=*Sb z+i7ty%?_k^zWjUM`|^P!>Je8{Axc!oy*rFZJR*V!LhcwD)x{48#bf^9nf!=j;0%ey zbFWPNb5^I!)SPuf(vItIWyas zfz~)47gDS=0?|+i!-Oy?A;v;5@HC}Gr@9WS8RC8E?Z*BNU@qz__|sSu+0~8cRQAfY zj;SX4>@ZfiV!7Kw7cCjV3Uvj6JM=lLlg0n_I++522y=O>y@PmFu*~ZQ1tuduF&ZO( zH!<=I>Ucz7V=sgxm$PgcW;Rdy&PkhBlXf+&ns_)j8Xmrf@NoL-@vuoQHi@^FHc>ii zQ*yz(iWW@l)knkLM+tkCk+7!}1*sRv2=xOs6sFavcP|bNg{!HxN*Skm-+fqw!E(xN zibK=47T85H78oOgmaB9=!1d))hWvw4D-rQ_u%I9oRi~;^mO+Fs5?Vl8X85}f2WC=6 zZ#2r-7@{cj)`AEuX5dbo z)a}$c?IXfHS>gdbmYR;@e_{MD{+y4sGc@YJobv3Gz>~2Ejoy}t?H?Zv+aD)v|5I-c zVQK!uT+SlRb6ba5CC{>3(5RGbThf+^+s}`N+wUXXes(0>ZbHWK4E~^ZFAf>U)m&v< zo7WS~RI8D@Pl_YGB*c_2@yA=56}<)3dRgschy~RaM#S!F&&c_DMfx`9_m4)K-yawz zsXhR)gAGZmE25KO?;_>X1$|8fr)%kT7U%j(MPJriT0MZD0!Z+RT#Q=%?GRkWdb8a{ zT2~{090{#%!^n{sC}LyLK-$YLg+-+O3vY7}4!Bj-FKS3SE08)w-GA3rj?gK={ucN% zB-m9qZBEMHk2Wcvph@|vH#@LE`|n)NBG8`L3XCgJ_RgznPBO(+wqjy(Pt4nLVcD_& z6T;-JsN+Y`7nt0H_~QBcOYiw|h%c_D#Fy&0cdx-`K`FFgAhDQ|1W~DU6m4+u3CA0mzv(vXfBAO9a+z*1Kdh z+Ax0z@()4thrUtm6r-vts=r+KSqYf z8+v!bVnsn&7mfEPdVAy>QpYw<^lokI9m?|E-arO)L}2P5d-im>g&e_90XKTP_$au& z@x2>HVz0+f^ln?y8<3=(W()OigFqyk(DDkt+%CFVMB5keb+_@g+p6Q+9Z1u?SkQ_W z=-2i}?LGub?(Ho%n;lqGbjvSCZ|L2DiR(1F%Zrz2VcWo)J0a$)D~lwZ0Z$w4y-~a| z+~C@almlh4Sl8O1P3q35V7}PX(pQ?T&SG7^sMj}+-q_n+L5y4Z_2%9^`lTum#jz{Z z+nY;zp}U0k?xbX3Kom+K5y3Lv+=is&MV%l*y0AN|jg@X^k%N1q)JE^-Zl@efZS)?t z|FEdHTFurXmX%UnZvnwH%wlJwcNbJ-_ZA*;{NiY$RtJ&v?iB61^l$&cQMq?FjlT^f zRe+v4;MwTiQP&zvT_lbNwoCYaqYgU07yGJatF&0sS3nr(rpj2}1#?@uO8B`A`Jh)2 z7PNY4qq3`ar`GK>7uBoYja5+79i{H_3YgNMI3Sf@ASkllYG`$uw!8QZr+cTVSFcvu zdbiYEytGWTbT<;UHQV~4wI)+Yv9oxw+O7)PylW9!F07RVh%w4rBqvlJ>+JzBi2HBY zr9m-9vBffCE4MeE1M|`+bb?^Q#LbvpYORFnzP+WbnqNVl_YgaQYAA#;$R8qWF^?IxFp&g9q`tJ-xElsUR_Pv$b?^qjx`*8jo-b06UMgO$#59i80< zt1dXGgsV44Z|yw-np|EqSM7O(Od}?PW;7 z#TUBZ={68`FMk(b7wb)AOc1Dj1ez7bgNYZs1}rlQQTsx71zp^U(RHdF;9tmqE1;fc zvDzqu2Bc8fOJV{N(NV6tOvGDnYGk>lk&!q8%`6x664-YQL#XI_2c6sx-9fvss3R?4 zeNiiwaQZ>gW4(6|wM<&#v@#>WzyV$ZOEMRfrPsFG!IReShs=ui?bxC9Zihq z-hFu6kK`9j_~y_=ye3~9VPLE%p$IsK_*XZ%9^!PG8{tZ3;h#r4HkH4VDpV8wV=<&Do*a;NY zcF^N)dfY*eN9geoJ*McfpB_ni#ORTw$GhoqiXO-5@fvVqeG9E>G2Xh zzK0$kp~nx?;}i7wDSCXG9-pJfzoJKpG$@+nT9H0IPmdz5>(!p8#~{; zBe@rk7(E*FxIm9z2cgxzK#za>ARb?$$1l;>&(h=TkKyq(dK`WPk2!k$4SoF|^jLli z9yNM=jUInTk7sEZ3-n-}kJY?15mJI4?+3{-`PHU^__UuMDV)I8;`F!&YIN;RdW5O) zG#=gFZA6|F;ZN{65$HP8=M|>Sb*9U8rpa}t$91N~b*960ronZlzjda)b*8&@rnz;d zw{@nqb*8g*rm=OVuXU!ab*8Izrm1zNr*)>Kb*7_rrlEDFpLM34b*7tjrkQo7mvyF< zb*7Vbrjd1~k9DSvb*77Tripc?hjpffb*6)Lrh#>y|8<`Gb)NTip7Sd_-&c69ukbvh zeN5^Vp5H4xw^w*x*LhB_@O)n3xdeVNg;#hEukid`;kmoQ^R`~2IlIF1g^^>LuJAlv z;W@g(^K+$J*$Z(A&H1e?D)5Kp#7_{zvz+(^`owbL*XR?=i7(S9mJ@$OpIA=(1$|;U z@elNg<-|^6JeCu8(fa@z?Z;<;2(N z6U&KPcH$GuiTmgi%ZW$n6U&Kd`owZ#hCZ>Jc#=M`oH$FLmgu3;gXKhnKCzs5FMVP; zu}+^@PJE0$v7GoZ`owbL=jhXK(Bn7h!E!=;B02HCJ$SI3DAQM#6W_QCpIA=(35gAs z6Eh?%SWdh^pBC=L<2*h7mL7jkkLrDRT%ZR_k>4Ou!cyefH{ugZkuQ=^VJY%%5+y(N zCOm$e9xP8TKZ;K*PrmUOKCwJmA)&(Zc_<;evSFDy^^6D?=8)AV3@a^nGfVtGP| zlY~4WcMX;&e1u>7T?B5g{RBPUC+l{5cUYA&5;na%kgk|LD@YL(Z%Fr+<%Bw7eIv?2 zNr4i#Txix!J&%jt=XhzBzRlL+ZL(LcwAa=?wot7O?b+^kwq^XXqqiG7gJQEwdOs2` z7n}9EP`9uPy(MeB|6V{>dl4Ld^rrR)H_kxY#TFWRv&^yt#iDW>_JwP0=*IG`+Nj=K z*~MluWhhGJx|H1+N_0Txc@7Ajjnh%g1SYV5fxm-5C(4lVZ%Lmp&wn=GfN383KLL-I zW6RrN68g_5H_Rl&RH^lDHa4?2^llQVtZzDeV(ujEDy1EOwO<`dJq!Z1KSHZ$d>zD$ z#(R6sZI(nI&E{n7k5NqK@pfX-_#WzA$bib`h3&PxHWN5lK^nD#tuD-^t%Ix0)`f%E zuT_JqoZkf6W)RwY+x4CJp>fbKp*Soh)2((#`Dp#4PyGEa5B&9EuJ$$5u;5Li3tlw7 z(D9B#Sp8eH(~vYZ;SSG40JeVeAu)GVB}-h7Z;Jb)kNZ(>7=3ucC+XtmQ30Ll2UKnV z9&4?DkUAP|Hiv^5@d@U^s{^xk5KFa$^lhU;`tBi+V!J~oFkuwHMsIC6yvKaPdw2`s zJuoV~Z|jG*z7*6vrn2l4wBiir#`kpA`-LK@y4NaMq)_s@Mo`lnk6 zX=HmKO$>+h#)Lm@;UBjU(&%HF_} zLi*(`g!Jv(18HnHq<`fT(!bb3NZ&Ckr2aV7Q_tU(^rtE9M7gcfAKp1Cto}IFL;DT* zg!GXug!G9~A$2h|;B;4O4=30epP(hT5VUuV3fklS%0g|`!-jI!Ct#B9kA_X*esw-B(|EdlJpaKL`dCtyFag@9$Z1TYWb@p+$seQpZ@ z%Z&=y!G7Vvaxtj2%ERaFKl%jkKWrg*`BA|O^@AsUii*|Y@cmDp@cs1`!Z$Z6ds=E8Pj-hvm4!^!dq zpWwZH3&A@wDtL*0vb3Ib(?R!eC>MM}d2S1#JUS|rQ~glZwAS))$XY%jYi=QA$3}&0 zx*syQ`3BOlSb8{gJ)h8B*+S@!ZxM9Kc-RBFPx*xIlUoSgiBX|*SrVG?mZ^A%%`fimjN82{52!gy*_7+q|?!lebbE&1XL`2Y-u^Y47Z z`PHk0^Jn2XC!HOh8WqlX|6I28WjOKk&8r}eFNOnoXWE|*b34jijSgc4@|jVA4E6&F z?|uDJFf<&vNuR*&+dANm@4aEmpz}Cyn)M0YyS5Oz`?d}`4@vsXKB0SN3!!^pWawPP zjCqyOCkI~i326H&0X+xDRzu7j|Ju$`iFCf71#y2YNEeBM?93>jt#%B@L93z~thSrO z8TGq;;@~^C5C?bMq;R0q)fcVNrVC1ZJLvXmqgd~j=r+<4d@FksKAasVPvF1K#)mev U-tH3Jx)XuZPS6F>ZejZW2OuYIr~m)} literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/remote-flow.doctree b/rp-vp-kid/en/.doctrees/remote-flow.doctree new file mode 100644 index 0000000000000000000000000000000000000000..6a13327bdf3c20278e617cdf0419d6a244d344e2 GIT binary patch literal 194698 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/revocation-lists.doctree b/rp-vp-kid/en/.doctrees/revocation-lists.doctree new file mode 100644 index 0000000000000000000000000000000000000000..d0b34a60cd0e31b979d06644be473c8073bb6403 GIT binary patch literal 178525 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 XU2Vf3Em9;p2cxx5)7B)|f${$V-Hg_~ literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/standards.doctree b/rp-vp-kid/en/.doctrees/standards.doctree new file mode 100644 index 0000000000000000000000000000000000000000..37155fef6c10e2ef8d44d3ec88def685602810ce GIT binary patch literal 49829 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 literal 0 HcmV?d00001 diff --git a/rp-vp-kid/en/.doctrees/wallet-attestation.doctree b/rp-vp-kid/en/.doctrees/wallet-attestation.doctree new file mode 100644 index 0000000000000000000000000000000000000000..64fe8c4e6dd2215ed1af288b241fe15188d80d63 GIT binary patch literal 175299 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 Zh5xGcH`h%sk)?GSay diff --git a/rp-vp-kid/en/_images/Eo_circle_red_letter-x.svg b/rp-vp-kid/en/_images/Eo_circle_red_letter-x.svg new file mode 100644 index 000000000..4c3c8e785 --- /dev/null +++ b/rp-vp-kid/en/_images/Eo_circle_red_letter-x.svg @@ -0,0 +1 @@ + diff --git a/rp-vp-kid/en/_images/High-Level-Flow-ITWallet-PID-Issuance.svg b/rp-vp-kid/en/_images/High-Level-Flow-ITWallet-PID-Issuance.svg new file mode 100644 index 000000000..112223018 --- /dev/null +++ b/rp-vp-kid/en/_images/High-Level-Flow-ITWallet-PID-Issuance.svg @@ -0,0 +1,3 @@ + + +
PID Provider
PID Provider
Wallet Solution
Wallet Solution
Wallet Instance
Wallet Instance
VCI Component (OIDC4VCI)
VCI Component (OIDC4VCI...
Issues PID
Issues PID
National eID Component
 (e.g. OIDC, SAML)
National eID Component...
Wallet Provider
Wallet Provider
Attestation Service
Attestation Service
Issues
Wallet Verifiable Attestation
Issues...
Authenticates the User
Authenticates the User
Requests PID
Requests PID
Develop and Maintains
Develop and Maintains
Federation API Services
Federation API Services
Federation API Services
Federation API Serv...
National IdP
National IdP
0
0
3
3
4
4
5
5
Trust Anchor - Accreditation Body
Trust Anchor - Accreditation Body
Federation API Services
Federation API Services
Requests for PID Provider identifier
Requests for PID Provider identifier
1
1
2
2
Requests for PID Provider Metadata
Requests for PID Provider Metadata
Viewer does not support full SVG 1.1
\ No newline at end of file diff --git a/rp-vp-kid/en/_images/High-Level-Flow-ITWallet-Presentation-ISO.svg b/rp-vp-kid/en/_images/High-Level-Flow-ITWallet-Presentation-ISO.svg new file mode 100644 index 000000000..6bcf4030f --- /dev/null +++ b/rp-vp-kid/en/_images/High-Level-Flow-ITWallet-Presentation-ISO.svg @@ -0,0 +1 @@ +User's SmartphoneVerifier's SmartphoneUserUserWallet InstanceWallet InstanceVerifier AppVerifier App1Open the Wallet Instance to present an mDoc CredentialDevice Engagement subphase -over QR-2Generate new ephemeral key pair3Show the QR Code for Device Engagement4Scan the QR Code5Generate newephemeral key pair6Compute session keySession establishment and Communication subphase -over BLE secure channel-7mDoc Request + public key of the Verifier App(Session establishment)8Compute session key9Prompt for consent to share the requested information10Grant consent11Retrieve mDoc from local storage12mDoc Response13Verify Response signatureand check mDoc validity \ No newline at end of file diff --git a/rp-vp-kid/en/_images/High-Level-Flow-ITWallet-QEAA-Issuance.svg b/rp-vp-kid/en/_images/High-Level-Flow-ITWallet-QEAA-Issuance.svg new file mode 100644 index 000000000..7a55b4792 --- /dev/null +++ b/rp-vp-kid/en/_images/High-Level-Flow-ITWallet-QEAA-Issuance.svg @@ -0,0 +1,3 @@ + + +
(Q)EAA Provider
(Q)EAA Provider
Wallet Solution
Wallet Solution
Wallet Instance
Wallet Instance
VCI Component (OpenID4VCI)
VCI Component (OpenID4V...
Issues (Q)EAA
Issues (Q)EAA
Requests (Q)EAA
Requests (Q)EAA
Federation API Services
Federation API Services
Trust Anchor - Accreditation Body
Trust Anchor - Accreditation Body
Federation API Services
Federation API Services
Requests for Issuer identifier
Requests for Issuer identifier
1
1
2
2
Register
Register
User Authentication with PID
User Authentication with PID
Requests for Issuer Metadata
Requests for Issuer Metadata
RP Component (OpenID4VP)
RP Component (OpenID4VP...
5
5
3
3
4
4
Text is not SVG - cannot display
\ No newline at end of file diff --git a/rp-vp-kid/en/_images/High-Level-Flow-Status-Attestation.svg b/rp-vp-kid/en/_images/High-Level-Flow-Status-Attestation.svg new file mode 100644 index 000000000..fe109258f --- /dev/null +++ b/rp-vp-kid/en/_images/High-Level-Flow-Status-Attestation.svg @@ -0,0 +1,4 @@ + + + +
Credential Issuer
Wallet Instance
Verifier
1
Request a Status Attestation for a Digital Credential
Provide a Status Attestation for a Digital Credential
Request a Digital Credential with a corresponding Status Attestation
Present a Digital Credential with a corresponding Status Attestation
2
3
4
At time t0, a Status Attestation is obtained by the Wallet Instance, for each stored Digital Credential
At time t1, greater that t0 and less that the expiration time of the Status Attestation, the Wallet Instance presents a Digital Credential and the corresponding Status Attestation if requested.