fix typo in 3.8.1 release notes master
authorGalen Charlton <gmc@equinoxOLI.org>
Mon, 23 May 2022 15:52:31 +0000 (11:52 -0400)
committerGalen Charlton <gmc@equinoxOLI.org>
Mon, 23 May 2022 15:52:31 +0000 (11:52 -0400)
Signed-off-by: Galen Charlton <gmc@equinoxOLI.org>
360 files changed:
.gitignore
Open-ILS/examples/apache_24/eg_vhost.conf.in
Open-ILS/examples/fm_IDL.xml
Open-ILS/examples/fm_IDL.xsd
Open-ILS/examples/oils_ctl.sh
Open-ILS/examples/opensrf.xml.example
Open-ILS/examples/simple-reporter.xsd [new file with mode: 0644]
Open-ILS/src/eg2/package-lock.json
Open-ILS/src/eg2/package.json
Open-ILS/src/eg2/src/app/core/pcrud.service.ts
Open-ILS/src/eg2/src/app/share/clipboard/clipboard-dialog.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/share/clipboard/clipboard-dialog.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/share/common-widgets.module.ts
Open-ILS/src/eg2/src/app/share/grid/grid-body.component.html
Open-ILS/src/eg2/src/app/share/grid/grid-body.component.ts
Open-ILS/src/eg2/src/app/share/grid/grid-toolbar-actions-menu.component.html
Open-ILS/src/eg2/src/app/share/grid/grid-toolbar-actions-menu.component.ts
Open-ILS/src/eg2/src/app/share/interval-input/interval-input.component.ts
Open-ILS/src/eg2/src/app/share/item-location-select/item-location-select.component.ts
Open-ILS/src/eg2/src/app/share/multi-select/multi-select.component.html
Open-ILS/src/eg2/src/app/share/multi-select/multi-select.component.ts
Open-ILS/src/eg2/src/app/share/org-family-select/org-family-select.component.ts
Open-ILS/src/eg2/src/app/share/text-multi-select/text-multi-select.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/share/text-multi-select/text-multi-select.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/acq/provider/acq-provider-search-form.component.html
Open-ILS/src/eg2/src/app/staff/admin/acq/funds/funding-sources.component.html
Open-ILS/src/eg2/src/app/staff/admin/local/admin-local-splash.component.html
Open-ILS/src/eg2/src/app/staff/admin/local/admin-local.module.ts
Open-ILS/src/eg2/src/app/staff/admin/local/copy-loc-order/copy-loc-order-routing.module.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/copy-loc-order/copy-loc-order.component.css [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/copy-loc-order/copy-loc-order.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/copy-loc-order/copy-loc-order.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/copy-loc-order/copy-loc-order.module.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/field-documentation/field-documentation.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/field-documentation/field-documentation.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/field-documentation/field-documentation.module.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/field-documentation/routing.module.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/routing.module.ts
Open-ILS/src/eg2/src/app/staff/admin/local/staff_portal_page/clone-portal-entries-dialog.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/staff_portal_page/clone-portal-entries-dialog.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/staff_portal_page/staff-portal-page.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/staff_portal_page/staff-portal-page.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/admin/local/triggers/trigger-edit.component.html
Open-ILS/src/eg2/src/app/staff/admin/local/triggers/trigger-edit.component.ts
Open-ILS/src/eg2/src/app/staff/admin/server/coded-value-maps/coded-value-maps.component.html
Open-ILS/src/eg2/src/app/staff/admin/server/coded-value-maps/coded-value-maps.component.ts
Open-ILS/src/eg2/src/app/staff/admin/server/coded-value-maps/coded-value-maps.module.ts
Open-ILS/src/eg2/src/app/staff/cat/volcopy/copy-attrs.component.html
Open-ILS/src/eg2/src/app/staff/cat/volcopy/copy-attrs.component.ts
Open-ILS/src/eg2/src/app/staff/cat/volcopy/volcopy.service.ts
Open-ILS/src/eg2/src/app/staff/catalog/catalog.module.ts
Open-ILS/src/eg2/src/app/staff/catalog/record/actions.component.html
Open-ILS/src/eg2/src/app/staff/catalog/record/copies.component.html
Open-ILS/src/eg2/src/app/staff/catalog/record/holdings.component.html
Open-ILS/src/eg2/src/app/staff/catalog/record/upload-jacket-image-dialog.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/catalog/record/upload-jacket-image-dialog.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/catalog/result/record.component.html
Open-ILS/src/eg2/src/app/staff/common.module.ts
Open-ILS/src/eg2/src/app/staff/login.component.ts
Open-ILS/src/eg2/src/app/staff/nav.component.css
Open-ILS/src/eg2/src/app/staff/nav.component.html
Open-ILS/src/eg2/src/app/staff/reporter/routing.module.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/routing.module.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/simple-reporter.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/simple-reporter.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/simple-reporter.module.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/simple-reporter.service.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-editor.component.css [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-editor.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-editor.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-field-chooser.component.css [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-field-chooser.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-field-chooser.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-field.component.css [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-field.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-field.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-my-outputs.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-my-outputs.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-my-reports.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-my-reports.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-output-options.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-output-options.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-sort-order.component.css [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-sort-order.component.html [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/reporter/simple/sr-sort-order.component.ts [new file with mode: 0644]
Open-ILS/src/eg2/src/app/staff/routing.module.ts
Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.html
Open-ILS/src/eg2/src/app/staff/share/admin-page/admin-page.component.ts
Open-ILS/src/eg2/src/app/staff/share/holds/grid.component.html
Open-ILS/src/eg2/src/app/staff/share/holds/grid.component.ts
Open-ILS/src/eg2/src/app/staff/share/patron/profile-select.component.ts
Open-ILS/src/eg2/src/app/staff/share/patron/search.component.html
Open-ILS/src/eg2/src/app/staff/splash.component.html
Open-ILS/src/eg2/src/app/staff/splash.component.ts
Open-ILS/src/eg2/src/app/staff/staff.module.ts
Open-ILS/src/eg2/src/styles.css
Open-ILS/src/eg2/src/tsconfig.spec.json
Open-ILS/src/extras/Makefile.install
Open-ILS/src/extras/autogen.sh
Open-ILS/src/extras/install/Makefile.debian-bullseye
Open-ILS/src/extras/install/Makefile.debian-buster
Open-ILS/src/extras/install/Makefile.debian-stretch
Open-ILS/src/extras/install/Makefile.ubuntu-bionic
Open-ILS/src/extras/install/Makefile.ubuntu-focal
Open-ILS/src/perlmods/lib/OpenILS/Application/Acq/Order.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Actor.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Actor/Carousel.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/AppUtils.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Booking.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Cat/AuthCommon.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Cat/BibCommon.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Holds.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/EbookAPI.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/EbookAPI/OverDrive.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Reporter.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Search/Biblio.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Driver/Pg/QueryParser.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Storage/Publisher/action.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/SuperCat.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/SuperCat/OAI.pm [new file with mode: 0644]
Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Event.pm
Open-ILS/src/perlmods/lib/OpenILS/Application/Trigger/Reactor.pm
Open-ILS/src/perlmods/lib/OpenILS/Const.pm
Open-ILS/src/perlmods/lib/OpenILS/Reporter/SQLBuilder.pm
Open-ILS/src/perlmods/lib/OpenILS/Utils/BadContact.pm
Open-ILS/src/perlmods/lib/OpenILS/Utils/EDIWriter.pm
Open-ILS/src/perlmods/lib/OpenILS/Utils/HTTPClient.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Account.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/EGCatLoader/Course.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/SuperCat.pm
Open-ILS/src/perlmods/lib/OpenILS/WWW/SuperCat/OAI.pm [new file with mode: 0644]
Open-ILS/src/perlmods/lib/OpenILS/WWW/Vandelay.pm
Open-ILS/src/perlmods/live_t/34-lp1787968-cover-uploader.t [new file with mode: 0644]
Open-ILS/src/perlmods/live_t/lp1883171-copy-inventory.t [new file with mode: 0755]
Open-ILS/src/sql/Pg/000.english.pg11.fts-config.sql [new symlink]
Open-ILS/src/sql/Pg/000.english.pg12.fts-config.sql [new symlink]
Open-ILS/src/sql/Pg/000.english.pg13.fts-config.sql [new symlink]
Open-ILS/src/sql/Pg/000.english.pg14.fts-config.sql [new symlink]
Open-ILS/src/sql/Pg/002.functions.aggregate.sql
Open-ILS/src/sql/Pg/002.schema.config.sql
Open-ILS/src/sql/Pg/005.schema.actors.sql
Open-ILS/src/sql/Pg/011.schema.authority.sql
Open-ILS/src/sql/Pg/030.schema.metabib.sql
Open-ILS/src/sql/Pg/040.schema.asset.sql
Open-ILS/src/sql/Pg/400.schema.action_trigger.sql
Open-ILS/src/sql/Pg/600.schema.oai.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/800.fkeys.sql
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/955.data.MADS21-xsl.sql
Open-ILS/src/sql/Pg/999.functions.global.sql
Open-ILS/src/sql/Pg/live_t/lp1145213_test_func_asset.merge_record_assets.pg
Open-ILS/src/sql/Pg/live_t/lp1883171-copy_inventory.pg [new file with mode: 0644]
Open-ILS/src/sql/Pg/reporter-schema.sql
Open-ILS/src/sql/Pg/sql_file_manifest
Open-ILS/src/sql/Pg/t/lp1501781-unaccent_and_squash.pg
Open-ILS/src/sql/Pg/t/lp1722827_trim_spaces_from_located_uris.pg
Open-ILS/src/sql/Pg/t/lp1883171-copy_inventory-schema.pg [new file with mode: 0644]
Open-ILS/src/sql/Pg/t/search_limit_facet_fetch.pg
Open-ILS/src/sql/Pg/upgrade/1310.function.remove-array_accum.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1311.function.biblio.extract_located_uris.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1312.schema.add_editor_index_to_usr_message.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1313.data.hold_group_ws_settings.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1314.function.lp1937244-postgresql-changes.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1315.schema.portal_page_table.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1316.data.default_portal_page.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1317.data.portal_admin_perm.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1318.schema.jacket_uploader.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1319.data.angular-copy-templates.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1320.schema.simple_reporter.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1321.schema.asset.copy_inventory.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1322.data.jquery_opac_library_setting.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1323.schema.oai.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1324.schema.preferred_locale_and_alternate_at_templates.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1325.data.MADS21-xsl.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/upgrade/1326.data.field_documentation-workstaiton-setting.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/version-upgrade/3.7.2-3.7.3-upgrade-db.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/version-upgrade/3.8.0-3.8.1-upgrade-db.sql [new file with mode: 0644]
Open-ILS/src/sql/Pg/version-upgrade/3.8.0-3.9.0-upgrade-db.sql [new file with mode: 0644]
Open-ILS/src/templates-bootstrap/opac/carousel.tt2 [new file with mode: 0644]
Open-ILS/src/templates-bootstrap/opac/css/style.css.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/charges.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/circ_history/export.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/lists.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/messages/single_message.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/prefs.tt2
Open-ILS/src/templates-bootstrap/opac/myopac/update_locale.tt2 [new file with mode: 0755]
Open-ILS/src/templates-bootstrap/opac/parts/anon_list.tt2
Open-ILS/src/templates-bootstrap/opac/parts/base.tt2
Open-ILS/src/templates-bootstrap/opac/parts/base_simple.tt2 [new file with mode: 0644]
Open-ILS/src/templates-bootstrap/opac/parts/bookbag_actions.tt2
Open-ILS/src/templates-bootstrap/opac/parts/css/colors.tt2
Open-ILS/src/templates-bootstrap/opac/parts/hold_status.tt2
Open-ILS/src/templates-bootstrap/opac/parts/js.tt2
Open-ILS/src/templates-bootstrap/opac/parts/login/form.tt2
Open-ILS/src/templates-bootstrap/opac/parts/login/login_modal.tt2
Open-ILS/src/templates-bootstrap/opac/parts/matomo_analytics.tt2 [new file with mode: 0644]
Open-ILS/src/templates-bootstrap/opac/parts/misc_util.tt2
Open-ILS/src/templates-bootstrap/opac/parts/place_hold.tt2
Open-ILS/src/templates-bootstrap/opac/parts/record/contents-summaryonly.tt2 [new file with mode: 0644]
Open-ILS/src/templates-bootstrap/opac/parts/record/contents.tt2
Open-ILS/src/templates-bootstrap/opac/parts/record/summary.tt2
Open-ILS/src/templates-bootstrap/opac/parts/topnav_links.tt2
Open-ILS/src/templates-bootstrap/opac/parts/topnav_logo.tt2
Open-ILS/src/templates/opac/myopac/main.tt2
Open-ILS/src/templates/opac/parts/hold_status.tt2
Open-ILS/src/templates/opac/parts/js.tt2
Open-ILS/src/templates/staff/cat/bucket/copy/t_pending.tt2
Open-ILS/src/templates/staff/cat/bucket/copy/t_view.tt2
Open-ILS/src/templates/staff/cat/catalog/t_holds.tt2
Open-ILS/src/templates/staff/cat/item/index.tt2
Open-ILS/src/templates/staff/cat/item/t_circ_list_pane.tt2
Open-ILS/src/templates/staff/cat/share/t_replace_barcode.tt2
Open-ILS/src/templates/staff/circ/patron/t_edit.tt2
Open-ILS/src/templates/staff/circ/patron/t_summary.tt2
Open-ILS/src/templates/staff/navbar.tt2
Open-ILS/src/templates/staff/share/print_templates/t_bill_payment.tt2
Open-ILS/tests/datasets/sql/env_create.sql
Open-ILS/web/js/ui/default/circ/selfcheck/selfcheck.js
Open-ILS/web/js/ui/default/opac/copyloc.js
Open-ILS/web/js/ui/default/opac/ebook_api/loggedin.js
Open-ILS/web/js/ui/default/opac/staff.js
Open-ILS/web/js/ui/default/staff/admin/workstation/app.js
Open-ILS/web/js/ui/default/staff/app.js
Open-ILS/web/js/ui/default/staff/cat/bucket/copy/app.js
Open-ILS/web/js/ui/default/staff/cat/item/app.js
Open-ILS/web/js/ui/default/staff/cat/volcopy/app.js
Open-ILS/web/js/ui/default/staff/circ/holds/app.js
Open-ILS/web/js/ui/default/staff/circ/patron/app.js
Open-ILS/web/js/ui/default/staff/circ/patron/bills.js
Open-ILS/web/js/ui/default/staff/circ/patron/bucket/app.js
Open-ILS/web/js/ui/default/staff/circ/patron/regctl.js
Open-ILS/web/js/ui/default/staff/circ/services/circ.js
Open-ILS/web/js/ui/default/staff/circ/services/item.js
Open-ILS/web/js/ui/default/staff/package-lock.json [new file with mode: 0644]
Open-ILS/web/js/ui/default/staff/package.json
Open-ILS/web/js/ui/default/staff/serials/directives/subscription_manager.js
Open-ILS/web/js/ui/default/staff/serials/services/core.js
Open-ILS/web/js/ui/default/staff/services/auth.js
Open-ILS/web/js/ui/default/staff/services/patron_search.js
Open-ILS/xsl/MARC21slim2MADS.xsl
Open-ILS/xsl/fm_IDL2js.xsl
build/i18n/po/AutoFieldWidget.js/AutoFieldWidget.js.pot
build/i18n/po/FlattenerGrid.js/FlattenerGrid.js.pot
build/i18n/po/PCrudFilterPane.js/PCrudFilterPane.js.pot
build/i18n/po/Searcher.js/Searcher.js.pot
build/i18n/po/TranslatorPopup.js/TranslatorPopup.js.pot
build/i18n/po/URLVerify.js/URLVerify.js.pot
build/i18n/po/acq.js/acq.js.pot
build/i18n/po/authority.js/authority.js.pot
build/i18n/po/bootstrap-opac/bootstrap-opac.pot
build/i18n/po/bootstrap-opac/fr-CA.po
build/i18n/po/capture.js/capture.js.pot
build/i18n/po/conify.js/conify.js.pot
build/i18n/po/db.seed/db.seed.pot
build/i18n/po/fm_IDL.dtd/cs-CZ.po
build/i18n/po/fm_IDL.dtd/fm_IDL.dtd.pot
build/i18n/po/ils_events.xml/ils_events.xml.pot
build/i18n/po/match_set.js/match_set.js.pot
build/i18n/po/multiclass_search_help.html/en-GB.po
build/i18n/po/opac.js/opac.js.pot
build/i18n/po/pickup_and_return.js/pickup_and_return.js.pot
build/i18n/po/pull_list.js/pull_list.js.pot
build/i18n/po/register.js/register.js.pot
build/i18n/po/reports.js/reports.js.pot
build/i18n/po/reservation.js/reservation.js.pot
build/i18n/po/selfcheck.js/selfcheck.js.pot
build/i18n/po/serial.js/serial.js.pot
build/i18n/po/tpac/cs-CZ.po
build/i18n/po/tpac/tpac.pot
build/i18n/po/vandelay.js/vandelay.js.pot
build/i18n/po/webstaff/cs-CZ.po
build/i18n/po/webstaff/webstaff.pot
build/i18n/scripts/basel10n.py
build/i18n/scripts/db-seed-i18n.py
build/i18n/scripts/dojo_resource.py
build/i18n/scripts/fieldmapper.py
build/i18n/scripts/ils_events.py
build/i18n/scripts/marc_tooltip_maker.py
build/i18n/scripts/merge_ils_events.py
build/i18n/tests/check_entities.py
build/i18n/tests/check_properties.py
build/i18n/tests/testIDL.py
build/i18n/tests/testSQL.py
build/i18n/tests/testbase.py
build/i18n/tests/testpo.py
docs/RELEASE_NOTES_3_7.adoc
docs/RELEASE_NOTES_3_8.adoc
docs/RELEASE_NOTES_3_9.adoc [new file with mode: 0644]
docs/RELEASE_NOTES_NEXT/API/remove_utils_isbn.adoc [deleted file]
docs/RELEASE_NOTES_NEXT/Administration/staged_search_cleanup.adoc [deleted file]
docs/RELEASE_NOTES_NEXT/Client/org-select-styling.adoc [deleted file]
docs/RELEASE_NOTES_NEXT/SIP/checkin-hold-phone.adoc [deleted file]
docs/RELEASE_NOTES_NEXT/miscellaneous.adoc
docs/modules/admin_initial_setup/nav.adoc
docs/modules/admin_initial_setup/pages/oaipmh.adoc [new file with mode: 0644]
docs/modules/cataloging/nav.adoc
docs/modules/cataloging/pages/authorities_advanced.adoc [new file with mode: 0644]
docs/modules/circulation/pages/basic_holds.adoc
docs/modules/circulation/pages/billing.adoc
docs/modules/development/pages/updating_translations_launchpad.adoc
docs/modules/installation/pages/server_installation.adoc
docs/modules/installation/pages/server_upgrade.adoc
docs/modules/opac/assets/images/lists_opac/add_to_basket.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/lists_opac/add_to_list_basket.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/lists_opac/basket_checkbox.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/lists_opac/call_number.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/lists_opac/home_list_link.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/lists_opac/list_notes.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/lists_opac/list_options.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/lists_opac/list_preferences.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/lists_opac/move_selected_to_list.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/lists_opac/my_account_list_options.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/lists_opac/search_results_list_button.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/advanced_search_ex.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/advanced_search_filters.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/back_to_results.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/branch_search.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/did_you_mean_no_results.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/email_records_screen.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/highlighting.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/more_details_record.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/permalink.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/placing_holds.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/print_email_records.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/print_records_screen.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/record_details.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/search_facets.JPG [new file with mode: 0644]
docs/modules/opac/assets/images/opac/search_results.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac/search_results_quantity.JPG [new file with mode: 0644]
docs/modules/opac/assets/images/opac/viewing_record.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac_basket/add_to_basket.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac_basket/basket_icon.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac_basket/drop_down_actions.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac_basket/select_checkboxes.jpg [new file with mode: 0644]
docs/modules/opac/assets/images/opac_basket/view_basket.jpg [new file with mode: 0644]
docs/modules/opac/nav.adoc
docs/modules/opac/pages/baskets.adoc [new file with mode: 0644]
docs/modules/opac/pages/batch_actions_from_search.adoc [deleted file]
docs/modules/opac/pages/my_lists.adoc
docs/modules/opac/pages/using_the_public_access_catalog.adoc
docs/modules/reports/assets/images/simple_reports/sr_display_fields.png [new file with mode: 0644]
docs/modules/reports/assets/images/simple_reports/sr_field_display_order.png [new file with mode: 0644]
docs/modules/reports/assets/images/simple_reports/sr_filter_fields.png [new file with mode: 0644]
docs/modules/reports/assets/images/simple_reports/sr_filters.png [new file with mode: 0644]
docs/modules/reports/assets/images/simple_reports/sr_my_outputs.png [new file with mode: 0644]
docs/modules/reports/assets/images/simple_reports/sr_my_reports.png [new file with mode: 0644]
docs/modules/reports/assets/images/simple_reports/sr_new_report.png [new file with mode: 0644]
docs/modules/reports/assets/images/simple_reports/sr_output_options.png [new file with mode: 0644]
docs/modules/reports/assets/images/simple_reports/sr_output_order.png [new file with mode: 0644]
docs/modules/reports/assets/images/simple_reports/sr_relative_date.png [new file with mode: 0644]
docs/modules/reports/assets/images/simple_reports/sr_select_display_fields.png [new file with mode: 0644]
docs/modules/reports/assets/images/simple_reports/sr_sort_order.png [new file with mode: 0644]
docs/modules/reports/nav.adoc
docs/modules/reports/pages/introduction.adoc
docs/modules/reports/pages/simple_reports.adoc [new file with mode: 0644]
docs/modules/shared/pages/how_to_contribute_docs.adoc
docs/site.yml

index 23d7d99..25aff3c 100644 (file)
@@ -15,15 +15,13 @@ config.status
 config.sub
 configure
 depcomp
-docs/RELEASE_NOTES_2_2.html
-docs/root.html
-docs/root.pdf
 install-sh
 libtool
 ltmain.sh
 Makefile
 Makefile.in
 missing
+node-v*-linux-x64.tar.?z
 Open-ILS/examples/Makefile
 Open-ILS/src/apachemods/.libs/
 Open-ILS/src/apachemods/Makefile
@@ -58,10 +56,6 @@ Open-ILS/src/perlmods/Makefile
 Open-ILS/src/perlmods/Makefile.in
 Open-ILS/src/perlmods/MYMETA.json
 Open-ILS/src/perlmods/MYMETA.yml
-Open-ILS/src/python/build/
-Open-ILS/src/python/Evergreen.egg-info/
-Open-ILS/src/python/Makefile
-Open-ILS/src/python/Makefile.in
 Open-ILS/src/support-scripts/action_trigger_aggregator.pl
 Open-ILS/src/support-scripts/action_trigger_runner.pl
 Open-ILS/src/support-scripts/authority_authority_linker.pl
@@ -329,8 +323,6 @@ Open-ILS/xul/staff_client/server/locale/sv-SE/
 Open-ILS/xul/staff_client/server/locale/tr-TR/
 Open-ILS/xul/staff_client/evergreen_staff_client.tar.bz2
 Open-ILS/xul/staff_client/xulrunner/
-README.html
-HACKING.html
 Open-ILS/examples/apache/eg.conf
 Open-ILS/examples/apache/eg_startup
 Open-ILS/examples/apache/eg_vhost.conf
@@ -346,7 +338,13 @@ Open-ILS/xul/staff_client/external/libmar/stamp-h1
 Open-ILS/xul/staff_client/external/libmar/tool/.deps/
 Open-ILS/src/c-apps/tests/.libs/
 Open-ILS/src/c-apps/tests/check_idl
+Open-ILS/src/c-apps/tests/check_idl.log
+Open-ILS/src/c-apps/tests/check_idl.trs
 Open-ILS/src/c-apps/tests/check_util
+Open-ILS/src/c-apps/tests/check_util.log
+Open-ILS/src/c-apps/tests/check_util.trs
+Open-ILS/src/c-apps/tests/test-suite.log
+Open-ILS/src/edi_translator/data/test_output
 Open-ILS/xul/staff_client/branding/
 Open-ILS/xul/staff_client/evergreen.xpi.md5
 Open-ILS/xul/staff_client/external/libmar/tool/mar
@@ -362,3 +360,4 @@ Open-ILS/web/js/ui/default/staff/node_modules/
 Open-ILS/web/js/ui/default/staff/bower_components/
 Open-ILS/web/js/ui/default/common/build/
 Open-ILS/web/eg2/
+Open-ILS/web/opac/deps/node_modules/
index a6d07e8..aed61b6 100644 (file)
@@ -88,6 +88,15 @@ OSRFTranslatorConfig @sysconfdir@/opensrf_core.xml
     Require all granted 
 </Location>
 
+# Uncomment this section to enable the OAI2 provider service.
+#<Location /opac/extras/oai>
+#    SetHandler perl-script
+#    PerlHandler OpenILS::WWW::SuperCat::OAI
+#    Options +ExecCGI
+#    PerlSendHeader On
+#    Require all granted
+#</Location>
+
 # ----------------------------------------------------------------------------------
 # Replace broken cover images with a transparent GIF by default
 # ----------------------------------------------------------------------------------
@@ -618,6 +627,12 @@ RewriteRule ^/conify/([a-z]{2}-[A-Z]{2})/global/(.*)$ /conify/global/$2 [E=local
     Options +ExecCGI
     Require all granted 
 </Location>
+<Location /jacket-upload>
+    SetHandler perl-script
+    PerlHandler OpenILS::WWW::Vandelay::spool_jacket
+    Options +ExecCGI
+    Require all granted 
+</Location>
 
 # OpenURL 0.1 searching based on OpenSearch
 RewriteMap openurl prg:@bindir@/openurl_map.pl
index 6d8199f..d036e9d 100644 (file)
@@ -71,9 +71,31 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 
 -->
 
-<IDL xmlns="http://opensrf.org/spec/IDL/base/v1" xmlns:idl="http://opensrf.org/spec/IDL/base/v1" xmlns:oils_persist="http://open-ils.org/spec/opensrf/IDL/persistence/v1" xmlns:oils_obj="http://open-ils.org/spec/opensrf/IDL/objects/v1" xmlns:reporter="http://open-ils.org/spec/opensrf/IDL/reporter/v1" xmlns:permacrud="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+<IDL xmlns="http://opensrf.org/spec/IDL/base/v1" xmlns:idl="http://opensrf.org/spec/IDL/base/v1" xmlns:oils_persist="http://open-ils.org/spec/opensrf/IDL/persistence/v1" xmlns:oils_obj="http://open-ils.org/spec/opensrf/IDL/objects/v1" xmlns:reporter="http://open-ils.org/spec/opensrf/IDL/reporter/v1" xmlns:sr="http://open-ils.org/spec/opensrf/IDL/simple-reporter/v1" xmlns:permacrud="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
 
        <!-- Virtual classes -->
+
+       <class id="oaib" controller="open-ils.cstore" oils_obj:fieldmapper="oai::biblio"
+                  oils_persist:readonly="true" reporter:core="false" reporter:label="OAI2 record list"
+                  oils_persist:tablename="oai.biblio">
+               <fields oils_persist:primary="rec_id">
+                       <field reporter:label="Record ID\OAI identifier postfix" name="rec_id" reporter:datatype="id"/>
+                       <field reporter:label="Last edit date\OAI datestamp" name="datestamp" reporter:datatype="timestamp"/>
+                       <field reporter:label="Is Deleted?" name="deleted" reporter:datatype="bool"/>
+                       <field reporter:label="Setspec" name="set_spec" oils_persist:virtual="true"/>
+               </fields>
+       </class>
+       <class id="oaia" controller="open-ils.cstore" oils_obj:fieldmapper="oai::authority"
+                  oils_persist:readonly="true" reporter:core="false" reporter:label="OAI2 record list"
+                  oils_persist:tablename="oai.authority">
+               <fields oils_persist:primary="rec_id">
+                       <field reporter:label="Record ID\OAI identifier postfix" name="rec_id" reporter:datatype="id"/>
+                       <field reporter:label="Last edit date\OAI datestamp" name="datestamp" reporter:datatype="timestamp"/>
+                       <field reporter:label="Is Deleted?" name="deleted" reporter:datatype="bool"/>
+                       <field reporter:label="Setspec" name="set_spec" oils_persist:virtual="true"/>
+               </fields>
+       </class>
+
        <class id="mups" controller="open-ils.cstore" oils_obj:fieldmapper="money::user_payment_summary" oils_persist:virtual="true" reporter:label="User Payment Summary">
                <fields>
                        <field name="usr" oils_persist:virtual="true" />
@@ -824,8 +846,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                                         parent table.
                        -->
                        <field reporter:label="Source Queue" name="queue" reporter:datatype="int"/>
-                       <field reporter:label="Create Time" name="create_time" reporter:datatype="timestsamp"/>
-                       <field reporter:label="Update Time" name="update_time" reporter:datatype="timestsamp"/>
+                       <field reporter:label="Create Time" name="create_time" reporter:datatype="timestamp"/>
+                       <field reporter:label="Update Time" name="update_time" reporter:datatype="timestamp"/>
                        <field reporter:label="State" name="state" reporter:datatype="text"/>
                        <field reporter:label="Action Type" name="action_type" reporter:datatype="text"/>
                        <field reporter:label="Total Actions" name="total_actions" reporter:datatype="int"/>
@@ -970,7 +992,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
         </permacrud>
        </class>
 
-       <class id="cmrcsubfld" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="config::marc_subfield" oils_persist:tablename="config.marc_subfield" reporter:label="MARC Subfields" oils_persist:subfield_safe="true">
+       <class id="cmrcsubfld" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="config::marc_subfield" oils_persist:tablename="config.marc_subfield" reporter:label="MARC Subfields" oils_persist:field_safe="true">
                <fields oils_persist:primary="id" oils_persist:sequence="config.marc_subfield_id_seq">
                        <field reporter:label="ID"   name="id" reporter:datatype="id"/>
                        <field reporter:label="MARC Format" name="marc_format" reporter:datatype="link" oils_obj:required="true"/>
@@ -1311,6 +1333,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                        <field reporter:label="Is Error" name="is_error" reporter:datatype="bool"/>
                        <field reporter:label="Events" name="events" oils_persist:virtual="true"  reporter:datatype="link"/>
                        <field reporter:label="Error Events" name="error_events" oils_persist:virtual="true"  reporter:datatype="link"/>
+            <field reporter:label="Output Locale" name="locale" reporter:datatype="text"/>
                </fields>
                <links>
             <link field="events" reltype="has_many" key="template_output" map="" class="atev"/>
@@ -1486,6 +1509,39 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                </permacrud>
        </class>
 
+    <class id="atevalt" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="action_trigger::alternate_template" oils_persist:tablename="action_trigger.alternate_template" reporter:label="Alternate Action Trigger Templates">
+        <fields oils_persist:primary="id" oils_persist:sequence="action_trigger.alternate_template_id_seq">
+            <field reporter:label="Alternate Template ID" name="id" reporter:datatype="id"/>
+            <field reporter:label="Enabled" name="active" reporter:datatype="bool"/>
+            <field reporter:label="Template" name="template"  reporter:datatype="text"/>
+            <field reporter:label="Template Locale" name="locale" reporter:datatype="link" oils_obj:required="true"/>
+            <field reporter:label="Message Title" name="message_title" reporter:datatype="text"/>
+            <field reporter:label="Message Template" name="message_template" reporter:datatype="text"/>
+            <field reporter:label="Event Definition" name="event_def" reporter:datatype="link"/>
+        </fields>
+        <links>
+            <link field="event_def" reltype="has_a" key="id" map="" class="atevdef"/>
+            <link field="locale" relteype="has_a" key="code" map="" class="i18n_l"/>
+         </links>
+         <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+             <actions>
+                 <create permission="ADMIN_TRIGGER_EVENT_DEF CREATE_TRIGGER_EVENT_DEF">
+                     <context link="event_def" field="owner"/>
+                 </create>
+                 <retrieve permission="ADMIN_TRIGGER_EVENT_DEF VIEW_TRIGGER_EVENT_DEF">
+                     <context link="event_def" field="owner"/>
+                 </retrieve>
+                 <update permission="ADMIN_TRIGGER_EVENT_DEF UPDATE_TRIGGER_EVENT_DEF">
+                     <context link="event_def" field="owner"/>
+                 </update>
+                 <delete permission="ADMIN_TRIGGER_EVENT_DEF DELETE_TRIGGER_EVENT_DEF">
+                     <context link="event_def" field="owner"/>
+                 </delete>
+            </actions>
+        </permacrud>
+    </class>
+
+
        <class id="atevdefg" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="action_trigger::event_def_group" oils_persist:tablename="action_trigger.event_def_group" reporter:label="Trigger Event Definition Group" oils_persist:restrict_primary="100">
                <fields oils_persist:primary="id" oils_persist:sequence="action_trigger.event_def_group_id_seq">
                        <field reporter:label="Group ID" name="id" reporter:datatype="id"/>
@@ -2698,7 +2754,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
        </class>
        <class id="ccbi" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="container::copy_bucket_item" oils_persist:tablename="container.copy_bucket_item" reporter:label="Copy Bucket Item">
                <fields oils_persist:primary="id" oils_persist:sequence="container.copy_bucket_item_id_seq">
-                       <field name="bucket" />
+                       <field name="bucket" reporter:datatype="link"/>
                        <field name="id" reporter:datatype="id" />
                        <field name="target_copy" reporter:datatype="link"/>
                        <field name="create_time" reporter:datatype="timestamp" />
@@ -2713,7 +2769,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
                                <retrieve permission="ADMIN_COPY_BUCKET">
-                    <context link="bucket" owning_lib="owning_lib"/>
+                    <context link="bucket" field="owning_lib"/>
                 </retrieve>
             </actions>
         </permacrud>
@@ -4096,6 +4152,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                        <field reporter:label="Reservations" name="reservations" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field reporter:label="User Activity Entries" name="usr_activity" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field reporter:label="User/Working Location Map" name="usr_work_ou_map" oils_persist:virtual="true" reporter:datatype="link"/>
+            <field reporter:label="Patron Preferred Language" name="locale" reporter:datatype="link"/>
                </fields>
                <links>
                        <link field="demographic" reltype="might_have" key="id" map="" class="rud"/>
@@ -4130,6 +4187,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                        <link field="reservations" reltype="has_many" key="usr" map="" class="bresv"/>
                        <link field="usr_activity" reltype="has_many" key="usr" map="" class="auact"/>
                        <link field="usr_work_ou_map" reltype="has_many" key="usr" map="" class="puwoum"/>
+            <link field="locale" reltype="has_a" key="code" map="" class="i18n_l"/>
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
@@ -4192,22 +4250,13 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
+                               <create permission="ADMIN_TOOLBAR" context_field="org" />
                                <retrieve permission="ADMIN_TOOLBAR STAFF_LOGIN" context_field="org">
                                        <context link="usr" field="home_ou" />
                                        <context link="ws" field="owning_lib" />
                                </retrieve>
-                               <create permission="ADMIN_TOOLBAR" context_field="org">
-                                       <context link="usr" field="home_ou" />
-                                       <context link="ws" field="owning_lib" />
-                               </create>
-                               <update permission="ADMIN_TOOLBAR" context_field="org">
-                                       <context link="usr" field="home_ou" />
-                                       <context link="ws" field="owning_lib" />
-                               </update>
-                               <delete permission="ADMIN_TOOLBAR" context_field="org">
-                                       <context link="usr" field="home_ou" />
-                                       <context link="ws" field="owning_lib" />
-                               </delete>
+                               <update permission="ADMIN_TOOLBAR" context_field="org"/>
+                               <delete permission="ADMIN_TOOLBAR" context_field="org"/>
                        </actions>
                </permacrud>
        </class>
@@ -4345,7 +4394,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                <links>
                        <link field="master_record" reltype="has_a" key="id" map="" class="bre"/>
                        <link field="source_records" reltype="has_many" key="metarecord" map="source" class="mmrsm"/>
-                       <link field="source_maps" reltype="has_many" key="metarecord" class="mmrsm"/>
+                       <link field="source_maps" reltype="has_many" key="metarecord" map="" class="mmrsm"/>
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
@@ -4525,8 +4574,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
-                               <retrieve/>
                                <create permission="CREATE_METABIB_FIELD" global_required="true"/>
+                               <retrieve/>
                                <update permission="UPDATE_METABIB_FIELD" global_required="true"/>
                                <delete permission="DELETE_METABIB_FIELD" global_required="true"/>
                        </actions>
@@ -4690,7 +4739,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
                        <link field="payment" reltype="might_have" key="id" map="" class="mp"/>
                        <link field="accepting_usr" reltype="has_a" key="id" map="" class="au"/>
                        <link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
-                       <link field="billing" reltype="might_have" key="id" class="mb"/>
+                       <link field="billing" reltype="might_have" key="id" map="" class="mb"/>
                </links>
        </class>
        <class id="mrd" controller="open-ils.cstore" oils_obj:fieldmapper="metabib::record_descriptor" oils_persist:tablename="metabib.rec_descriptor" reporter:label="Basic Record Descriptor">
@@ -5657,7 +5706,7 @@ SELECT  usr,
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
                                <retrieve permission="ADMIN_CALLNUMBER_BUCKET">
-                    <context link="bucket" owning_lib="owning_lib"/>
+                    <context link="bucket" field="owning_lib"/>
                 </retrieve>
             </actions>
         </permacrud>
@@ -5691,10 +5740,10 @@ SELECT  usr,
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
-                               <create permission="CREATE_BIB_BUCKET ADMIN_BIB_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <retrieve permission="CREATE_BIB_BUCKET ADMIN_BIB_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <update permission="CREATE_BIB_BUCKET ADMIN_BIB_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <delete permission="CREATE_BIB_BUCKET ADMIN_BIB_BUCKET" context="owning_lib" owning_user="owner"/>
+                               <create permission="CREATE_BIB_BUCKET ADMIN_BIB_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <retrieve permission="CREATE_BIB_BUCKET ADMIN_BIB_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <update permission="CREATE_BIB_BUCKET ADMIN_BIB_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <delete permission="CREATE_BIB_BUCKET ADMIN_BIB_BUCKET" context_field="owning_lib" owning_user="owner"/>
                        </actions>
                </permacrud>
        </class>
@@ -7310,10 +7359,10 @@ SELECT  usr,
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
-                               <create permission="CREATE_CALLNUMBER_BUCKET ADMIN_CALLNUMBER_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <retrieve permission="CREATE_CALLNUMBER_BUCKET ADMIN_CALLNUMBER_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <update permission="CREATE_CALLNUMBER_BUCKET ADMIN_CALLNUMBER_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <delete permission="CREATE_CALLNUMBER_BUCKET ADMIN_CALLNUMBER_BUCKET" context="owning_lib" owning_user="owner"/>
+                               <create permission="CREATE_CALLNUMBER_BUCKET ADMIN_CALLNUMBER_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <retrieve permission="CREATE_CALLNUMBER_BUCKET ADMIN_CALLNUMBER_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <update permission="CREATE_CALLNUMBER_BUCKET ADMIN_CALLNUMBER_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <delete permission="CREATE_CALLNUMBER_BUCKET ADMIN_CALLNUMBER_BUCKET" context_field="owning_lib" owning_user="owner"/>
                        </actions>
                </permacrud>
        </class>
@@ -7445,10 +7494,10 @@ SELECT  usr,
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
-                               <create permission="CREATE_USER_BUCKET ADMIN_USER_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <retrieve permission="CREATE_USER_BUCKET ADMIN_USER_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <update permission="CREATE_USER_BUCKET ADMIN_USER_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <delete permission="CREATE_USER_BUCKET ADMIN_USER_BUCKET" context="owning_lib" owning_user="owner"/>
+                               <create permission="CREATE_USER_BUCKET ADMIN_USER_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <retrieve permission="CREATE_USER_BUCKET ADMIN_USER_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <update permission="CREATE_USER_BUCKET ADMIN_USER_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <delete permission="CREATE_USER_BUCKET ADMIN_USER_BUCKET" context_field="owning_lib" owning_user="owner"/>
                        </actions>
                </permacrud>
        </class>
@@ -7467,7 +7516,7 @@ SELECT  usr,
                        <field reporter:label="Accepting Staff Member" name="accepting_usr" reporter:datatype="link"/>
                        <field reporter:label="Amount" name="amount" reporter:datatype="money" />
                        <field reporter:label="Amount Collected" name="amount_collected" reporter:datatype="money" />
-                       <field reporter:label="Pyament ID" name="id" reporter:datatype="id" />
+                       <field reporter:label="Payment ID" name="id" reporter:datatype="id" />
                        <field reporter:label="Payment Note" name="note"  reporter:datatype="text"/>
                        <field reporter:label="Payment Timestamp" name="payment_ts" reporter:datatype="timestamp"/>
                        <field reporter:label="Transaction" name="xact" reporter:datatype="link"/>
@@ -7722,7 +7771,7 @@ SELECT  usr,
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
                                <retrieve permission="ADMIN_USER_BUCKET">
-                    <context link="bucket" owning_lib="owning_lib"/>
+                    <context link="bucket" field="owning_lib"/>
                 </retrieve>
             </actions>
         </permacrud>
@@ -8029,6 +8078,7 @@ SELECT  usr,
                        <field reporter:label="Peer Records" name="peer_records" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field reporter:label="Last Captured Hold" name="last_captured_hold" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field reporter:label="Latest Inventory" name="latest_inventory" oils_persist:virtual="true" reporter:datatype="link"/>
+                       <field reporter:label="Copy Inventory" name="copy_inventory" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field reporter:label="Has Holds" name="holds_count" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field reporter:label="Copy Tags" name="tags" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field reporter:label="Copy Alerts" name="copy_alerts" oils_persist:virtual="true" reporter:datatype="link"/>
@@ -8056,6 +8106,7 @@ SELECT  usr,
                        <link field="peer_records" reltype="has_many" key="target_copy" map="peer_record" class="bpbcm"/>
                        <link field="last_captured_hold" reltype="has_a" key="current_copy" map="" class="alhr"/>
                        <link field="latest_inventory" reltype="might_have" key="copy" map="" class="alci"/>
+                       <link field="copy_inventory" reltype="might_have" key="copy" map="" class="aci"/>
                        <link field="floating" reltype="has_a" key="id" map="" class="cfg"/>
                        <link field="holds_count" reltype="might_have" key="id" map="" class="hasholdscount"/>
                        <link field="tags" reltype="has_many" key="copy" map="" class="acptcm"/>
@@ -8078,8 +8129,29 @@ SELECT  usr,
         </permacrud>
        </class>
 
-       <class id="alci" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="asset::latest_inventory" oils_persist:tablename="asset.latest_inventory" reporter:core="true" reporter:label="Latest Inventory">
-               <fields oils_persist:primary="id" oils_persist:sequence="asset.latest_inventory_id_seq">
+       <class id="aci" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="asset::copy_inventory" oils_persist:tablename="asset.copy_inventory" reporter:core="true" reporter:label="Copy Inventory">
+               <fields oils_persist:primary="id" oils_persist:sequence="asset.copy_inventory_id_seq">
+                       <field reporter:label="Copy Inventory ID" name="id" reporter:datatype="id"/>
+                       <field reporter:label="Copy Inventory Date" name="inventory_date" reporter:datatype="timestamp"/>
+                       <field reporter:label="Copy Inventory Workstation" name="inventory_workstation" reporter:datatype="link"/>
+                       <field reporter:label="Copy" name="copy" reporter:datatype="link"/>
+               </fields>
+               <links>
+                       <link field="inventory_workstation" reltype="has_a" key="id" map="" class="aws"/>
+                       <link field="copy" reltype="has_a" key="id" map="" class="acp"/>
+               </links>
+               <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+                       <actions>
+                <create permission="STAFF_LOGIN"/>
+                <retrieve/>
+                <update permission="STAFF_LOGIN"/>
+                <delete permission="STAFF_LOGIN"/>
+                       </actions>
+               </permacrud>
+       </class>
+
+       <class id="alci" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="asset::latest_inventory" oils_persist:tablename="asset.latest_inventory" reporter:core="true" reporter:label="Latest Inventory" oils_persist:readonly="true">
+               <fields oils_persist:primary="id" oils_persist:sequence="asset.copy_inventory_id_seq">
             <field reporter:label="Latest Inventory ID" name="id" reporter:datatype="id"/>
                        <field reporter:label="Latest Inventory Date" name="inventory_date" reporter:datatype="timestamp"/>
                        <field reporter:label="Latest Inventory Workstation" name="inventory_workstation" reporter:datatype="link"/>
@@ -8091,10 +8163,7 @@ SELECT  usr,
                </links>
         <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
             <actions>
-                               <create/>
                                <retrieve/>
-                               <update/>
-                               <delete/>
             </actions>
         </permacrud>
        </class>
@@ -8500,10 +8569,10 @@ SELECT  usr,
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
-                               <create permission="CREATE_COPY_BUCKET ADMIN_COPY_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <retrieve permission="CREATE_COPY_BUCKET ADMIN_COPY_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <update permission="CREATE_COPY_BUCKET ADMIN_COPY_BUCKET" context="owning_lib" owning_user="owner"/>
-                               <delete permission="CREATE_COPY_BUCKET ADMIN_COPY_BUCKET" context="owning_lib" owning_user="owner"/>
+                               <create permission="CREATE_COPY_BUCKET ADMIN_COPY_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <retrieve permission="CREATE_COPY_BUCKET ADMIN_COPY_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <update permission="CREATE_COPY_BUCKET ADMIN_COPY_BUCKET" context_field="owning_lib" owning_user="owner"/>
+                               <delete permission="CREATE_COPY_BUCKET ADMIN_COPY_BUCKET" context_field="owning_lib" owning_user="owner"/>
                        </actions>
                </permacrud>
        </class>
@@ -8614,7 +8683,7 @@ SELECT  usr,
                        <link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
                        <link field="accepting_usr" reltype="has_a" key="id" map="" class="au"/>
                        <link field="cash_drawer" reltype="has_a" key="id" map="" class="aws"/>
-                       <link field="billing" reltype="has_a" key="id" class="mab"/>
+                       <link field="billing" reltype="has_a" key="id" map="" class="mab"/>
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
@@ -8627,7 +8696,7 @@ SELECT  usr,
        <class id="mallp" controller="open-ils.cstore" 
                oils_obj:fieldmapper="money::all_payments" 
                oils_persist:tablename="money.all_payments" 
-               oils_persist="readonly" reporter:core="true"
+               oils_persist:readonly="true" reporter:core="true"
                reporter:label="Payments: All">
                <fields oils_persist:primary="id" oils_persist:sequence="money.payment_id_seq">
                        <field reporter:label="Amount" name="amount" reporter:datatype="money" />
@@ -8645,7 +8714,7 @@ SELECT  usr,
                        <link field="xact" reltype="has_a" key="id" map="" class="mbt"/>
                        <link field="accepting_usr" reltype="has_a" key="id" map="" class="au"/>
                        <link field="cash_drawer" reltype="has_a" key="id" map="" class="aws"/>
-                       <link field="billing" reltype="has_a" key="id" class="mallb"/>
+                       <link field="billing" reltype="has_a" key="id" map="" class="mallb"/>
                </links>
        </class>
 
@@ -8757,7 +8826,7 @@ SELECT  usr,
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
                                <retrieve permission="ADMIN_COPY_BUCKET">
-                    <context link="bucket" owning_lib="owning_lib"/>
+                    <context link="bucket" field="owning_lib"/>
                 </retrieve>
             </actions>
         </permacrud>
@@ -8960,7 +9029,7 @@ SELECT  usr,
        <class id="mallb" controller="open-ils.cstore" 
                oils_obj:fieldmapper="money::all_billings" 
                oils_persist:tablename="money.all_billings" 
-               oils_persist="readonly" reporter:label="All Billing Line Items">
+               oils_persist:readonly="true" reporter:label="All Billing Line Items">
                <fields oils_persist:primary="id" oils_persist:sequence="">
                        <field reporter:label="Amount" name="amount" reporter:datatype="money" />
                        <field reporter:label="Create Date" name="create_date" reporter:datatype="timestamp"/>
@@ -9015,11 +9084,11 @@ SELECT  usr,
        </class>
        <class id="fdoc" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="config::idl_field_doc" oils_persist:tablename="config.idl_field_doc" oils_persist:field_safe="true" reporter:label="IDL Field Doc">
                <fields oils_persist:primary="id" oils_persist:sequence="config.idl_field_doc_id_seq">
-                       <field name="id" reporter:datatype="id" />
-                       <field name="fm_class" reporter:datatype="text"/>
-                       <field name="field" reporter:datatype="text"/>
-                       <field name="owner" reporter:datatype="org_unit"/>
-                       <field name="string" reporter:datatype="text" oils_persist:i18n="true"/>
+                       <field name="id"       reporter:label="ID" reporter:datatype="id" />
+                       <field name="fm_class" reporter:label="Class" reporter:datatype="text" oils_obj:required="true"/>
+                       <field name="field"    reporter:label="Field" reporter:datatype="text" oils_obj:required="true"/>
+                       <field name="owner"    reporter:label="Field Documentation Owner" reporter:datatype="org_unit" oils_obj:required="true"/>
+                       <field name="string"   reporter:label="Field Documentation" reporter:datatype="text" oils_persist:i18n="true" oils_obj:required="true"/>
                </fields>
                <links>
                        <link field="owner" reltype="has_a" key="id" map="" class="aou"/>
@@ -9143,7 +9212,7 @@ SELECT  usr,
         </permacrud>
        </class>
 
-       <class id="aurs" controller="open-ils.cstore open-ils.reporter-store open-ils.pcrud" oils_obj:fieldmapper="acq::user_request_status" reporter:label="User Purchase Request with Status" oils_persist="readonly">
+       <class id="aurs" controller="open-ils.cstore open-ils.reporter-store open-ils.pcrud" oils_obj:fieldmapper="acq::user_request_status" reporter:label="User Purchase Request with Status" oils_persist:readonly="true">
         <oils_persist:source_definition><![CDATA[
             SELECT r.*, CASE
                         WHEN r.cancel_reason IS NOT NULL THEN 7 -- Canceled
@@ -10755,7 +10824,7 @@ SELECT  usr,
        </class>
 
 
-       <class id="rof" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::output_folder" oils_persist:tablename="reporter.output_folder" reporter:label="Output Folder">
+       <class id="rof" controller="open-ils.reporter-store open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="reporter::output_folder" oils_persist:tablename="reporter.output_folder" reporter:label="Output Folder">
                <fields oils_persist:primary="id" oils_persist:sequence="reporter.output_folder_id_seq">
                        <field name="id" reporter:datatype="id" />
                        <field name="parent" reporter:datatype="link"/>
@@ -10764,6 +10833,7 @@ SELECT  usr,
                        <field name="name" reporter:datatype="text"/>
                        <field name="shared" reporter:datatype="bool"/>
                        <field name="share_with" reporter:datatype="link"/>
+                       <field name="simple_reporter" reporter:datatype="bool"/>
                        <field name="children" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field name="outputs" oils_persist:virtual="true" reporter:datatype="link"/>
                </fields>
@@ -10774,8 +10844,24 @@ SELECT  usr,
                        <link field="share_with" reltype="has_a" key="id" map="" class="aou"/>
                        <link field="outputs" reltype="has_many" key="folder" map="" class="rs"/>
                </links>
+        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+            <actions>
+                <create   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </create>
+                <retrieve permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </retrieve>
+                <update   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </update>
+                <delete   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </delete>
+            </actions>
+        </permacrud>
        </class>
-       <class id="rtf" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::template_folder" oils_persist:tablename="reporter.template_folder" reporter:label="Template Folder">
+       <class id="rtf" controller="open-ils.reporter-store open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="reporter::template_folder" oils_persist:tablename="reporter.template_folder" reporter:label="Template Folder">
                <fields oils_persist:primary="id" oils_persist:sequence="reporter.template_folder_id_seq">
                        <field name="id" reporter:datatype="id" />
                        <field name="parent" reporter:datatype="link"/>
@@ -10784,6 +10870,7 @@ SELECT  usr,
                        <field name="name" reporter:datatype="text"/>
                        <field name="shared" reporter:datatype="bool"/>
                        <field name="share_with" reporter:datatype="link"/>
+                       <field name="simple_reporter" reporter:datatype="bool"/>
                        <field name="children" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field name="templates" oils_persist:virtual="true" reporter:datatype="link"/>
                </fields>
@@ -10794,8 +10881,24 @@ SELECT  usr,
                        <link field="share_with" reltype="has_a" key="id" map="" class="aou"/>
                        <link field="templates" reltype="has_many" key="folder" map="" class="rt"/>
                </links>
+        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+            <actions>
+                <create   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </create>
+                <retrieve permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </retrieve>
+                <update   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </update>
+                <delete   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </delete>
+            </actions>
+        </permacrud>
        </class>
-       <class id="rrf" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::report_folder" oils_persist:tablename="reporter.report_folder" reporter:label="Report Folder">
+       <class id="rrf" controller="open-ils.reporter-store open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="reporter::report_folder" oils_persist:tablename="reporter.report_folder" reporter:label="Report Folder">
                <fields oils_persist:primary="id" oils_persist:sequence="reporter.report_folder_id_seq">
                        <field name="id" reporter:datatype="id" />
                        <field name="parent" reporter:datatype="link"/>
@@ -10804,6 +10907,7 @@ SELECT  usr,
                        <field name="name" reporter:datatype="text"/>
                        <field name="shared" reporter:datatype="bool"/>
                        <field name="share_with" reporter:datatype="link"/>
+                       <field name="simple_reporter" reporter:datatype="bool"/>
                        <field name="children" oils_persist:virtual="true" reporter:datatype="link"/>
                        <field name="reports" oils_persist:virtual="true" reporter:datatype="link"/>
                </fields>
@@ -10814,6 +10918,22 @@ SELECT  usr,
                        <link field="share_with" reltype="has_a" key="id" map="" class="aou"/>
                        <link field="reports" reltype="has_many" key="folder" map="" class="rr"/>
                </links>
+        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+            <actions>
+                <create   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </create>
+                <retrieve permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </retrieve>
+                <update   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </update>
+                <delete   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </delete>
+            </actions>
+        </permacrud>
        </class>
        <class id="rt" controller="open-ils.reporter-store open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="reporter::template" oils_persist:tablename="reporter.template" reporter:label="Template">
                <fields oils_persist:primary="id" oils_persist:sequence="reporter.template_id_seq">
@@ -10833,14 +10953,22 @@ SELECT  usr,
                </links>
         <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
             <actions>
-                <create   permission="RUN_REPORTS" owning_user="owner" global_required="true"/>
-                <retrieve permission="RUN_REPORTS" owning_user="owner" global_required="true"/>
-                <update   permission="RUN_REPORTS" owning_user="owner" global_required="true"/>
-                <delete   permission="RUN_REPORTS" owning_user="owner" global_required="true"/>
+                <create   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </create>
+                <retrieve permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </retrieve>
+                <update   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </update>
+                <delete   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </delete>
             </actions>
         </permacrud>
        </class>
-       <class id="rr" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::report" oils_persist:tablename="reporter.report" reporter:label="Report">
+       <class id="rr" controller="open-ils.reporter-store open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="reporter::report" oils_persist:tablename="reporter.report" reporter:label="Report">
                <fields oils_persist:primary="id" oils_persist:sequence="reporter.report_id_seq">
                        <field name="id" reporter:datatype="id" />
                        <field name="owner" reporter:datatype="link"/>
@@ -10860,32 +10988,104 @@ SELECT  usr,
                        <link field="folder" reltype="has_a" key="id" map="" class="rrf"/>
                        <link field="runs" reltype="has_many" key="report" map="" class="rs"/>
                </links>
+        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+            <actions>
+                <create   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </create>
+                <retrieve permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </retrieve>
+                <update   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </update>
+                <delete   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="owner" field="home_ou"/>
+                </delete>
+            </actions>
+        </permacrud>
        </class>
-       <class id="rs" controller="open-ils.reporter-store" oils_obj:fieldmapper="reporter::schedule" oils_persist:tablename="reporter.schedule" reporter:label="Schedule">
+       <class id="rs" controller="open-ils.reporter-store open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="reporter::schedule" oils_persist:tablename="reporter.schedule" reporter:label="Schedule">
                <fields oils_persist:primary="id" oils_persist:sequence="reporter.schedule_id_seq">
-                       <field name="id" reporter:datatype="id" />
-                       <field name="runner" reporter:datatype="link"/>
-                       <field name="start_time" reporter:datatype="timestamp"/>
-                       <field name="complete_time" reporter:datatype="timestamp"/>
-                       <field name="run_time" reporter:datatype="timestamp"/>
-                       <field name="email" reporter:datatype="text"/>
-                       <field name="excel_format" reporter:datatype="bool"/>
-                       <field name="csv_format" reporter:datatype="bool"/>
-                       <field name="html_format" reporter:datatype="bool"/>
-                       <field name="error_code" reporter:datatype="int"/>
-                       <field name="error_text" reporter:datatype="text"/>
-                       <field name="report" reporter:datatype="link"/>
-                       <field name="folder" reporter:datatype="link"/>
-                       <field name="chart_pie" reporter:datatype="bool"/>
-                       <field name="chart_bar" reporter:datatype="bool"/>
-                       <field name="chart_line" reporter:datatype="bool"/>
+                       <field reporter:label="Id" name="id" reporter:datatype="id" />
+                       <field reporter:label="Runner" name="runner" reporter:datatype="link"/>
+                       <field reporter:label="Start Time" name="start_time" reporter:datatype="timestamp"/>
+                       <field reporter:label="Finish Time" name="complete_time" reporter:datatype="timestamp"/>
+                       <field reporter:label="Run Time" name="run_time" reporter:datatype="timestamp"/>
+                       <field reporter:label="Email" name="email" reporter:datatype="text"/>
+                       <field reporter:label="Excel" name="excel_format" reporter:datatype="bool"/>
+                       <field reporter:label="CSV" name="csv_format" reporter:datatype="bool"/>
+                       <field reporter:label="HTML" name="html_format" reporter:datatype="bool"/>
+                       <field reporter:label="Error Code" name="error_code" reporter:datatype="int"/>
+                       <field reporter:label="Error Text" name="error_text" reporter:datatype="text"/>
+                       <field reporter:label="Report" name="report" reporter:datatype="link"/>
+                       <field reporter:label="Folder" name="folder" reporter:datatype="link"/>
+                       <field reporter:label="Pie Chart" name="chart_pie" reporter:datatype="bool"/>
+                       <field reporter:label="Bar Chart" name="chart_bar" reporter:datatype="bool"/>
+                       <field reporter:label="Line Chart" name="chart_line" reporter:datatype="bool"/>
                </fields>
                <links>
                        <link field="runner" reltype="has_a" key="id" map="" class="au"/>
                        <link field="report" reltype="has_a" key="id" map="" class="rr"/>
                        <link field="folder" reltype="has_a" key="id" map="" class="rof"/>
                </links>
+        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+            <actions>
+                <create   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="runner" field="home_ou"/>
+                </create>
+                <retrieve permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="runner" field="home_ou"/>
+                </retrieve>
+                <update   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="runner" field="home_ou"/>
+                </update>
+                <delete   permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="runner" field="home_ou"/>
+                </delete>
+            </actions>
+        </permacrud>
        </class>
+    <class id="rcr" controller="open-ils.reporter-store open-ils.cstore open-ils.pcrud"
+           oils_obj:fieldmapper="reporter::completed_reports" oils_persist:tablename="reporter.completed_reports"
+           reporter:label="Completed Report Runs" oils_persist:readonly="true">
+               <fields oils_persist:primary="run">
+            <field reporter:label="Run" name="run" reporter:datatype="link"/>
+            <field reporter:label="Report" name="report" reporter:datatype="link"/>
+            <field reporter:label="Template" name="template" reporter:datatype="link"/>
+            <field reporter:label="Template Owner" name="template_owner" reporter:datatype="link"/>
+            <field reporter:label="Report Owner" name="report_owner" reporter:datatype="link"/>
+            <field reporter:label="Runner" name="runner" reporter:datatype="link"/>
+            <field reporter:label="Template Folder" name="template_folder" reporter:datatype="link"/>
+            <field reporter:label="Report Folder" name="report_folder" reporter:datatype="link"/>
+            <field reporter:label="Output Folder" name="output_folder" reporter:datatype="link"/>
+            <field reporter:label="Report Name" name="report_name" reporter:datatype="text"/>
+            <field reporter:label="Template Name" name="template_name" reporter:datatype="text"/>
+            <field reporter:label="Start Time" name="start_time" reporter:datatype="text"/>
+            <field reporter:label="Run Time" name="run_time" reporter:datatype="text"/>
+            <field reporter:label="Finish Time" name="complete_time" reporter:datatype="text"/>
+            <field reporter:label="Error Code" name="error_code" reporter:datatype="text"/>
+            <field reporter:label="Error Text" name="error_text" reporter:datatype="text"/>
+               </fields>
+               <links>
+            <link field="run" reltype="has_a" key="id" map="" class="rs"/>
+            <link field="report" reltype="has_a" key="id" map="" class="rr"/>
+            <link field="template" reltype="has_a" key="id" map="" class="rt"/>
+            <link field="template_owner" reltype="has_a" key="id" map="" class="au"/>
+            <link field="report_owner" reltype="has_a" key="id" map="" class="au"/>
+            <link field="runner" reltype="has_a" key="id" map="" class="au"/>
+            <link field="template_folder" reltype="has_a" key="id" map="" class="rtf"/>
+            <link field="report_folder" reltype="has_a" key="id" map="" class="rrf"/>
+            <link field="output_folder" reltype="has_a" key="id" map="" class="rof"/>
+               </links>
+        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+            <actions>
+                <retrieve permission="RUN_REPORTS RUN_SIMPLE_REPORTS">
+                    <context link="runner" field="home_ou"/>
+                </retrieve>
+            </actions>
+        </permacrud>
+    </class>
        <class id="rmsr" controller="open-ils.reporter-store open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="reporter::materialized_simple_record" oils_persist:tablename="reporter.materialized_simple_record" reporter:label="Fast Simple Record Extracts">
                <fields oils_persist:primary="id">
                        <field reporter:label="Record ID" name="id" reporter:datatype="id" />
@@ -13551,7 +13751,7 @@ SELECT  usr,
                        <field reporter:label="Group Members" name="members" oils_persist:virtual="true" reporter:datatype="link"/>
                </fields>
                <links>
-                       <link field="members" reltype="has_many" key="floating_group" class="cfgm"/>
+                       <link field="members" reltype="has_many" key="floating_group" map="" class="cfgm"/>
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
@@ -13572,8 +13772,8 @@ SELECT  usr,
                        <field reporter:label="Exclude" name="exclude" reporter:datatype="bool" oils_obj:required="true"/>
                </fields>
                <links>
-                       <link field="floating_group" reltype="has_a" key="id" class="cfg"/>
-                       <link field="org_unit" reltype="has_a" key="id" class="aou"/>
+                       <link field="floating_group" reltype="has_a" key="id" map="" class="cfg"/>
+                       <link field="org_unit" reltype="has_a" key="id" map="" class="aou"/>
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
@@ -13763,7 +13963,7 @@ SELECT  usr,
                reporter:label="Carousel Types">
                <fields oils_persist:primary="id" oils_persist:sequence="config.carousel_type_id_seq">
                        <field reporter:label="Carousel Type ID" reporter:selector="name" name="id" reporter:datatype="id" />
-                       <field reporter:label="Name" name="name" reporter:datatype="text" oils_obj:required="true" oils_obj:i18n="true"/>
+                       <field reporter:label="Name" name="name" reporter:datatype="text" oils_obj:required="true" oils_persist:i18n="true"/>
                        <field reporter:label="Automatically Managed?" name="automatic" reporter:datatype="bool"/>
                        <field reporter:label="Filter By Age?" name="filter_by_age" reporter:datatype="bool"/>
                        <field reporter:label="Filter By Item Owning Library?" name="filter_by_copy_owning_lib" reporter:datatype="bool"/>
@@ -13788,7 +13988,7 @@ SELECT  usr,
                        <field reporter:label="Carousel ID" name="id" reporter:datatype="id" reporter:selector="name"/>
                        <field reporter:label="Carousel Type" name="type" reporter:datatype="link" oils_obj:required="true"/>
                        <field reporter:label="Owner" name="owner" reporter:datatype="link" oils_obj:required="true"/>
-                       <field reporter:label="Name" name="name" reporter:datatype="text" oils_obj:required="true" oils_obj:i18n="true"/>
+                       <field reporter:label="Name" name="name" reporter:datatype="text" oils_obj:required="true" oils_persist:i18n="true"/>
                        <field reporter:label="Bucket" name="bucket" reporter:datatype="link"/>
                        <field reporter:label="Creating User" name="creator" reporter:datatype="link"/>
                        <field reporter:label="Editing User" name="editor" reporter:datatype="link"/>
@@ -13889,7 +14089,7 @@ SELECT  usr,
                        <field reporter:label="API Key" name="api_key" reporter:datatype="text"/>
                </fields>
                <links>
-                       <link field="owner" reltype="has_a" key="id" class="aou"/>
+                       <link field="owner" reltype="has_a" key="id" map="" class="aou"/>
                </links>
                <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
                        <actions>
@@ -13901,6 +14101,1332 @@ SELECT  usr,
                </permacrud>
        </class>
 
+    <class id="cusppet" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="config::ui_staff_portal_page_entry_type" oils_persist:tablename="config.ui_staff_portal_page_entry_type" reporter:label="Portal Page Entry Type">
+        <fields oils_persist:primary="code">
+            <field name="code" reporter:label="Entry Type Code" reporter:datatype="text" reporter:selector="label" oils_obj:required="true"/>
+            <field name="label" reporter:label="Entry Type Label" reporter:datatype="text" oils_obj:required="true"/>
+        </fields>
+               <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+                       <actions>
+                               <retrieve/>
+                       </actions>
+               </permacrud>
+       </class>
+
+    <class id="cusppe" controller="open-ils.cstore open-ils.pcrud" oils_obj:fieldmapper="config::ui_staff_portal_page_entry" oils_persist:tablename="config.ui_staff_portal_page_entry" reporter:label="Portal Page Entry">
+        <fields oils_persist:primary="id" oils_persist:sequence="config.ui_staff_portal_page_entry_id_seq">
+            <field name="id" reporter:label="ID" reporter:datatype="id" reporter:selector="label"/>
+            <field name="page_col" reporter:label="Page Column" reporter:datatype="int" oils_obj:required="true"/>
+            <field name="col_pos" reporter:label="Column Position" reporter:datatype="int" oils_obj:required="true"/>
+            <field name="entry_type" reporter:label="Entry Type" reporter:datatype="link" oils_obj:required="true"/>
+            <field name="label" reporter:label="Entry Label" reporter:datatype="text"/>
+            <field name="image_url" reporter:label="Entry Image URL" reporter:datatype="text"/>
+            <field name="target_url" reporter:label="Entry Target URL" reporter:datatype="text"/>
+            <field name="entry_text" reporter:label="Entry Text" reporter:datatype="text"/>
+                       <field name="owner" reporter:label="Owner" reporter:datatype="link" oils_obj:required="true"/>
+        </fields>
+               <links>
+                       <link field="entry_type" reltype="has_a" key="code" map="" class="cusppet"/>
+                       <link field="owner" reltype="has_a" key="id" map="" class="aou"/>
+               </links>
+        <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">
+            <actions>
+                <create permission="ADMIN_STAFF_PORTAL_PAGE" context_field="owner"/>
+                <retrieve permission="STAFF_LOGIN" context_field="owner"/>
+                <update permission="ADMIN_STAFF_PORTAL_PAGE" context_field="owner"/>
+                <delete permission="ADMIN_STAFF_PORTAL_PAGE" context_field="owner"/>
+            </actions>
+        </permacrud>
+    </class>
+
+       <!-- Simple Reporter classes are currently used only by the SR UI -->
+    <class id="srcirc" controller="simple-reporter.ui" oils_persist:virtual="true" reporter:label="Simple Reporter Circulation">
+        <oils_persist:source_definition><![CDATA[
+            SELECT
+              -- Circ id; just for counting
+              combcirc.id AS circ_id,
+
+              -- User info, currently limiting to what's available from action.all_circulation
+              combcirc.usr_post_code AS usr_post_code,
+              combcirc.usr_birth_year AS usr_bith_year,
+              combcirc.usr_profile AS usr_profile_id,
+              pgtu.name AS usr_profile,
+              combcirc.usr_home_ou AS usr_home_ou_id,
+              aouuh.shortname AS usr_home_ou_shortname,
+              aouuh.name AS usr_home_ou_name,
+              (actor.org_unit_ancestor_at_depth(combcirc.usr_home_ou, 1)).id AS usr_sys_id,
+              aouus.shortname AS usr_sys_shortname,
+              aouus.name AS usr_sys_name,
+
+              -- Circ info
+              -- Checkout
+              combcirc.xact_start AS xact_start,
+              CAST(TO_CHAR(combcirc.xact_start, 'YYYY') AS INTEGER) AS xact_start_year,
+              TO_CHAR(combcirc.xact_start, 'YYYY-MM') AS xact_start_year_mon,
+              TO_CHAR(combcirc.xact_start, 'YYYY-MM-DD') AS xact_start_date,
+              combcirc.circ_lib AS circ_lib_id,
+              aouco.shortname AS circ_lib_shortname,
+              aouco.name AS circ_lib_name,
+              (actor.org_unit_ancestor_at_depth(combcirc.circ_lib, 1)).id AS circ_sys_id,
+              aoucos.shortname AS circ_sys_shortname,
+              aoucos.name AS circ_sys_name,
+              auco.usrname AS circ_staff,
+              awso.name AS checkout_workstation,
+
+              combcirc.due_date AS due_date,
+              CAST(TO_CHAR(combcirc.due_date, 'YYYY') AS INTEGER) AS due_date_year,
+              TO_CHAR(combcirc.due_date, 'YYYY-MM') AS due_date_year_mon,
+              TO_CHAR(combcirc.due_date, 'YYYY-MM-DD') AS due_date_date,
+
+              -- Checkin
+              combcirc.xact_finish AS xact_finish,
+              CAST(TO_CHAR(combcirc.xact_finish, 'YYYY') AS INTEGER) AS xact_finish_year,
+              TO_CHAR(combcirc.xact_finish, 'YYYY-MM') AS xact_finish_year_mon,
+              TO_CHAR(combcirc.xact_finish, 'YYYY-MM-DD') AS xact_finish_date,
+              aouci.shortname AS checkin_lib_shortname,
+              aouci.name AS checkin_lib_name,
+              auci.usrname AS checkin_staff,
+              awsi.name AS checkin_workstation,
+              aoucis.shortname AS checkin_sys_shortname,
+              aoucis.name AS checkin_sys_name,
+
+              combcirc.checkin_time AS checkin_time,
+
+              -- Misc circ info
+              combcirc.renewal_remaining AS renewal_remaining,
+              combcirc.auto_renewal_remaining AS auto_renewal_remaining,
+              combcirc.grace_period AS grace_period,
+
+              combcirc.stop_fines AS stop_fines,
+              combcirc.stop_fines_time AS stop_fines_time,
+
+              combcirc.duration AS duration,
+              combcirc.fine_interval AS fine_interval,
+              combcirc.recurring_fine AS recurring_fine,
+              combcirc.max_fine AS max_fine,
+              combcirc.duration_rule AS duration_rule,
+              combcirc.recurring_fine_rule AS recurring_fine_rule,
+              combcirc.max_fine_rule AS max_fine_rule,
+              CASE WHEN combcirc.parent_circ IS NULL THEN 'circ' ELSE 'renew' END AS circ_renew,
+              CASE WHEN phone_renewal THEN 'phone' WHEN desk_renewal THEN 'desk' WHEN opac_renewal THEN 'opac' WHEN auto_renewal THEN 'auto' ELSE null END AS renewal_type,
+              CASE WHEN COALESCE(combcirc.checkin_time, now()) > combcirc.due_date THEN true ELSE false END AS is_overdue,
+
+              -- Copy info
+              acp.barcode AS copy_barcode,
+              acp.circ_modifier AS copy_circ_modifier_code,
+              ccm.name AS copy_circ_modifier_name,
+              acp.circ_lib AS copy_circ_lib_id,
+              acp.location AS location_id,
+              acpl.name AS location_name,
+              aoucp.shortname AS copy_circ_lib_shortname,
+              aoucp.name AS copy_circ_lib_name,
+              (actor.org_unit_ancestor_at_depth(copy_circ_lib, 1)).id AS copy_sys_id,
+              aoucps.shortname AS copy_sys_shortname,
+              aoucps.name AS copy_sys_name,
+              combcirc.copy_owning_lib AS copy_owning_lib_id,
+              aoucpo.shortname AS copy_owning_lib_shortname,
+              aoucpo.name AS copy_owning_lib_name,
+              TRIM(BOTH ' ' FROM concat_ws(' ', acnp.label, acn.label, acns.label)) AS copy_call_number_full,
+              acnp.label AS copy_call_number_prefix,
+              acn.label AS copy_call_number_label,
+              acns.label AS copy_call_number_suffix,
+              TRIM(BOTH ' ' FROM concat_ws(' ', acnp.label_sortkey, acn.label_sortkey, acns.label_sortkey)) AS copy_call_number_sortkey_full,
+              acnp.label_sortkey AS copy_call_number_prefix_sortkey,
+              acn.label_sortkey AS copy_call_number_label_sortkey,
+              acns.label_sortkey AS copy_call_number_suffix_sortkey,
+              COALESCE(rmsr.title, acp.dummy_title) AS title,
+              COALESCE(rmsr.author, acp.dummy_author) AS author,
+              rmsr.publisher AS publisher,
+              public.approximate_date(rmsr.pubdate, '0') AS pubdate,
+              array_to_string(rmsr.isbn, ', ') AS isbn,
+              array_to_string(rmsr.issn, ', ') AS issn,
+              part.label AS part_label,
+              part.label_sortkey AS part_label_sortkey,
+              acn.record AS bib_id,
+              rmsr.tcn_value AS tcn_value
+
+            FROM
+              action.all_circulation combcirc
+
+              -- User
+              INNER JOIN actor.org_unit aouuh ON (combcirc.usr_home_ou = aouuh.id)
+              LEFT JOIN actor.org_unit aouus ON ((actor.org_unit_ancestor_at_depth(combcirc.usr_home_ou, 1)).id = aouus.id)
+              LEFT JOIN permission.grp_tree pgtu ON (combcirc.usr_profile = pgtu.id)
+
+              -- Circ
+              LEFT JOIN actor.workstation awso ON (combcirc.workstation = awso.id)
+              LEFT JOIN actor.workstation awsi ON (combcirc.checkin_workstation = awsi.id)
+              INNER JOIN actor.org_unit aouco ON (combcirc.circ_lib = aouco.id)
+              LEFT JOIN actor.org_unit aouci ON (combcirc.checkin_lib = aouci.id)
+              LEFT JOIN actor.org_unit aoucos ON ((actor.org_unit_ancestor_at_depth(combcirc.circ_lib, 1)).id = aoucos.id)
+              LEFT JOIN actor.org_unit aoucis ON ((actor.org_unit_ancestor_at_depth(combcirc.checkin_lib, 1)).id = aouci.id)
+              LEFT JOIN actor.usr auco ON (combcirc.circ_staff = auco.id)
+              LEFT JOIN actor.usr auci ON (combcirc.checkin_staff = auci.id)
+
+              -- Copy / call / title
+              INNER JOIN asset.copy acp ON (combcirc.target_copy = acp.id)
+                                                       INNER JOIN asset.copy_location acpl ON (acp.location = acpl.id)
+              INNER JOIN actor.org_unit aoucp ON (acp.circ_lib = aoucp.id)
+              LEFT JOIN actor.org_unit aoucps ON ((actor.org_unit_ancestor_at_depth(combcirc.copy_circ_lib, 1)).id = aoucps.id)
+              LEFT JOIN actor.org_unit aoucpo ON (combcirc.copy_owning_lib = aoucpo.id)
+              LEFT JOIN actor.org_unit aoucpos ON ((actor.org_unit_ancestor_at_depth(combcirc.copy_owning_lib, 1)).id = aoucpos.id)
+              LEFT JOIN config.circ_modifier ccm ON (acp.circ_modifier = ccm.code)
+              INNER JOIN asset.call_number acn ON (acp.call_number = acn.id)
+              INNER JOIN asset.call_number_prefix acnp ON (acn.prefix = acnp.id)
+              INNER JOIN asset.call_number_suffix acns ON (acn.suffix = acns.id)
+              LEFT JOIN reporter.materialized_simple_record rmsr ON (acn.record = rmsr.id)
+              LEFT JOIN (
+                SELECT bmp.record, bmp.label, bmp.label_sortkey, acmp.target_copy
+                FROM biblio.monograph_part bmp
+                INNER JOIN asset.copy_part_map acmp ON (acmp.part = bmp.id)
+                WHERE NOT bmp.deleted
+              ) part ON (part.record = acn.record AND part.target_copy = acp.id)
+        ]]></oils_persist:source_definition>
+        <field_groups>
+            <group name="common" reporter:label="Common Fields"/>
+            <group name="item" reporter:label="Item Fields"/>
+            <group name="user" reporter:label="Patron Fields"/>
+            <group name="title" reporter:label="Call Number and Title Fields"/>
+            <group name="org" reporter:label="Libraries"/>
+        </field_groups>
+        <fields oils_persist:primary="circ_id">
+            <field reporter:label="Circulation ID" name="circ_id" reporter:datatype="int" sr:suggest_transform="count_distinct" field_groups="common"/>
+            <field reporter:label="Patron Post Code" name="usr_post_code" reporter:datatype="text" field_groups="user"/>
+            <field reporter:label="Patron Birth Year" name="usr_bith_year" reporter:datatype="int" field_groups="user"/>
+            <field reporter:label="Patron Profile Group" name="usr_profile_id" sr:hide_from="display" reporter:datatype="link" field_groups="user,common" sr:suggest_filter="true"/>
+            <field reporter:label="Patron Profile Group" name="usr_profile" sr:hide_from="filter" reporter:datatype="text" field_groups="user,common"/>
+            <field reporter:label="Patron Home Library" name="usr_home_ou_id" sr:hide_from="display" reporter:datatype="org_unit" field_groups="org,user,common" sr:suggest_filter="true"/>
+            <field reporter:label="Patron Home Library Short (Policy) Name" sr:hide_from="filter" name="usr_home_ou_shortname" reporter:datatype="text" field_groups="org,user,common"/>
+            <field reporter:label="Patron Home Library Name" name="usr_home_ou_name" sr:hide_from="filter" reporter:datatype="text" field_groups="org,user,common"/>
+            <field reporter:label="Patron System Library" name="usr_sys_id" sr:hide_from="display" reporter:datatype="org_unit" field_groups="org,user,common" sr:suggest_filter="true"/>
+            <field reporter:label="Patron System Library Short (Policy) Name" name="usr_sys_shortname" sr:hide_from="filter" reporter:datatype="text" field_groups="org,user"/>
+            <field reporter:label="Patron System Library Name" name="usr_sys_name" sr:hide_from="filter" reporter:datatype="text" field_groups="org,user"/>
+            <field reporter:label="Circulation Start Date/Time" name="xact_start" reporter:datatype="timestamp" sr:suggest_filter="true" field_groups="common"/>
+            <field reporter:label="Circulation Start Year" name="xact_start_year" reporter:datatype="int"/>
+            <field reporter:label="Circulation Start Year and Month" name="xact_start_year_mon" reporter:datatype="text" field_groups="common"/>
+            <field reporter:label="Circulation Start Date" name="xact_start_date" reporter:datatype="timestamp"/>
+            <field reporter:label="Checkout Library" name="circ_lib_id" sr:hide_from="display" reporter:datatype="org_unit" field_groups="org,common" sr:suggest_filter="true"/>
+            <field reporter:label="Checkout Library Short (Policy) Name" name="circ_lib_shortname" sr:hide_from="filter" reporter:datatype="text" field_groups="org,common"/>
+            <field reporter:label="Checkout Library Name" name="circ_lib_name" sr:hide_from="filter" reporter:datatype="text" field_groups="org,common"/>
+            <field reporter:label="Checkout System" name="circ_sys_id" sr:hide_from="display" reporter:datatype="org_unit" field_groups="org" sr:suggest_filter="true"/>
+            <field reporter:label="Checkout System Short (Policy) Name" name="circ_sys_shortname" sr:hide_from="filter" reporter:datatype="text" field_groups="org"/>
+            <field reporter:label="Checkout System Name" name="circ_sys_name" sr:hide_from="filter" reporter:datatype="text" field_groups="org"/>
+            <field reporter:label="Checkout Staff" name="circ_staff" reporter:datatype="text"/>
+            <field reporter:label="Checkout Workstation" name="checkout_workstation" reporter:datatype="text"/>
+            <field reporter:label="Due Date/Time" name="due_date" reporter:datatype="timestamp" field_groups="common" sr:suggest_filter="true"/>
+            <field reporter:label="Due Date Year" name="due_date_year" reporter:datatype="int"/>
+            <field reporter:label="Due Date Year and Month" name="due_date_year_mon" reporter:datatype="text" field_groups="common"/>
+            <field reporter:label="Due Date" name="due_date_date" reporter:datatype="text"/>
+            <field reporter:label="Circulation Finish Date/Time" name="xact_finish" reporter:datatype="timestamp"/>
+            <field reporter:label="Circulation Finish Year" name="xact_finish_year" reporter:datatype="int"/>
+            <field reporter:label="Circulation Finish Year and Month" name="xact_finish_year_mon" reporter:datatype="text"/>
+            <field reporter:label="Circulation Finish Date" name="xact_finish_date" reporter:datatype="text"/>
+            <field reporter:label="Checkin Library Short (Policy) Name" name="checkin_lib_shortname" sr:hide_from="filter" reporter:datatype="text" field_groups="org"/>
+            <field reporter:label="Checkin Library Name" name="checkin_lib_name" sr:hide_from="filter" reporter:datatype="text" field_groups="org"/>
+            <field reporter:label="Checkin Staff" name="checkin_staff" reporter:datatype="text"/>
+            <field reporter:label="Checkin Workstation" name="checkin_workstation" reporter:datatype="text"/>
+            <field reporter:label="Checkin System Short (Policy) Name" name="checkin_sys_shortname" sr:hide_from="filter" reporter:datatype="text" field_groups="org"/>
+            <field reporter:label="Checkin System Name" name="checkin_sys_name" sr:hide_from="filter" reporter:datatype="text" field_groups="org"/>
+            <field reporter:label="Checkin Date/Time" name="checkin_time" reporter:datatype="timestamp"/>
+            <field reporter:label="Remaining Renewals" name="renewal_remaining" reporter:datatype="int" sr:suggest_transform="sum" field_groups="common"/>
+            <field reporter:label="Remaining Autorenewals" name="auto_renewal_remaining" reporter:datatype="int" sr:suggest_transform="sum"/>
+            <field reporter:label="Grace Period" name="grace_period" reporter:datatype="interval"/>
+            <field reporter:label="Stop Fines Reason" name="stop_fines" reporter:datatype="text"/>
+            <field reporter:label="Stop Fines Date/Time" name="stop_fines_time" reporter:datatype="timestamp"/>
+            <field reporter:label="Circulation Duration" name="duration" reporter:datatype="interval"/>
+            <field reporter:label="Fine Interval" name="fine_interval" reporter:datatype="interval"/>
+            <field reporter:label="Recurring Fine Amount" name="recurring_fine" reporter:datatype="money"/>
+            <field reporter:label="Max Fine Amount" name="max_fine" reporter:datatype="money"/>
+            <field reporter:label="Circulation Duration Rule" name="duration_rule" reporter:datatype="text"/>
+            <field reporter:label="Recurring Fine Rule" name="recurring_fine_rule" reporter:datatype="text"/>
+            <field reporter:label="Max Fine Rule" name="max_fine_rule" reporter:datatype="text"/>
+            <field reporter:label="Circulation or Renewal" name="circ_renew" reporter:datatype="text" field_groups="common" sr:suggest_filter="true"/>
+            <field reporter:label="Renewal Type" name="renewal_type" reporter:datatype="text" field_groups="common" sr:suggest_filter="true"/>
+            <field reporter:label="Overdue?" name="is_overdue" reporter:datatype="bool" field_groups="common" sr:suggest_filter="true"/>
+            <field reporter:label="Item Barcode" name="copy_barcode" reporter:datatype="text" field_groups="item"/>
+            <field reporter:label="Shelving Location" name="location_id" sr:hide_from="display" reporter:datatype="link" field_groups="item,common" sr:suggest_filter="true"/>
+            <field reporter:label="Shelving Location" name="location_name" sr:hide_from="filter" reporter:datatype="text" field_groups="item,common"/>
+            <field reporter:label="Item Circulation Modifier Code" name="copy_circ_modifier_code" reporter:datatype="link" field_groups="item,common" sr:suggest_filter="true"/>
+            <field reporter:label="Item Circulation Modifier Name" name="copy_circ_modifier_name" reporter:datatype="text" field_groups="item"/>
+            <field reporter:label="Item Circulating Library" name="copy_circ_lib_id" sr:hide_from="display" reporter:datatype="org_unit" field_groups="org,item"/>
+            <field reporter:label="Item Circulating Library Short (Policy) Name" name="copy_circ_lib_shortname" sr:hide_from="filter" reporter:datatype="text" field_groups="org,item"/>
+            <field reporter:label="Item Circulation Library Name" name="copy_circ_lib_name" sr:hide_from="filter" reporter:datatype="text" field_groups="org,item"/>
+            <field reporter:label="Item System Library" name="copy_sys_id" sr:hide_from="display" reporter:datatype="org_unit" field_groups="org,item"/>
+            <field reporter:label="Item System Short (Policy) Name" name="copy_sys_shortname" sr:hide_from="filter" reporter:datatype="text" field_groups="org,item"/>
+            <field reporter:label="Item System Name" name="copy_sys_name" sr:hide_from="filter" reporter:datatype="text" field_groups="org,item"/>
+            <field reporter:label="Item Owning Library" name="copy_owning_lib_id" sr:hide_from="display" reporter:datatype="org_unit" field_groups="org,item" sr:suggest_filter="true"/>
+            <field reporter:label="Item Owning Library Short (Policy) Name" name="copy_owning_lib_shortname" sr:hide_from="filter" reporter:datatype="text" field_groups="org,item,common"/>
+            <field reporter:label="Item Owning Library Name" name="copy_owning_lib_name" sr:hide_from="filter" reporter:datatype="text" field_groups="org,item,common"/>
+            <field reporter:label="Full Call Number" name="copy_call_number_full" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Call Number Prefix" name="copy_call_number_prefix" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Call Number Label" name="copy_call_number_label" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Call Number Suffix" name="copy_call_number_suffix" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Full Call Number Sortkey" name="copy_call_number_sortkey_full" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Call Number Prefix Sortkey" name="copy_call_number_prefix_sortkey" reporter:datatype="text"/>
+            <field reporter:label="Call Number Label Sortkey" name="copy_call_number_label_sortkey" reporter:datatype="text"/>
+            <field reporter:label="Call Number Suffix Sortkey" name="copy_call_number_suffix_sortkey" reporter:datatype="text"/>
+            <field reporter:label="Call Number Dewey" name="copy_call_number_dewey" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Call Number Dewey Block Tens" name="copy_call_number_dewey_block_tens" reporter:datatype="text" field_groups="title,common" sr:suggest_filter="true"/>
+            <field reporter:label="Call Number Dewey Block Hundreds" name="copy_call_number_dewey_block_hundreds" reporter:datatype="text" field_groups="title,common" sr:suggest_filter="true"/>
+            <field reporter:label="Call Number Dewey Range Tens" name="copy_call_number_dewey_range_tens" reporter:datatype="text" field_groups="title,common" sr:suggest_filter="true"/>
+            <field reporter:label="Call Number Dewey Range Hundreds" name="copy_call_number_dewey_range_hundreds" reporter:datatype="text" field_groups="title,common" sr:suggest_filter="true"/>
+            <field reporter:label="Monographic Part" name="part_label" reporter:datatype="text" field_groups="item,title"/>
+            <field reporter:label="Monographic Part Sortkey" name="part_label_sortkey" reporter:datatype="text" field_groups="item,title"/>
+            <field reporter:label="Bibliographic Record ID" name="bib_id" reporter:datatype="int" field_groups="title"/>
+            <field reporter:label="TCN" name="tcn_value" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Title" name="title" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Author" name="author" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Publisher" name="publisher" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Publication Date" name="pubdate" reporter:datatype="int" field_groups="title"/>
+            <field reporter:label="ISBN" name="isbn" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="ISSN" name="issn" reporter:datatype="text" field_groups="title"/>
+        </fields>
+        <links>
+            <link field="usr_profile_id" reltype="has_a" key="id" map="" class="pgt"/>
+            <link sr:org_filter_field="owning_lib" field="location_id" reltype="has_a" key="id" map="" class="acpl"/>
+            <link field="copy_circ_modifier_code" reltype="might_have" key="code" map="" class="ccm"/>
+        </links>
+    </class>
+
+    <class id="srusr" controller="simple-reporter.ui" oils_persist:virtual="true" reporter:label="Simple Reporter Patrons">
+        <oils_persist:source_definition><![CDATA[
+            SELECT
+              au.home_ou AS home_ou_filter,
+              au.id AS user_id,
+              cardp.barcode AS barcode_primary,
+              au.usrname AS usrname,
+              au.email AS email,
+              CONCAT_WS(' ', au.prefix, au.first_given_name, au.second_given_name, au.family_name, au.suffix) AS full_name,
+              au.prefix AS prefix,
+              au.first_given_name AS first_given_name,
+              au.second_given_name AS second_given_name,
+              au.family_name AS family_name,
+              au.suffix AS suffix,
+              CONCAT_WS(' ', COALESCE(au.pref_prefix, au.prefix), COALESCE(au.pref_first_given_name, au.first_given_name),
+              COALESCE(au.pref_second_given_name, au.second_given_name), COALESCE(au.pref_family_name, au.family_name),
+              COALESCE(au.pref_suffix, au.suffix)) AS pref_full_name,
+              COALESCE(au.pref_prefix, au.prefix) AS pref_prefix,
+              COALESCE(au.pref_first_given_name, au.first_given_name) AS pref_first_given_name,
+              COALESCE(au.pref_second_given_name, au.second_given_name) AS pref_second_given_name,
+              COALESCE(au.pref_family_name, au.family_name) AS pref_family_name,
+              COALESCE(au.pref_suffix, au.suffix) AS pref_suffix,
+              au.profile AS profile_id,
+              pgt.name AS profile,
+              au.alias AS alias,
+              CONCAT_WS(', ', au.day_phone, au.evening_phone, au.other_phone) AS all_phone,
+              au.day_phone AS day_phone,
+              au.evening_phone AS evening_phone,
+              au.other_phone AS other_phone,
+              au.dob AS dob,
+              CAST(TO_CHAR(au.dob, 'YYYY') AS INTEGER) AS dob_year,
+              TO_CHAR(au.dob, 'YYYY-MM') AS dob_year_month,
+              EXTRACT('year' FROM DATE_TRUNC('year', AGE(au.dob))) AS dob_age_years,
+              au.active AS active,
+              au.barred AS barred,
+              au.deleted AS deleted,
+              au.juvenile AS juvenile,
+              au.claims_returned_count AS claims_returned_count,
+              au.credit_forward_balance AS credit_forward_balance,
+              au.create_date AS create_date,
+              CAST(TO_CHAR(au.create_date, 'YYYY') AS INTEGER) AS create_date_year,
+              TO_CHAR(au.create_date, 'YYYY-MM') AS create_date_year_mon,
+              TO_CHAR(au.create_date, 'YYYY-MM-DD') AS create_date_date,
+              au.expire_date AS expire_date,
+              CAST(TO_CHAR(au.expire_date, 'YYYY') AS INTEGER) AS expire_date_year,
+              TO_CHAR(au.expire_date, 'YYYY-MM') AS expire_date_year_mon,
+              TO_CHAR(au.expire_date, 'YYYY-MM-DD') AS expire_date_date,
+              au.claims_never_checked_out_count AS claims_never_checked_out_count,
+              au.last_update_time AS last_update_time,
+              au.home_ou AS home_ou_id,
+              aouh.shortname AS home_ou_shortname,
+              aouh.name AS home_ou_name,
+              (actor.org_unit_ancestor_at_depth(au.home_ou, 1)).id AS home_sys_id,
+              aous.shortname AS home_sys_shortname,
+              aous.name AS home_sys_name,
+              auam.valid AS mailing_valid,
+              auam.address_type AS mailing_address_type,
+              auam.street1 AS mailing_street1,
+              auam.street2 AS mailing_street2,
+              auam.city AS mailing_city,
+              auam.state AS mailing_state,
+              auam.country AS mailing_country,
+              auam.post_code AS mailing_post_code,
+              auam.county AS mailing_county,
+              auam.within_city_limits AS mailing_within_city_limits,
+              auam.pending AS mailing_pending,
+              CONCAT_WS(' ', CONCAT_WS(', ', auam.street1, auam.street2), CONCAT_WS(', ', auam.city, auam.state), auam.post_code) AS mailing_full,
+              auap.valid AS physical_valid,
+              auap.address_type AS physical_address_type,
+              auap.street1 AS physical_street1,
+              auap.street2 AS physical_street2,
+              auap.city AS physical_city,
+              auap.state AS physical_state,
+              auap.country AS physical_country,
+              auap.post_code AS physical_post_code,
+              auap.county AS physical_county,
+              auap.within_city_limits AS physical_within_city_limits,
+              auap.pending AS physical_pending,
+              CONCAT_WS(' ', CONCAT_WS(', ', auap.street1, auap.street2), CONCAT_WS(', ', auap.city, auap.state), auap.post_code) AS physical_full,
+              CASE WHEN aus_hold.value ~ 'phone' THEN TRUE ELSE FALSE END AS phone_notify,
+              CASE WHEN aus_hold.value ~ 'sms' THEN TRUE ELSE FALSE END AS sms_notify,
+              CASE WHEN aus_hold.value ~ 'email' THEN TRUE ELSE FALSE END AS email_notify,
+              CASE WHEN aus_coll.value ILIKE 'true' THEN TRUE ELSE FALSE END AS collections_exempt,
+              CASE WHEN aus_noti.value ILIKE 'true' THEN TRUE ELSE FALSE END AS notice_optin,
+              asceum1.stat_cat_entry AS legacy_stat_cat1,
+              asceum2.stat_cat_entry AS legacy_stat_cat2,
+
+              -- Pile up aggregates at the bottom to make the GROUP BY more manageable.
+              STRING_AGG(DISTINCT carda.barcode, ', ') AS barcode_active,
+              STRING_AGG(DISTINCT cards.barcode, ', ') AS barcode_all,
+              STRING_AGG(DISTINCT pgts.name, ', ') AS secondary_groups,
+              COUNT(DISTINCT CASE WHEN circ.checkin_time IS NULL AND circ.xact_finish IS NULL AND now() > circ.due_date THEN circ.id ELSE NULL END) AS circs_overdue,
+              COUNT(DISTINCT CASE WHEN circ.checkin_time IS NULL AND circ.xact_finish IS NULL THEN circ.id ELSE NULL END) AS circs_open
+
+            FROM
+              actor.usr au
+              INNER JOIN actor.org_unit aouh ON (au.home_ou = aouh.id)
+              INNER JOIN actor.org_unit aous ON ((actor.org_unit_ancestor_at_depth(au.home_ou, 1)).id = aous.id)
+              LEFT JOIN actor.card cardp ON (au.card = cardp.id)
+              LEFT JOIN actor.card carda ON (au.id = carda.usr AND carda.active)
+              LEFT JOIN actor.card cards ON (au.id = cards.usr)
+              INNER JOIN permission.grp_tree pgt ON (au.profile = pgt.id)
+              LEFT JOIN permission.usr_grp_map pugm ON (au.id = pugm.usr)
+              LEFT JOIN permission.grp_tree pgts ON (pugm.grp = pgts.id)
+              LEFT JOIN actor.usr_address auam ON (au.mailing_address = auam.id)
+              LEFT JOIN actor.usr_address auap ON (au.billing_address = auap.id)
+              LEFT JOIN action.circulation circ ON (au.id = circ.usr)
+              LEFT JOIN actor.usr_setting aus_hold ON (au.id = aus_hold.usr AND aus_hold.name = 'opac.hold_notify')
+              LEFT JOIN actor.usr_setting aus_coll ON (au.id = aus_coll.usr AND aus_coll.name = 'circ.collections.exempt')
+              LEFT JOIN actor.usr_setting aus_noti ON (au.id = aus_noti.usr AND aus_noti.name = 'circ.default_overdue_notices_enabled')
+              LEFT JOIN actor.stat_cat_entry_usr_map asceum1 ON (au.id = asceum1.target_usr AND asceum1.stat_cat = 1)
+              LEFT JOIN actor.stat_cat_entry_usr_map asceum2 ON (au.id = asceum2.target_usr AND asceum2.stat_cat = 2)
+
+            GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
+              16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
+              31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,
+              46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
+              61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,
+              76,77,78,79,80,81
+        ]]></oils_persist:source_definition>
+        <field_groups>
+            <group name="common" reporter:label="Common Fields"/>
+            <group name="name" reporter:label="Name Fields"/>
+            <group name="contact" reporter:label="Contact Fields"/>
+            <group name="address" reporter:label="Address Related Fields"/>
+            <group name="org" reporter:label="Libraries"/>
+        </field_groups>
+        <fields oils_persist:primary="user_id">
+            <field reporter:label="VIEW_USER Permission Verification" name="home_ou_filter" reporter:datatype="int"
+                sr:hide_from="display,filter" sr:force_transform="reporter.intersect_user_perm_ou,SR__USER_ID,VIEW_USER" sr:force_filter="true" sr:force_filtervalues="t"/>
+            <field reporter:label="User ID" name="user_id" reporter:datatype="int" sr:suggest_transform="count_distinct" field_groups="common"/>
+            <field reporter:label="Primary Barcode" name="barcode_primary" reporter:datatype="text" field_groups="common"/>
+            <field reporter:label="OPAC/Staff Client User Name" name="usrname" reporter:datatype="text" field_groups="common"/>
+            <field reporter:label="Email" name="email" reporter:datatype="text" field_groups="contact,common"/>
+            <field reporter:label="Full Name" name="full_name" reporter:datatype="text" field_groups="name,common"/>
+            <field reporter:label="Prefix" name="prefix" reporter:datatype="text" field_groups="name"/>
+            <field reporter:label="First Name" name="first_given_name" reporter:datatype="text" field_groups="name,common"/>
+            <field reporter:label="Middle Name" name="second_given_name" reporter:datatype="text" field_groups="name"/>
+            <field reporter:label="Last Name" name="family_name" reporter:datatype="text" field_groups="name,common"/>
+            <field reporter:label="Suffix" name="suffix" reporter:datatype="text" field_groups="name"/>
+            <field reporter:label="Full Preferred Name" name="pref_full_name" reporter:datatype="text" field_groups="name,common"/>
+            <field reporter:label="Preferred Prefix" name="pref_prefix" reporter:datatype="text" field_groups="name"/>
+            <field reporter:label="Preferred First Name" name="pref_first_given_name" reporter:datatype="text" field_groups="name,common"/>
+            <field reporter:label="Preferred Middle Name" name="pref_second_given_name" reporter:datatype="text" field_groups="name"/>
+            <field reporter:label="Preferred Last Name" name="pref_family_name" reporter:datatype="text" field_groups="name,common"/>
+            <field reporter:label="Preferred Suffix" name="pref_suffix" reporter:datatype="text" field_groups="name"/>
+            <field reporter:label="Main (Profile) Permission Group" name="profile_id" reporter:datatype="link" sr:hide_from="display" sr:suggest_filter="true"/>
+            <field reporter:label="Main (Profile) Permission Group" name="profile" reporter:datatype="text" sr:hide_from="filter" field_groups="common"/>
+            <field reporter:label="OPAC/Staff Client Holds Alias" name="alias" reporter:datatype="text" field_groups="common,name"/>
+            <field reporter:label="All Phone Numbers" name="all_phone" reporter:datatype="text" field_groups="contact"/>
+            <field reporter:label="Daytime Phone" name="day_phone" reporter:datatype="text" field_groups="contact,common"/>
+            <field reporter:label="Evening Phone" name="evening_phone" reporter:datatype="text" field_groups="contact"/>
+            <field reporter:label="Other Phone" name="other_phone" reporter:datatype="text" field_groups="contact"/>
+            <field reporter:label="Date of Birth" name="dob" reporter:datatype="timestamp"/>
+            <field reporter:label="Birth Year" name="dob_year" reporter:datatype="int"/>
+            <field reporter:label="Birth Year and Month" name="dob_year_month" reporter:datatype="text"/>
+            <field reporter:label="Age" name="dob_age_years" reporter:datatype="int"/>
+            <field reporter:label="Active?" name="active" reporter:datatype="bool" sr:suggest_filter="true" field_groups="common"/>
+            <field reporter:label="Barred?" name="barred" reporter:datatype="bool" sr:suggest_filter="true" field_groups="common"/>
+            <field reporter:label="Deleted?" name="deleted" reporter:datatype="bool" sr:suggest_filter="true" field_groups="common"/>
+            <field reporter:label="Juvenile?" name="juvenile" reporter:datatype="bool" sr:suggest_filter="true" field_groups="common"/>
+            <field reporter:label="Claims-returned Count" name="claims_returned_count" reporter:datatype="int" sr:suggest_transform="sum"/>
+            <field reporter:label="User Credit Balance" name="credit_forward_balance" reporter:datatype="money"/>
+            <field reporter:label="Record Creation Date/Time" name="create_date" reporter:datatype="timestamp"/>
+            <field reporter:label="Record Creation Year" name="create_date_year" reporter:datatype="int"/>
+            <field reporter:label="Record Creation Year and Month" name="create_date_year_mon" reporter:datatype="text"/>
+            <field reporter:label="Record Creation Date" name="create_date_date" reporter:datatype="text"/>
+            <field reporter:label="Privilege Expiration Date/Time" name="expire_date" reporter:datatype="timestamp" field_groups="common" sr:suggest_filter="true"/>
+            <field reporter:label="Privilege Expiration Year" name="expire_date_year" reporter:datatype="int"/>
+            <field reporter:label="Privilege Expiration Year and Month" name="expire_date_year_mon" sr:suggest_filter="true" reporter:datatype="text"/>
+            <field reporter:label="Privilege Expiration Date" name="expire_date_date" reporter:datatype="text"/>
+            <field reporter:label="Claims Never Checked Out Count" name="claims_never_checked_out_count" reporter:datatype="int" sr:suggest_transform="sum"/>
+            <field reporter:label="Record Last Update Time" name="last_update_time" reporter:datatype="timestamp"/>
+            <field reporter:label="Home Library" name="home_ou_id" reporter:datatype="org_unit" sr:suggest_filter="true" sr:hide_from="display" field_groups="org,common"/>
+            <field reporter:label="Home Library Short (Policy) Name" name="home_ou_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+            <field reporter:label="Home Library Name" name="home_ou_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+            <field reporter:label="Home System" name="home_sys_id" reporter:datatype="org_unit" sr:suggest_filter="true" sr:hide_from="display" field_groups="org,common"/>
+            <field reporter:label="Home System Short (Policy) Name" name="home_sys_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+            <field reporter:label="Home System Name" name="home_sys_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+            <field reporter:label="Mailing Address Valid?" name="mailing_valid" reporter:datatype="bool" field_groups="address"/>
+            <field reporter:label="Mailing Address Type" name="mailing_address_type" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Mailing Address Street1" name="mailing_street1" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Mailing Address Street2" name="mailing_street2" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Mailing Address City" name="mailing_city" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Mailing Address State" name="mailing_state" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Mailing Address Country" name="mailing_country" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Mailing Address Postal Code" name="mailing_post_code" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Mailing Address County" name="mailing_county" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Mailing Address Within City Limits?" name="mailing_within_city_limits" reporter:datatype="bool" field_groups="address"/>
+            <field reporter:label="Mailing Address Pending?" name="mailing_pending" reporter:datatype="bool" field_groups="address"/>
+            <field reporter:label="Full Mailing Address" name="mailing_full" reporter:datatype="text" field_groups="address,common"/>
+            <field reporter:label="Physical Address Valid?" name="physical_valid" reporter:datatype="bool" field_groups="address"/>
+            <field reporter:label="Physical Address Type" name="physical_address_type" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Physical Address Street1" name="physical_street1" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Physical Address Street2" name="physical_street2" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Physical Address City" name="physical_city" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Physical Address State" name="physical_state" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Physical Address Country" name="physical_country" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Physical Address Postal Code" name="physical_post_code" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Physical Address Country" name="physical_county" reporter:datatype="text" field_groups="address"/>
+            <field reporter:label="Physical Address Within City Limits?" name="physical_within_city_limits" reporter:datatype="bool" field_groups="address"/>
+            <field reporter:label="Physical Address Pending?" name="physical_pending" reporter:datatype="bool" field_groups="address"/>
+            <field reporter:label="Full Physical Address" name="physical_full" reporter:datatype="text" field_groups="address,common"/>
+            <field reporter:label="Hold Notifications: Phone?" name="phone_notify" reporter:datatype="bool" field_groups="contact"/>
+            <field reporter:label="Hold Notifications: SMS?" name="sms_notify" reporter:datatype="bool" field_groups="contact"/>
+            <field reporter:label="Hold Notifications: Email?" name="email_notify" reporter:datatype="bool" field_groups="contact"/>
+            <field reporter:label="Collections Exempt?" name="collections_exempt" reporter:datatype="bool"/>
+            <field reporter:label="Email Notice Opt-in?" name="notice_optin" reporter:datatype="bool"/>
+            <field reporter:label="Legacy Stat Cat 1" name="legacy_stat_cat1" reporter:datatype="text"/>
+            <field reporter:label="Legacy Stat Cat 2" name="legacy_stat_cat2" reporter:datatype="text"/>
+            <field reporter:label="All Active Barcodes" name="barcode_active" reporter:datatype="text" sr:suggest_operator="contains"/>
+            <field reporter:label="All Barcodes" name="barcode_all" reporter:datatype="text" sr:suggest_operator="contains"/>
+            <field reporter:label="Secondary Permission Groups" name="secondary_groups" reporter:datatype="text" sr:suggest_operator="contains"/>
+            <field reporter:label="Overdue Circulations" name="circs_overdue" reporter:datatype="int" sr:suggest_transform="sum" sr:suggest_filter="true" field_groups="common"/>
+            <field reporter:label="Open Circulations" name="circs_open" reporter:datatype="int" sr:suggest_transform="sum" sr:suggest_filter="true" field_groups="common"/>
+        </fields>
+        <links>
+            <link field="profile_id" reltype="has_a" key="id" map="" class="pgt"/>
+        </links>
+    </class>
+
+    <class id="srcp" controller="simple-reporter.ui" oils_persist:virtual="true" reporter:label="Simple Reporter Collections">
+        <oils_persist:source_definition><![CDATA[
+            SELECT
+              -- ids
+              acp.id AS copy_id,
+              acp.floating AS floating_id,
+              acn.id AS acn_id,
+              acp.circ_lib AS circ_lib_id,
+              acp.status AS status_id,
+              acp.location AS location_id,
+              acp.age_protect AS age_protect_id,
+              aous.id AS circ_sys_id,
+              acn.owning_lib AS owning_lib_id,
+              aouos.id AS owning_sys_id,
+              awsi.id AS inv_workstation_id,
+
+              -- OUs
+              aou.shortname AS circ_lib_shortname,
+              aou.name AS circ_lib_name,
+              aous.shortname AS circ_sys_shortname,
+              aous.name AS circ_sys_name,
+              aouo.shortname AS owning_lib_shortname,
+              aouo.name AS owning_lib_name,
+              aouos.shortname AS owning_sys_shortname,
+              aouos.name AS owning_sys_name,
+
+              -- dates
+              acp.create_date AS create_date_time,
+              CAST(TO_CHAR(acp.create_date, 'YYYY') AS INTEGER) AS create_date_year,
+              TO_CHAR(acp.create_date, 'YYYY-MM') AS create_date_year_mon,
+              TO_CHAR(acp.create_date, 'YYYY-MM-DD') AS create_date_date,
+              acp.active_date AS active_date_time,
+              CAST(TO_CHAR(acp.active_date, 'YYYY') AS INTEGER) AS active_date_year,
+              TO_CHAR(acp.active_date, 'YYYY-MM') AS active_date_year_mon,
+              TO_CHAR(acp.active_date, 'YYYY-MM-DD') AS active_date_date,
+              acp.edit_date AS edit_date_time,
+              CAST(TO_CHAR(acp.edit_date, 'YYYY') AS INTEGER) AS edit_date_year,
+              TO_CHAR(acp.edit_date, 'YYYY-MM') AS edit_date_year_mon,
+              TO_CHAR(acp.edit_date, 'YYYY-MM-DD') AS edit_date_date,
+              acp.status_changed_time AS status_changed_time_time,
+              CAST(TO_CHAR(acp.status_changed_time, 'YYYY') AS INTEGER) AS status_changed_year,
+              TO_CHAR(acp.status_changed_time, 'YYYY-MM') AS status_changed_year_mon,
+              TO_CHAR(acp.status_changed_time, 'YYYY-MM-DD') AS status_changed_date,
+              ali.inventory_date AS latest_inv_date,
+              CAST(TO_CHAR(ali.inventory_date, 'YYYY') AS INTEGER) AS latest_inv_date_year,
+              TO_CHAR(ali.inventory_date, 'YYYY-MM') AS latest_inv_date_year_mon,
+              TO_CHAR(ali.inventory_date, 'YYYY-MM-DD') AS latest_inv_date_date,
+
+              -- acp
+              acp.barcode AS barcode,
+              ccs.name AS status,
+              acpl.name AS location_name,
+                                                       acp.circ_modifier AS copy_circ_modifier_code,
+                                                       ccm.name AS copy_circ_modifier_name,
+              acp.price AS price,
+              acp.cost AS acq_price,
+              acp.deleted AS copy_deleted,
+              acp.ref AS reference,
+              acp.circulate AS copy_circulate,
+              (acp.circulate AND acpl.circulate) AS circulate,
+              acp.holdable AS copy_holdable,
+              acp.deposit AS deposit,
+              acp.deposit_amount AS deposit_amount,
+              acp.alert_message AS alert_message,
+              acp.opac_visible AS copy_opac_visible,
+              (acp.opac_visible AND ccs.opac_visible) AS opac_visible,
+              crahp.name AS age_protect,
+              CASE WHEN acp.age_protect IS NULL THEN FALSE ELSE (now() - crahp.age) < acp.active_date END AS under_age_protection,
+              (acp.holdable AND ccs.holdable AND acpl.holdable) AS holdable,
+              acp.copy_number AS copy_number,
+              acp.circ_as_type AS circ_as_type,
+              acp.loan_duration AS loan_duration_int,
+              CASE acp.loan_duration WHEN 1 THEN 'short' WHEN 2 THEN 'medium' ELSE 'long' END AS loan_duration,
+              acp.fine_level AS fine_level_int,
+              CASE acp.fine_level WHEN 1 THEN 'low' WHEN 2 THEN 'medium' ELSE 'high' END AS fine_level,
+
+              -- Call Number
+              TRIM(BOTH ' ' FROM CONCAT_WS(' ', acnp.label, acn.label, acns.label)) AS copy_call_number_full,
+              acnp.label AS copy_call_number_prefix,
+              acn.label AS copy_call_number_label,
+              acns.label AS copy_call_number_suffix,
+              TRIM(BOTH ' ' FROM concat_ws(' ', acnp.label_sortkey, acn.label_sortkey, acns.label_sortkey)) AS copy_call_number_sortkey_full,
+              acnp.label_sortkey AS copy_call_number_prefix_sortkey,
+              acn.label_sortkey AS copy_call_number_label_sortkey,
+              acns.label_sortkey AS copy_call_number_suffix_sortkey,
+              racnd.dewey AS call_number_dewey,
+              racnd.dewey_block_tens AS call_number_dewey_block_tens,
+              racnd.dewey_block_hundreds AS call_number_dewey_block_hundreds,
+              racnd.dewey_range_tens AS call_number_dewey_range_tens,
+              racnd.dewey_range_hundreds AS call_number_dewey_range_hundreds,
+
+              -- Misc
+              COALESCE(rmsr.title, acp.dummy_title) AS title,
+              COALESCE(rmsr.author, acp.dummy_author) AS author,
+              rmsr.publisher AS publisher,
+              public.approximate_date(rmsr.pubdate, '0') AS pubdate,
+              COALESCE(array_to_string(rmsr.isbn, ', '), acp.dummy_isbn) AS isbn,
+              array_to_string(rmsr.issn, ', ') AS issn,
+              part.label AS part_label,
+              part.label_sortkey AS part_label_sortkey,
+              acn.record AS bib_id,
+              rmsr.tcn_value AS tcn_value,
+              acn.deleted AS call_deleted,
+              bre.deleted AS bib_deleted,
+              ccs.holdable AS status_holdable,
+              acpl.holdable AS location_holdable,
+              acp.circulate AS location_circulate,
+              awsi.name AS inventory_workstation,
+              aucr.usrname AS creating_user,
+              aued.usrname AS editing_user,
+
+              -- Aggregates
+              -- may decide these price games aren't worth it, but estimated collection value is useful and missing prices are not.
+              COALESCE(acp.cost, acp.price, (select first(value::numeric(8,2)) from actor.org_unit_ancestor_setting('cat.default_item_price', acp.circ_lib)), 5.00) AS est_price,
+              COUNT(DISTINCT combcirc.id) AS circ_total,
+              STRING_AGG(mfde_subj.value, ', ') AS bib_subjects
+
+            FROM
+              asset.copy acp
+              LEFT JOIN config.circ_modifier ccm ON (acp.circ_modifier = ccm.code)
+              INNER JOIN asset.call_number acn ON (acp.call_number = acn.id)
+              LEFT JOIN reporter.asset_call_number_dewey racnd ON (acn.id = racnd.call_number)
+              INNER JOIN config.copy_status ccs ON (acp.status = ccs.id)
+              LEFT JOIN config.rule_age_hold_protect crahp ON (acp.age_protect = crahp.id)
+              INNER JOIN asset.copy_location acpl ON (acp.location = acpl.id)
+              INNER JOIN asset.call_number_prefix acnp ON (acn.prefix = acnp.id)
+              INNER JOIN asset.call_number_suffix acns ON (acn.suffix = acns.id)
+              LEFT JOIN asset.latest_inventory ali ON (acp.id = ali.copy)
+              LEFT JOIN actor.workstation awsi ON (ali.inventory_workstation = awsi.id)
+              LEFT JOIN reporter.materialized_simple_record rmsr ON (acn.record = rmsr.id)
+              INNER JOIN actor.org_unit aou ON (acp.circ_lib = aou.id)
+              LEFT JOIN actor.org_unit aous ON ((actor.org_unit_ancestor_at_depth(acp.circ_lib, 1)).id = aous.id)
+              INNER JOIN actor.org_unit aouo ON (acn.owning_lib = aouo.id)
+              LEFT JOIN actor.org_unit aouos ON ((actor.org_unit_ancestor_at_depth(acn.owning_lib, 1)).id = aouos.id)
+              INNER JOIN biblio.record_entry bre ON (acn.record = bre.id)
+              LEFT JOIN metabib.flat_display_entry mfde_subj ON (acn.record = mfde_subj.source AND mfde_subj.name = 'subject')
+              LEFT JOIN action.all_circulation combcirc ON (acp.id = combcirc.target_copy)
+              INNER JOIN actor.usr aucr ON (acp.creator = aucr.id)
+              INNER JOIN actor.usr aued ON (acp.editor = aued.id)
+              LEFT JOIN (
+                SELECT bmp.record, bmp.label, bmp.label_sortkey, acmp.target_copy
+                FROM biblio.monograph_part bmp
+                INNER JOIN asset.copy_part_map acmp ON (acmp.part = bmp.id)
+                WHERE NOT bmp.deleted
+              ) part ON (part.record = acn.record AND part.target_copy = acp.id)
+
+            GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
+              16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
+              31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,
+              46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
+              61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,
+              76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,
+              91,92,93,94,95,96
+
+        ]]></oils_persist:source_definition>
+        <field_groups>
+            <group name="common" reporter:label="Common Fields"/>
+            <group name="dates" reporter:label="Date Fields"/>
+            <group name="title" reporter:label="Call Number and Title Fields"/>
+            <group name="org" reporter:label="Libraries"/>
+        </field_groups>
+        <fields oils_persist:primary="copy_id">
+            <field reporter:label="Item ID" name="copy_id" reporter:datatype="int" sr:suggest_transform="count_distinct"/>
+            <field reporter:label="Floating Group" name="floating_id" reporter:datatype="link" sr:hide_from="display"/>
+            <field reporter:label="Call Number" name="acn_id" reporter:datatype="int" sr:hide_from="display"/>
+            <field reporter:label="Circulating Library" name="circ_lib_id" reporter:datatype="org_unit" sr:hide_from="display" field_groups="org" sr:suggest_filter="true"/>
+            <field reporter:label="Item Status" name="status_id" reporter:datatype="link" sr:hide_from="display" field_groups="common" sr:suggest_filter="true"/>
+            <field reporter:label="Shelving Location" name="location_id" reporter:datatype="link" sr:hide_from="display" field_groups="common" sr:suggest_filter="true"/>
+            <field reporter:label="Age Protection" name="age_protect_id" reporter:datatype="link" sr:hide_from="display"/>
+            <field reporter:label="Circulating System" name="circ_sys_id" reporter:datatype="org_unit" sr:hide_from="display" field_groups="org"/>
+            <field reporter:label="Owning Library" name="owning_lib_id" reporter:datatype="org_unit" sr:hide_from="display" field_groups="org,common" sr:suggest_filter="true"/>
+            <field reporter:label="Owning System" name="owning_sys_id" reporter:datatype="org_unit" sr:hide_from="display" field_groups="org,common" sr:suggest_filter="true"/>
+            <field reporter:label="Inventory Workstation" name="inv_workstation_id" reporter:datatype="link" sr:hide_from="display"/>
+            <field reporter:label="Circulating Library Short (Policy) Name" name="circ_lib_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+            <field reporter:label="Circulating Library Name" name="circ_lib_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+            <field reporter:label="Circulating System Short (Policy) Name" name="circ_sys_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org"/>
+            <field reporter:label="Circulating System Name" name="circ_sys_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org"/>
+            <field reporter:label="Owning Library Short (Policy) Name" name="owning_lib_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+            <field reporter:label="Owning Library Name" name="owning_lib_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+            <field reporter:label="Owning System Short (Policy) Name" name="owning_sys_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org"/>
+            <field reporter:label="Owning System Name" name="owning_sys_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org"/>
+            <field reporter:label="Item Create Date/Time" name="create_date_time" reporter:datatype="timestamp" field_groups="dates"/>
+            <field reporter:label="Item Create Year" name="create_date_year" reporter:datatype="int" field_groups="dates"/>
+            <field reporter:label="Item Create Year and Month" name="create_date_year_mon" reporter:datatype="text" field_groups="dates"/>
+            <field reporter:label="Item Create Date" name="create_date_date" reporter:datatype="text" field_groups="dates"/>
+            <field reporter:label="Item Active Date/Time" name="active_date_time" reporter:datatype="timestamp" field_groups="dates"/>
+            <field reporter:label="Item Active Year" name="active_date_year" reporter:datatype="int" field_groups="dates"/>
+            <field reporter:label="Item Active Year and Month" name="active_date_year_mon" reporter:datatype="text" field_groups="dates"/>
+            <field reporter:label="Item Active Date" name="active_date_date" reporter:datatype="text" field_groups="dates"/>
+            <field reporter:label="Item Edit Date/Time" name="edit_date_time" reporter:datatype="timestamp" field_groups="dates"/>
+            <field reporter:label="Item Edit Year" name="edit_date_year" reporter:datatype="int" field_groups="dates"/>
+            <field reporter:label="Item Edit Year and Month" name="edit_date_year_mon" reporter:datatype="text" field_groups="dates"/>
+            <field reporter:label="Item Edit Date" name="edit_date_date" reporter:datatype="text" field_groups="dates"/>
+            <field reporter:label="Item Status Changed Date/Time" name="status_changed_time_time" reporter:datatype="timestamp" field_groups="dates"/>
+            <field reporter:label="Item Status Changed Year" name="status_changed_year" reporter:datatype="int" field_groups="dates"/>
+            <field reporter:label="Item Status Changed Year and Month" name="status_changed_year_mon" reporter:datatype="text" field_groups="dates"/>
+            <field reporter:label="Item Status Changed Date" name="status_changed_date" reporter:datatype="text" field_groups="dates"/>
+            <field reporter:label="Item Latest Inventory Date/Time" name="latest_inv_date" reporter:datatype="timestamp" field_groups="dates"/>
+            <field reporter:label="Item Latest Inventory Year" name="latest_inv_date_year" reporter:datatype="int" field_groups="dates"/>
+            <field reporter:label="Item Latest Inventory Year and Month" name="latest_inv_date_year_mon" reporter:datatype="text" field_groups="dates"/>
+            <field reporter:label="Item Latest Inventory Date" name="latest_inv_date_date" reporter:datatype="text" field_groups="dates"/>
+            <field reporter:label="Barcode" name="barcode" reporter:datatype="text" field_groups="common"/>
+            <field reporter:label="Item Status" name="status" reporter:datatype="text" sr:hide_from="filter" field_groups="common"/>
+            <field reporter:label="Shelving Location" name="location_name" reporter:datatype="text" sr:hide_from="filter" field_groups="common"/>
+            <field reporter:label="Circulation Modifier Code" name="copy_circ_modifier_code" reporter:datatype="link" field_groups="common" sr:suggest_filter="true"/>
+            <field reporter:label="Circulation Modifier Name" name="copy_circ_modifier_name" reporter:datatype="text" sr:hide_from="filter" field_groups="common"/>
+            <field reporter:label="Price" name="price" reporter:datatype="money" sr:suggest_transform="sum"/>
+            <field reporter:label="Acquisition Cost" name="acq_price" reporter:datatype="money" sr:suggest_transform="sum"/>
+            <field reporter:label="Item Deleted?" name="copy_deleted" reporter:datatype="bool" sr:suggest_filter="true"/>
+            <field reporter:label="Reference?" name="reference" reporter:datatype="bool"/>
+            <field reporter:label="Item Circulate?" name="copy_circulate" reporter:datatype="bool"/>
+            <field reporter:label="Circulate?" name="circulate" reporter:datatype="bool"/>
+            <field reporter:label="Item Holdable?" name="copy_holdable" reporter:datatype="bool"/>
+            <field reporter:label="Deposit?" name="deposit" reporter:datatype="bool"/>
+            <field reporter:label="Deposit Amount" name="deposit_amount" reporter:datatype="money" sr:suggest_transform="sum"/>
+            <field reporter:label="Alert Message" name="alert_message" reporter:datatype="text"/>
+            <field reporter:label="Item OPAC Visible?" name="copy_opac_visible" reporter:datatype="bool"/>
+            <field reporter:label="OPAC Visible?" name="opac_visible" reporter:datatype="bool"/>
+            <field reporter:label="Age Protection" name="age_protect" reporter:datatype="text" sr:hide_from="filter"/>
+            <field reporter:label="Currently Age Protected?" name="under_age_protection" reporter:datatype="bool" field_groups="common"/>
+            <field reporter:label="Holdable?" name="holdable" reporter:datatype="bool" field_groups="common"/>
+            <field reporter:label="Item Number" name="copy_number" reporter:datatype="int"/>
+            <field reporter:label="Circ as Type" name="circ_as_type" reporter:datatype="text"/>
+            <field reporter:label="Loan Duration Value" name="loan_duration_int" reporter:datatype="int"/>
+            <field reporter:label="Loan Duration" name="loan_duration" reporter:datatype="text"/>
+            <field reporter:label="Fine Level Value" name="fine_level_int" reporter:datatype="int"/>
+            <field reporter:label="Fine Level" name="fine_level" reporter:datatype="text"/>
+            <field reporter:label="Creating User" name="creating_user" reporter:datatype="text"/>
+            <field reporter:label="Editing User" name="editing_user" reporter:datatype="text"/>
+            <field reporter:label="Full Call Number" name="copy_call_number_full" reporter:datatype="text" field_groups="title,common"/>
+            <field reporter:label="Call Number Prefix" name="copy_call_number_prefix" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Call Number Label" name="copy_call_number_label" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Call Number Suffix" name="copy_call_number_suffix" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Full Call Number Sortkey" name="copy_call_number_sortkey_full" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Call Number Prefix Sortkey" name="copy_call_number_prefix_sortkey" reporter:datatype="text"/>
+            <field reporter:label="Call Number Label Sortkey" name="copy_call_number_label_sortkey" reporter:datatype="text"/>
+            <field reporter:label="Call Number Suffix Sortkey" name="copy_call_number_suffix_sortkey" reporter:datatype="text"/>
+            <field reporter:label="Title" name="title" reporter:datatype="text" field_groups="title,common"/>
+            <field reporter:label="Author" name="author" reporter:datatype="text" field_groups="title,common"/>
+            <field reporter:label="Publisher" name="publisher" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Publication Year" name="pubdate" reporter:datatype="int" field_groups="title"/>
+            <field reporter:label="ISBN" name="isbn" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="ISSN" name="issn" reporter:datatype="text" field_groups="title"/>
+            <field reporter:label="Monographic Part" name="part_label" reporter:datatype="text" field_groups="item,title"/>
+            <field reporter:label="Monographic Part Sortkey" name="part_label_sortkey" reporter:datatype="text" field_groups="item,title"/>
+            <field reporter:label="Bibliographic Record ID" name="bib_id" reporter:datatype="int" field_groups="title,common"/>
+            <field reporter:label="TCN" name="tcn_value" reporter:datatype="text" field_groups="title,common"/>
+            <field reporter:label="Call Number Deleted?" name="call_deleted" reporter:datatype="bool" sr:suggest_filter="true"/>
+            <field reporter:label="Bibliographic Record Deleted?" name="bib_deleted" reporter:datatype="bool" sr:suggest_filter="true"/>
+            <field reporter:label="Item Status Holdable?" name="status_holdable" reporter:datatype="bool"/>
+            <field reporter:label="Shelving Location Holdable?" name="location_holdable" reporter:datatype="bool"/>
+            <field reporter:label="Shelving Location Circulate?" name="location_circulate" reporter:datatype="bool"/>
+            <field reporter:label="Latest Inventory Workstation" name="inventory_workstation" reporter:datatype="text"/>
+            <field reporter:label="Estimated Price" name="est_price" reporter:datatype="money" sr:suggest_transform="sum"/>
+            <field reporter:label="Total Circulations" name="circ_total" reporter:datatype="int" sr:suggest_transform="sum" field_groups="common"/>
+            <field reporter:label="All Bibliographic Record Subjects" name="bib_subjects" reporter:datatype="text" sr:suggest_operator="contains"/>
+        </fields>
+        <links>
+            <link field="floating_id" reltype="might_have" key="id" map="" class="cfg"/>
+            <link field="status_id" reltype="has_a" key="id" map="" class="ccs"/>
+            <link sr:org_filter_field="owning_lib" field="location_id" reltype="has_a" key="id" map="" class="acpl"/>
+            <link field="copy_circ_modifier_code" reltype="might_have" key="code" map="" class="ccm"/>
+            <link field="age_protect_id" reltype="might_have" key="id" map="" class="crahp"/>
+            <link field="inv_workstation_id" reltype="might_have" key="id" map="" class="aws"/>
+        </links>
+    </class>
+
+    <class id="srwd" controller="simple-reporter.ui" oils_persist:virtual="true" reporter:label="Simple Reporter Weeding">
+        <oils_persist:source_definition><![CDATA[
+
+            SELECT
+              -- ids
+              acp.id AS copy_id,
+              acn.id AS acn_id,
+              acp.circ_lib AS circ_lib_id,
+              acp.status AS status_id,
+              acp.location AS location_id,
+              acp.age_protect AS age_protect_id,
+              aous.id AS circ_sys_id,
+              acn.owning_lib AS owning_lib_id,
+              aouos.id AS owning_sys_id,
+              awsi.id AS inv_workstation_id,
+
+              -- OUs
+              aou.shortname AS circ_lib_shortname,
+              aou.name AS circ_lib_name,
+              aous.shortname AS circ_sys_shortname,
+              aous.name AS circ_sys_name,
+              aouo.shortname AS owning_lib_shortname,
+              aouo.name AS owning_lib_name,
+              aouos.shortname AS owning_sys_shortname,
+              aouos.name AS owning_sys_name,
+
+              -- dates
+              acp.create_date AS create_date_time,
+              (EXTRACT(EPOCH FROM AGE(acp.create_date)) / 86400) AS item_age_days,
+              (EXTRACT(YEAR FROM AGE(acp.create_date)) * 12) + EXTRACT(MONTH FROM AGE(acp.create_date)) AS item_age_months,
+              EXTRACT(YEAR FROM AGE(acp.create_date)) AS item_age_years,
+              CAST(TO_CHAR(acp.create_date, 'YYYY') AS INTEGER) AS create_date_year,
+              TO_CHAR(acp.create_date, 'YYYY-MM') AS create_date_year_mon,
+              TO_CHAR(acp.create_date, 'YYYY-MM-DD') AS create_date_date,
+              acp.active_date AS active_date_time,
+              (EXTRACT(EPOCH FROM AGE(acp.active_date)) / 86400) AS item_active_days,
+              EXTRACT(YEAR FROM AGE(acp.active_date)) * 12 + EXTRACT(MONTH FROM AGE(acp.active_date)) AS item_active_months,
+              EXTRACT(YEAR FROM AGE(acp.active_date)) AS item_active_years,
+              CAST(TO_CHAR(acp.active_date, 'YYYY') AS INTEGER) AS active_date_year,
+              TO_CHAR(acp.active_date, 'YYYY-MM') AS active_date_year_mon,
+              TO_CHAR(acp.active_date, 'YYYY-MM-DD') AS active_date_date,
+              acp.edit_date AS edit_date_time,
+              (EXTRACT(EPOCH FROM AGE(acp.edit_date)) / 86400) AS item_edit_age_days,
+              (EXTRACT(YEAR FROM AGE(acp.edit_date)) * 12) + EXTRACT(MONTH FROM AGE(acp.edit_date)) AS item_edit_age_months,
+              EXTRACT(YEAR FROM AGE(acp.edit_date)) AS item_edit_age_years,
+              CAST(TO_CHAR(acp.edit_date, 'YYYY') AS INTEGER) AS edit_date_year,
+              TO_CHAR(acp.edit_date, 'YYYY-MM') AS edit_date_year_mon,
+              TO_CHAR(acp.edit_date, 'YYYY-MM-DD') AS edit_date_date,
+              acp.status_changed_time AS status_changed_time_time,
+              CAST(TO_CHAR(acp.status_changed_time, 'YYYY') AS INTEGER) AS status_changed_year,
+              TO_CHAR(acp.status_changed_time, 'YYYY-MM') AS status_changed_year_mon,
+              TO_CHAR(acp.status_changed_time, 'YYYY-MM-DD') AS status_changed_date,
+              ali.inventory_date AS latest_inv_date,
+              (EXTRACT(EPOCH FROM AGE(ali.inventory_date)) / 86400) AS inventory_age_days,
+              EXTRACT(YEAR FROM AGE(ali.inventory_date)) * 12 + EXTRACT(MONTH FROM AGE(ali.inventory_date)) AS inventory_age_months,
+              EXTRACT(YEAR FROM AGE(ali.inventory_date)) AS inventory_age_years,
+              CAST(TO_CHAR(ali.inventory_date, 'YYYY') AS INTEGER) AS inv_date_year,
+              TO_CHAR(ali.inventory_date, 'YYYY-MM') AS inv_date_year_mon,
+              TO_CHAR(ali.inventory_date, 'YYYY-MM-DD') AS inv_date_date,
+
+              -- acp
+              acp.barcode AS barcode,
+              ccs.name AS status,
+              acpl.name AS location_name,
+              acp.circ_modifier AS circ_modifier_code,
+              ccm.name AS circ_modifier_name,
+              acp.price AS price,
+              acp.cost AS acq_price,
+              acp.deleted AS copy_deleted,
+              acp.ref AS reference,
+              acp.circulate AS copy_circulate,
+              (acp.circulate AND acpl.circulate) AS circulate,
+              acp.holdable AS copy_holdable,
+              acp.deposit AS deposit,
+              acp.deposit_amount AS deposit_amount,
+              acp.alert_message AS alert_message,
+              acp.opac_visible AS copy_opac_visible,
+              (acp.opac_visible AND ccs.opac_visible) AS opac_visible,
+              crahp.name AS age_protect,
+              CASE WHEN acp.age_protect IS NULL THEN FALSE ELSE (now() - crahp.age) < acp.active_date END AS under_age_protection,
+              (acp.holdable AND ccs.holdable AND acpl.holdable) AS holdable,
+              acp.copy_number AS copy_number,
+              acp.circ_as_type AS circ_as_type,
+              acp.loan_duration AS loan_duration_int,
+              CASE acp.loan_duration WHEN 1 THEN 'short' WHEN 2 THEN 'medium' ELSE 'long' END AS loan_duration,
+              acp.fine_level AS fine_level_int,
+              CASE acp.fine_level WHEN 1 THEN 'low' WHEN 2 THEN 'medium' ELSE 'high' END AS fine_level,
+
+              -- Call Number
+              TRIM(BOTH ' ' FROM CONCAT_WS(' ', acnp.label, acn.label, acns.label)) AS copy_call_number_full,
+              acnp.label AS copy_call_number_prefix,
+              acn.label AS copy_call_number_label,
+              acns.label AS copy_call_number_suffix,
+              TRIM(BOTH ' ' FROM concat_ws(' ', acnp.label_sortkey, acn.label_sortkey, acns.label_sortkey)) AS copy_call_number_sortkey_full,
+              acnp.label_sortkey AS copy_call_number_prefix_sortkey,
+              acn.label_sortkey AS copy_call_number_label_sortkey,
+              acns.label_sortkey AS copy_call_number_suffix_sortkey,
+              racnd.dewey AS call_number_dewey,
+              racnd.dewey_block_tens AS call_number_dewey_block_tens,
+              racnd.dewey_block_hundreds AS call_number_dewey_block_hundreds,
+              racnd.dewey_range_tens AS call_number_dewey_range_tens,
+              racnd.dewey_range_hundreds AS call_number_dewey_range_hundreds,
+
+              -- Misc
+              COALESCE(rmsr.title, acp.dummy_title) AS title,
+              COALESCE(rmsr.author, acp.dummy_author) AS author,
+              rmsr.publisher AS publisher,
+              public.approximate_date(rmsr.pubdate, '0') AS pubdate,
+              COALESCE(array_to_string(rmsr.isbn, ', '), acp.dummy_isbn) AS isbn,
+              array_to_string(rmsr.issn, ', ') AS issn,
+              part.label AS part_label,
+              part.label_sortkey AS part_label_sortkey,
+              acn.record AS bib_id,
+              rmsr.tcn_value AS tcn_value,
+              acn.deleted AS call_deleted,
+              bre.deleted AS bib_deleted,
+              ccs.holdable AS status_holdable,
+              acpl.holdable AS location_holdable,
+              acp.circulate AS location_circulate,
+              awsi.name AS inventory_workstation,
+
+              -- Aggregates
+              -- may decide these price games aren't worth it, but estimated collection value is useful
+              COALESCE(acp.cost, acp.price, (select first(value::numeric(8,2)) from actor.org_unit_ancestor_setting('cat.default_item_price', acp.circ_lib)), 5.00) AS est_price,
+              STRING_AGG(mfde_subj.value, ', ') AS bib_subjects,
+              MAX(combcirc.xact_start) AS last_circ_datetime,
+              (EXTRACT(EPOCH FROM AGE(MAX(combcirc.xact_start))) / 86400) AS last_circ_age_days,
+              (EXTRACT(YEAR FROM AGE(MAX(combcirc.xact_start))) * 12) + EXTRACT(MONTH FROM AGE(MAX(combcirc.xact_start))) AS last_circ_age_months,
+              EXTRACT(YEAR FROM AGE(MAX(combcirc.xact_start))) AS last_circ_age_years,
+              CAST(TO_CHAR(MAX(combcirc.xact_start), 'YYYY') AS INTEGER) AS last_circ_year,
+              TO_CHAR(MAX(combcirc.xact_start), 'YYYY-MM') AS last_circ_year_mon,
+              TO_CHAR(MAX(combcirc.xact_start), 'YYYY-MM-DD') AS last_circ_date,
+              COALESCE(MAX(combcirc.xact_start), acp.create_date) AS last_circ_create_datetime,
+              (EXTRACT(EPOCH FROM AGE(COALESCE(MAX(combcirc.xact_start), acp.create_date))) / 86400) AS last_circ_create_age_days,
+              (EXTRACT(YEAR FROM AGE(COALESCE(MAX(combcirc.xact_start), acp.create_date))) * 12) + EXTRACT(MONTH FROM AGE(COALESCE(MAX(combcirc.xact_start), acp.create_date))) AS last_circ_create_age_months,
+              EXTRACT(YEAR FROM AGE(COALESCE(MAX(combcirc.xact_start), acp.create_date))) AS last_circ_create_age_years,
+              CAST(TO_CHAR(COALESCE(MAX(combcirc.xact_start), acp.create_date), 'YYYY') AS INTEGER) AS last_circ_create_year,
+              TO_CHAR(COALESCE(MAX(combcirc.xact_start), acp.create_date), 'YYYY-MM') AS last_circ_create_year_mon,
+              TO_CHAR(COALESCE(MAX(combcirc.xact_start), acp.create_date), 'YYYY-MM-DD') AS last_circ_create_date,
+              COUNT(DISTINCT combcirc.id) AS circ_total, -- good for finding low performers to lose or ragged copies to replace
+              COUNT(DISTINCT CASE WHEN date_part('year', now()) = date_part('year', combcirc.xact_start) THEN combcirc.id ELSE NULL END) AS circ_ytd,
+              COUNT(DISTINCT CASE WHEN date_part('year', now() - '1 year'::interval) = date_part('year', combcirc.xact_start) THEN combcirc.id ELSE NULL END) AS circ_last_year,
+              COUNT(DISTINCT CASE WHEN date_part('year', now() - '2 year'::interval) = date_part('year', combcirc.xact_start) THEN combcirc.id ELSE NULL END) AS circ_two_years_ago,
+              COUNT(DISTINCT CASE WHEN date_part('year', now() - '3 year'::interval) = date_part('year', combcirc.xact_start) THEN combcirc.id ELSE NULL END) AS circ_three_years_ago,
+              COUNT(DISTINCT CASE WHEN date_part('year', now() - '5 year'::interval) <= date_part('year', combcirc.xact_start) THEN combcirc.id ELSE NULL END) AS circ_last_five_years
+
+            FROM
+              asset.copy acp
+              LEFT JOIN config.circ_modifier ccm ON (acp.circ_modifier = ccm.code)
+              INNER JOIN asset.call_number acn ON (acp.call_number = acn.id)
+              LEFT JOIN reporter.asset_call_number_dewey racnd ON (acn.id = racnd.call_number)
+              INNER JOIN config.copy_status ccs ON (acp.status = ccs.id)
+              LEFT JOIN config.rule_age_hold_protect crahp ON (acp.age_protect = crahp.id)
+              INNER JOIN asset.copy_location acpl ON (acp.location = acpl.id)
+              INNER JOIN asset.call_number_prefix acnp ON (acn.prefix = acnp.id)
+              INNER JOIN asset.call_number_suffix acns ON (acn.suffix = acns.id)
+              LEFT JOIN asset.latest_inventory ali ON (acp.id = ali.copy)
+              LEFT JOIN actor.workstation awsi ON (ali.inventory_workstation = awsi.id)
+              LEFT JOIN reporter.materialized_simple_record rmsr ON (acn.record = rmsr.id)
+              INNER JOIN actor.org_unit aou ON (acp.circ_lib = aou.id)
+              LEFT JOIN actor.org_unit aous ON ((actor.org_unit_ancestor_at_depth(acp.circ_lib, 1)).id = aous.id)
+              INNER JOIN actor.org_unit aouo ON (acn.owning_lib = aouo.id)
+              LEFT JOIN actor.org_unit aouos ON ((actor.org_unit_ancestor_at_depth(acn.owning_lib, 1)).id = aouos.id)
+              INNER JOIN biblio.record_entry bre ON (acn.record = bre.id)
+              LEFT JOIN metabib.flat_display_entry mfde_subj ON (acn.record = mfde_subj.source AND mfde_subj.name = 'subject')
+              LEFT JOIN action.all_circulation combcirc ON (acp.id = combcirc.target_copy)
+              LEFT JOIN (
+                SELECT bmp.record, bmp.label, bmp.label_sortkey, acmp.target_copy
+                FROM biblio.monograph_part bmp
+                INNER JOIN asset.copy_part_map acmp ON (acmp.part = bmp.id)
+                WHERE NOT bmp.deleted
+              ) part ON (part.record = acn.record AND part.target_copy = acp.id)
+
+            GROUP BY 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,
+              16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,
+              31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,
+              46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,
+              61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,
+              76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,
+              91,92,93,94,95,96,97,98,99,100,101,102,103,104,105
+
+        ]]></oils_persist:source_definition>
+        <field_groups>
+            <group name="common" reporter:label="Common Fields"/>
+            <group name="dates" reporter:label="Date Fields"/>
+            <group name="inv" reporter:label="Inventory Fields"/>
+            <group name="title" reporter:label="Call Number and Title Fields"/>
+            <group name="org" reporter:label="Libraries"/>
+        </field_groups>
+        <fields oils_persist:primary="copy_id">
+             <field reporter:label="Item ID" name="copy_id" reporter:datatype="int" sr:suggest_transform="count_distinct" field_groups="common"/>
+             <field reporter:label="Call Number ID" name="acn_id" reporter:datatype="int" sr:hide_from="display"/>
+             <field reporter:label="Circulating Library" name="circ_lib_id" reporter:datatype="org_unit" sr:hide_from="display" field_groups="org,common" sr:suggest_filter="true"/>
+             <field reporter:label="Item Status" name="status_id" reporter:datatype="link" sr:hide_from="display" sr:suggest_filter="true"/>
+             <field reporter:label="Shelving Location" name="location_id" reporter:datatype="link" sr:hide_from="display" field_groups="common" sr:suggest_filter="true"/>
+             <field reporter:label="Age Protection" name="age_protect_id" reporter:datatype="link" sr:hide_from="display"/>
+             <field reporter:label="Circulating System" name="circ_sys_id" reporter:datatype="org_unit" sr:hide_from="display" field_groups="org,common"/>
+             <field reporter:label="Owning Library" name="owning_lib_id" reporter:datatype="org_unit" sr:hide_from="display" field_groups="org,common" sr:suggest_filter="true"/>
+             <field reporter:label="Owning System" name="owning_sys_id" reporter:datatype="org_unit" sr:hide_from="display" field_groups="org,common"/>
+             <field reporter:label="Last Inventory Workstation" name="inv_workstation_id" reporter:datatype="link" sr:hide_from="display" field_groups="inv"/>
+             <field reporter:label="Circulating Library Short (Policy) Name" name="circ_lib_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+             <field reporter:label="Circulating Library Name" name="circ_lib_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org"/>
+             <field reporter:label="Circulating System Short (Policy) Name" name="circ_sys_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+             <field reporter:label="Circulating System Name" name="circ_sys_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org"/>
+             <field reporter:label="Owning Library Short (Policy) Name" name="owning_lib_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+             <field reporter:label="Owning Library Name" name="owning_lib_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+             <field reporter:label="Owning System Short (Policy) Name" name="owning_sys_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org"/>
+             <field reporter:label="Owning System Name" name="owning_sys_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org"/>
+             <field reporter:label="Last Circulated Date / Time" name="last_circ_datetime" reporter:datatype="timestamp" field_groups="dates,common" sr:suggest_filter="true"/>
+             <field reporter:label="Last Circulated Days Ago" name="last_circ_age_days" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Circluated Months Ago" name="last_circ_age_months" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Circulated Years Ago" name="last_circ_age_years" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Circulated Year" name="last_circ_year" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Circulated Year and Month" name="last_circ_year_mon" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Last Circulated Date" name="last_circ_date" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Last Circulated or Item Created Date / Time" name="last_circ_create_datetime" reporter:datatype="timestamp" field_groups="dates,common" sr:suggest_filter="true"/>
+             <field reporter:label="Last Circulated or Item Created Days Ago" name="last_circ_create_age_days" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Circulated or Item Created Months Ago" name="last_circ_create_age_months" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Circulated or Item Created Years Ago" name="last_circ_create_age_years" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Circulated or Item Created Year" name="last_circ_create_year" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Circulated or Item Created Year and Month" name="last_circ_create_year_mon" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Last Circulated or Item Created Date" name="last_circ_create_date" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Create Date / Time" name="create_date_time" reporter:datatype="timestamp" field_groups="dates"/>
+             <field reporter:label="Item Age (Days)" name="item_age_days" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Item Age (Months)" name="item_age_months" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Item Age (Years)" name="item_age_years" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Create Date Year" name="create_date_year" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Create Date Year and Month" name="create_date_year_mon" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Create Date" name="create_date_date" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Active Date / Time" name="active_date_time" reporter:datatype="timestamp" field_groups="dates"/>
+             <field reporter:label="Active For (Days)" name="item_active_days" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Active For (Months)" name="item_active_months" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Active For (Years)" name="item_active_years" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Active Date Year" name="active_date_year" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Active Date Year and Month" name="active_date_year_mon" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Active Date" name="active_date_date" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Last Edit Date / Time" name="edit_date_time" reporter:datatype="timestamp" field_groups="dates"/>
+             <field reporter:label="Last Edited Days Ago" name="item_edit_age_days" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Edited Months Ago" name="item_edit_age_months" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Edited Years Ago" name="item_edit_age_years" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Edit Date Year" name="edit_date_year" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Last Edit Date Year and Month" name="edit_date_year_mon" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Last Edit Date" name="edit_date_date" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Item Status Changed Date / Time" name="status_changed_time_time" reporter:datatype="timestamp" field_groups="dates"/>
+             <field reporter:label="Item Status Changed Year" name="status_changed_year" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Item Status Changed Year and Month" name="status_changed_year_mon" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Item Status Changed Date" name="status_changed_date" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Last Inventoried Date / Time" name="latest_inv_date" reporter:datatype="timestamp" field_groups="inv,dates"/>
+             <field reporter:label="Last Inventoried Days Ago" name="inventory_age_days" reporter:datatype="int" field_groups="inv,dates"/>
+             <field reporter:label="Last Inventoried Months Ago" name="inventory_age_months" reporter:datatype="int" field_groups="inv,dates"/>
+             <field reporter:label="Last Inventoried Years Ago" name="inventory_age_years" reporter:datatype="int" field_groups="inv,dates"/>
+             <field reporter:label="Last Inventoried Year" name="inv_date_year" reporter:datatype="int" field_groups="inv,dates"/>
+             <field reporter:label="Last Inventoried Year and Month" name="inv_date_year_mon" reporter:datatype="text" field_groups="inv,dates"/>
+             <field reporter:label="Last Inventoried Date" name="inv_date_date" reporter:datatype="text" field_groups="inv,dates"/>
+             <field reporter:label="Barcode" name="barcode" reporter:datatype="text" field_groups="common"/>
+             <field reporter:label="Item Status" name="status" reporter:datatype="text" field_groups="common"/>
+             <field reporter:label="Shelving Location" name="location_name" reporter:datatype="text" field_groups="common"/>
+             <field reporter:label="Circulation Modifier Code" name="circ_modifier_code" reporter:datatype="text" field_groups="common" sr:suggest_filter="true"/>
+             <field reporter:label="Circulation Modifier Name" name="circ_modifier_name" reporter:datatype="text" sr:hide_from="filter" field_groups="common"/>
+             <field reporter:label="Price" name="price" reporter:datatype="money" sr:suggest_transform="sum"/>
+             <field reporter:label="Acquisition Cost" name="acq_price" reporter:datatype="money" sr:suggest_transform="sum"/>
+             <field reporter:label="Item Deleted?" name="copy_deleted" reporter:datatype="bool" sr:suggest_filter="true"/>
+             <field reporter:label="Reference?" name="reference" reporter:datatype="bool"/>
+             <field reporter:label="Item Circulate?" name="copy_circulate" reporter:datatype="bool"/>
+             <field reporter:label="Circulate?" name="circulate" reporter:datatype="bool"/>
+             <field reporter:label="Item Holdable?" name="copy_holdable" reporter:datatype="bool"/>
+             <field reporter:label="Deposit?" name="deposit" reporter:datatype="bool"/>
+             <field reporter:label="Deposit Amount" name="deposit_amount" reporter:datatype="money" sr:suggest_transform="sum"/>
+             <field reporter:label="Alert Messge" name="alert_message" reporter:datatype="text"/>
+             <field reporter:label="Item OPAC Visible?" name="copy_opac_visible" reporter:datatype="bool"/>
+             <field reporter:label="OPAC Visible?" name="opac_visible" reporter:datatype="bool"/>
+             <field reporter:label="Age Protection Rule" name="age_protect" reporter:datatype="text" sr:hide_from="filter"/>
+             <field reporter:label="Under Age Protection?" name="under_age_protection" reporter:datatype="bool"/>
+             <field reporter:label="Holdable?" name="holdable" reporter:datatype="bool"/>
+             <field reporter:label="Item Number" name="copy_number" reporter:datatype="int"/>
+             <field reporter:label="Item Circ As Type" name="circ_as_type" reporter:datatype="text"/>
+             <field reporter:label="Loan Duration (Int)" name="loan_duration_int" reporter:datatype="int"/>
+             <field reporter:label="Loan Duration" name="loan_duration" reporter:datatype="text"/>
+             <field reporter:label="Fine Level (Int)" name="fine_level_int" reporter:datatype="int"/>
+             <field reporter:label="Fine Level" name="fine_level" reporter:datatype="text"/>
+             <field reporter:label="Full Call Number" name="copy_call_number_full" reporter:datatype="text" field_groups="title,common"/>
+             <field reporter:label="Call Number Prefix" name="copy_call_number_prefix" reporter:datatype="text" field_groups="title"/>
+             <field reporter:label="Call Number Label" name="copy_call_number_label" reporter:datatype="text" field_groups="title,common"/>
+             <field reporter:label="Call Number Suffix" name="copy_call_number_suffix" reporter:datatype="text" field_groups="title"/>
+             <field reporter:label="Call Number Dewey" name="call_number_dewey" reporter:datatype="text" field_groups="title"/>
+             <field reporter:label="Full Call Number Sortkey" name="copy_call_number_sortkey_full" reporter:datatype="text" field_groups="title"/>
+             <field reporter:label="Call Number Prefix Sortkey" name="copy_call_number_prefix_sortkey" reporter:datatype="text"/>
+             <field reporter:label="Call Number Label Sortkey" name="copy_call_number_label_sortkey" reporter:datatype="text"/>
+             <field reporter:label="Call Number Suffix Sortkey" name="copy_call_number_suffix_sortkey" reporter:datatype="text"/>
+             <field reporter:label="Call Number Dewey Block Tens" name="call_number_dewey_block_tens" reporter:datatype="text" field_groups="title,common"/>
+             <field reporter:label="Call Number Dewey Block Hundreds" name="call_number_dewey_block_hundreds" reporter:datatype="text" field_groups="title,common"/>
+             <field reporter:label="Call Number Dewey Range Tens" name="call_number_dewey_range_tens" reporter:datatype="text" field_groups="title"/>
+             <field reporter:label="Call Number Dewey Range Hundreds" name="call_number_dewey_range_hundreds" reporter:datatype="text" field_groups="title"/>
+             <field reporter:label="Title" name="title" reporter:datatype="text" field_groups="title,common"/>
+             <field reporter:label="Author" name="author" reporter:datatype="text" field_groups="title,common"/>
+             <field reporter:label="Publisher" name="publisher" reporter:datatype="text" field_groups="title"/>
+             <field reporter:label="Publication Year" name="pubdate" reporter:datatype="int" field_groups="title"/>
+             <field reporter:label="ISBN" name="isbn" reporter:datatype="text" field_groups="title"/>
+             <field reporter:label="ISSN" name="issn" reporter:datatype="text" field_groups="title"/>
+             <field reporter:label="Monographic Part" name="part_label" reporter:datatype="text" field_groups="item,title"/>
+             <field reporter:label="Monographic Part Sortkey" name="part_label_sortkey" reporter:datatype="text" field_groups="item,title"/>
+             <field reporter:label="Bibliographic Record ID" name="bib_id" reporter:datatype="int" field_groups="title,common"/>
+             <field reporter:label="TCN" name="tcn_value" reporter:datatype="text" field_groups="title,common"/>
+             <field reporter:label="Call Number Deleted?" name="call_deleted" reporter:datatype="bool"/>
+             <field reporter:label="Bibliographic Record Deleted?" name="bib_deleted" reporter:datatype="bool"/>
+             <field reporter:label="Item Status Holdable?" name="status_holdable" reporter:datatype="bool"/>
+             <field reporter:label="Shelving Location Holdable?" name="location_holdable" reporter:datatype="bool"/>
+             <field reporter:label="Shelving Location Circulate?" name="location_circulate" reporter:datatype="bool"/>
+             <field reporter:label="Latest Inventory Workstation" name="inventory_workstation" reporter:datatype="text" field_groups="inv"/>
+             <field reporter:label="Estimated Price" name="est_price" reporter:datatype="money" sr:suggest_transform="sum"/>
+             <field reporter:label="All Subjects" name="bib_subjects" reporter:datatype="text" sr:suggest_operator="contains"/>
+             <field reporter:label="Circulation Total" name="circ_total" reporter:datatype="int" sr:suggest_transform="sum" sr:suggest_filter="true" field_groups="common"/>
+             <field reporter:label="Circulation Year To Date" name="circ_ytd" reporter:datatype="int" sr:suggest_transform="sum" sr:suggest_filter="true" field_groups="common"/>
+             <field reporter:label="Circulation Last Year" name="circ_last_year" reporter:datatype="int" sr:suggest_transform="sum" sr:suggest_filter="true" field_groups="common"/>
+             <field reporter:label="Circulation Two Years Ago" name="circ_two_years_ago" reporter:datatype="int" sr:suggest_transform="sum" sr:suggest_filter="true" field_groups="common"/>
+             <field reporter:label="Circulation Three Years Ago" name="circ_three_years_ago" reporter:datatype="int" sr:suggest_transform="sum" sr:suggest_filter="true" field_groups="common"/>
+             <field reporter:label="Circulation Total Last Five Years" name="circ_last_five_years" reporter:datatype="int" sr:suggest_transform="sum" sr:suggest_filter="true" field_groups="common"/>
+        </fields>
+        <links>
+            <link field="status_id" reltype="has_a" key="id" map="" class="ccs"/>
+            <link sr:org_filter_field="owning_lib" field="location_id" reltype="has_a" key="id" map="" class="acpl"/>
+            <link field="circ_modifier_code" reltype="might_have" key="code" map="" class="ccm"/>
+            <link field="age_protect_id" reltype="might_have" key="id" map="" class="crahp"/>
+            <link field="inv_workstation_id" reltype="might_have" key="id" map="" class="aws"/>
+        </links>
+    </class>
+
+    <class id="srbps" controller="simple-reporter.ui" oils_persist:virtual="true" reporter:label="Simple Reporter Billing and Payments Transaction Summary">
+        <oils_persist:source_definition><![CDATA[
+
+            SELECT
+              -- ids
+              xact.id AS xact_id,
+              COALESCE(circ.circ_lib, mg.billing_location) AS billing_lib_id,
+              COALESCE(aoubs.id, aougbs.id) AS billing_sys_id,
+
+              -- OUs
+              COALESCE(aoub.shortname, aougb.shortname) AS billing_lib_shortname,
+              COALESCE(aoub.name, aougb.shortname) AS billing_lib_name,
+              COALESCE(aoubs.shortname, aougbs.shortname) AS billing_sys_shortname,
+              COALESCE(aoubs.name, aougbs.name) AS billing_sys_name,
+
+              -- billings
+              billings.total_amount AS billing_grand_total,
+              billings.total_unvoided_amount AS billing_total,
+
+              billings.voided_billing_count AS billing_voided_count,
+              billings.all_billing_types AS all_billing_types,
+              billings.billing_types AS billing_types,
+
+              billings.total_voided_amount AS billing_total_voided,
+              billings.total_overdue_amount AS billing_overdue_amount,
+              billings.total_lost_amount AS billing_lost_amount,
+              billings.total_long_od_amount AS billing_long_od_amount,
+              billings.total_damaged_amount AS billing_damaged_amount,
+              billings.total_deposit_amount AS billing_deposit_amount,
+              billings.total_rental_amount AS billing_rental_amount,
+
+              -- payments
+              payments.total_amount AS payment_grand_total,
+              payments.total_unvoided_amount AS payment_total,
+
+              payments.voided_payment_count AS payment_voided_count,
+              payments.all_payment_types AS all_payment_types,
+              payments.payment_types AS payment_types,
+
+              payments.total_voided_amount AS payment_total_voided,
+              payments.total_account_adjustment AS payment_account_adjustment_amount,
+              payments.total_cash_payment AS payment_cash_amount,
+              payments.total_check_payment AS payment_check_amount,
+              payments.total_credit_card_payment AS payment_credit_card_amount,
+              payments.total_debit_card_payment AS payment_debit_card_amount,
+              payments.total_credit_payment AS payment_credit_amount,
+              payments.total_forgive_payment AS payment_forgive_amount,
+              payments.total_work_payment AS payment_work_amount,
+              payments.total_goods_payment AS payment_goods_amount,
+              payments.total_currency_payment AS payment_currency_amount,
+              payments.total_non_currency_payment AS payment_non_currency_amount,
+
+              -- dates
+              xact.xact_start AS xact_start,
+              CAST(TO_CHAR(xact.xact_start, 'YYYY') AS INTEGER) AS xact_start_year,
+              TO_CHAR(xact.xact_start, 'YYYY-MM') AS xact_start_year_mon,
+              TO_CHAR(xact.xact_start, 'YYYY-MM-DD') AS xact_start_date,
+              xact.xact_finish AS xact_finish,
+              CAST(TO_CHAR(xact.xact_finish, 'YYYY') AS INTEGER) AS xact_finish_year,
+              TO_CHAR(xact.xact_finish, 'YYYY-MM') AS xact_finish_year_mon,
+              TO_CHAR(xact.xact_finish, 'YYYY-MM-DD') AS xact_finish_date,
+              billings.earliest_billing_ts AS earliest_billing_ts,
+              CAST(TO_CHAR(billings.earliest_billing_ts, 'YYYY') AS INTEGER) AS earliest_billing_year,
+              TO_CHAR(billings.earliest_billing_ts, 'YYYY-MM') AS earliest_billing_year_mon,
+              TO_CHAR(billings.earliest_billing_ts, 'YYYY-MM-DD') AS earliest_billing_date,
+              billings.latest_billing_ts AS latest_billing_ts,
+              CAST(TO_CHAR(billings.latest_billing_ts, 'YYYY') AS INTEGER) AS latest_billing_year,
+              TO_CHAR(billings.latest_billing_ts, 'YYYY-MM') AS latest_billing_year_mon,
+              TO_CHAR(billings.latest_billing_ts, 'YYYY-MM-DD') AS latest_billing_date,
+              payments.earliest_payment_ts AS earliest_payment_ts,
+              CAST(TO_CHAR(payments.earliest_payment_ts, 'YYYY') AS INTEGER) AS earliest_payment_year,
+              TO_CHAR(payments.earliest_payment_ts, 'YYYY-MM') AS earliest_payment_year_mon,
+              TO_CHAR(payments.earliest_payment_ts, 'YYYY-MM-DD') AS earliest_payment_date,
+              payments.latest_payment_ts AS latest_payment_ts,
+              CAST(TO_CHAR(payments.latest_payment_ts, 'YYYY') AS INTEGER) AS latest_payment_year,
+              TO_CHAR(payments.latest_payment_ts, 'YYYY-MM') AS latest_payment_year_mon,
+              TO_CHAR(payments.latest_payment_ts, 'YYYY-MM-DD') AS latest_payment_date,
+
+              -- Misc
+              CASE WHEN circ.id IS NOT NULL THEN 'circulation' WHEN mg.id IS NOT NULL THEN 'grocery' ELSE 'aged' END AS xact_type,
+              (xact.xact_finish IS NOT NULL) AS xact_closed
+
+            FROM
+              money.billable_xact xact
+              LEFT JOIN action.circulation circ ON (xact.id = circ.id)
+              LEFT JOIN money.grocery mg ON (xact.id = mg.id)
+              LEFT JOIN actor.org_unit aoub ON (circ.circ_lib = aoub.id)
+              LEFT JOIN actor.org_unit aougb ON (mg.billing_location = aougb.id)
+              LEFT JOIN actor.org_unit aoubs ON ((actor.org_unit_ancestor_at_depth(circ.circ_lib, 1)).id = aoubs.id)
+              LEFT JOIN actor.org_unit aougbs ON ((actor.org_unit_ancestor_at_depth(mg.billing_location, 1)).id = aougbs.id)
+
+              -- oohh nooo.... If not done this way you encounter situations
+              -- like multiplying billing totals x number of payments and
+              -- payment totals x number of billings and other fabulous fiduciary fantasies.
+              LEFT JOIN (
+                SELECT
+                  xact,
+                  MIN(billing_ts) AS earliest_billing_ts,
+                  MAX(billing_ts) AS latest_billing_ts,
+
+                  STRING_AGG(DISTINCT billing_type, ', ') AS all_billing_types,
+                  STRING_AGG(DISTINCT CASE WHEN NOT voided THEN billing_type ELSE NULL END, ', ') AS billing_types,
+                  COUNT(DISTINCT CASE WHEN voided THEN id ELSE NULL END) AS voided_billing_count,
+
+                  SUM(amount) AS total_amount,
+                  SUM(CASE WHEN NOT voided THEN amount ELSE NULL END) AS total_unvoided_amount,
+                  SUM(CASE WHEN voided THEN amount ELSE NULL END) AS total_voided_amount,
+                  SUM(CASE WHEN NOT voided AND btype = 1 THEN amount ELSE NULL END) AS total_overdue_amount,
+                  SUM(CASE WHEN NOT voided AND btype IN (3,4) THEN amount ELSE NULL END) AS total_lost_amount,
+                  SUM(CASE WHEN NOT voided AND btype IN (10,11) THEN amount ELSE NULL END) AS total_long_od_amount,
+                  SUM(CASE WHEN NOT voided AND btype IN (7,8) THEN amount ELSE NULL END) AS total_damaged_amount, -- Likely incomplete because damaged billing interface is whack.
+                  SUM(CASE WHEN NOT voided AND btype = 5 THEN amount ELSE NULL END) AS total_deposit_amount,
+                  SUM(CASE WHEN NOT voided AND btype = 6 THEN amount ELSE NULL END) AS total_rental_amount
+
+                FROM
+                  money.all_billings
+                GROUP BY 1
+              ) billings ON (xact.id = billings.xact)
+              -- Can't include accepting user or cash_drawer because that will "duplicate"
+              -- rows if multiple staff accept payments on a single xact...
+              LEFT JOIN (
+                SELECT
+                  xact,
+                  MIN(payment_ts) AS earliest_payment_ts,
+                  MAX(payment_ts) AS latest_payment_ts,
+
+                  STRING_AGG(DISTINCT payment_type, ', ') AS all_payment_types,
+                  STRING_AGG(DISTINCT CASE WHEN NOT voided THEN payment_type ELSE NULL END, ', ') AS payment_types,
+                  COUNT(DISTINCT CASE WHEN voided THEN id ELSE NULL END) AS voided_payment_count,
+
+                  SUM(amount) AS total_amount,
+                  SUM(CASE WHEN NOT voided THEN amount ELSE NULL END) AS total_unvoided_amount,
+                  SUM(CASE WHEN voided THEN amount ELSE NULL END) AS total_voided_amount, -- almost certainly 0 in every database, but...
+                  SUM(CASE WHEN NOT voided AND payment_type = 'account_adjustment' THEN amount ELSE NULL END) AS total_account_adjustment,
+                  SUM(CASE WHEN NOT voided AND payment_type = 'cash_payment' THEN amount ELSE NULL END) AS total_cash_payment,
+                  SUM(CASE WHEN NOT voided AND payment_type = 'check_payment' THEN amount ELSE NULL END) AS total_check_payment,
+                  SUM(CASE WHEN NOT voided AND payment_type = 'credit_card_payment' THEN amount ELSE NULL END) AS total_credit_card_payment,
+                  SUM(CASE WHEN NOT voided AND payment_type = 'debit_card_payment' THEN amount ELSE NULL END) AS total_debit_card_payment,
+                  SUM(CASE WHEN NOT voided AND payment_type = 'credit_payment_payment' THEN amount ELSE NULL END) AS total_credit_payment,
+                  SUM(CASE WHEN NOT voided AND payment_type = 'forgive_payment' THEN amount ELSE NULL END) AS total_forgive_payment,
+                  SUM(CASE WHEN NOT voided AND payment_type = 'work_payment' THEN amount ELSE NULL END) AS total_work_payment,
+                  SUM(CASE WHEN NOT voided AND payment_type = 'goods_payment' THEN amount ELSE NULL END) AS total_goods_payment,
+                  SUM(CASE WHEN NOT voided AND payment_type IN ('cash_payment', 'check_payment', 'credit_card_payment', 'debit_card_payment', 'credit_payment') THEN amount ELSE NULL END) AS total_currency_payment,
+                  SUM(CASE WHEN NOT voided AND payment_type NOT IN ('cash_payment', 'check_payment', 'credit_card_payment', 'debit_card_payment', 'credit_payment') THEN amount ELSE NULL END) AS total_non_currency_payment
+
+                FROM
+                  money.all_payments
+                GROUP BY 1
+              ) payments ON (xact.id = payments.xact)
+
+        ]]></oils_persist:source_definition>
+        <field_groups>
+            <group name="common" reporter:label="Common Fields"/>
+            <group name="bill" reporter:label="Billing Fields"/>
+            <group name="pay" reporter:label="Payment Fields"/>
+            <group name="dates" reporter:label="Date Fields"/>
+            <group name="org" reporter:label="Libraries"/>
+        </field_groups>
+        <fields oils_persist:primary="xact_id">
+             <field reporter:label="Transaction ID" name="xact_id" reporter:datatype="text" sr:suggest_transform="count_distinct" field_groups="common"/>
+             <field reporter:label="Billing Library" name="billing_lib_id" reporter:datatype="org_unit" sr:hide_from="display" sr:suggest_filter="true" field_groups="org,common"/>
+             <field reporter:label="Billing System" name="billing_sys_id" reporter:datatype="org_unit" sr:hide_from="display" sr:suggest_filter="true" field_groups="org,common"/>
+             <field reporter:label="Billing Library Short (Policy) Name" name="billing_lib_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+             <field reporter:label="Billing Library Name" name="billing_lib_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+             <field reporter:label="Billing System Short (Policy) Name" name="billing_sys_shortname" reporter:datatype="text" sr:hide_from="filter" field_groups="org,common"/>
+             <field reporter:label="Billing System Name" name="billing_sys_name" reporter:datatype="text" sr:hide_from="filter" field_groups="org"/>
+             <field reporter:label="Billing Grand Total (Includes Voids)" name="billing_grand_total" reporter:datatype="money" field_groups="bill" sr:suggest_transform="sum"/>
+             <field reporter:label="Billing Total" name="billing_total" reporter:datatype="money" sr:suggest_filter="true" field_groups="bill,common" sr:suggest_transform="sum"/>
+             <field reporter:label="Voided Billings" name="billing_voided_count" reporter:datatype="text" field_groups="bill,common"/>
+             <field reporter:label="Billing Types (Include Voids)" name="all_billing_types" reporter:datatype="text" field_groups="bill" sr:suggest_operator="contains"/>
+             <field reporter:label="Billing Types" name="billing_types" reporter:datatype="text" field_groups="bill,common" sr:suggest_operator="contains"/>
+             <field reporter:label="Billing Amount Voided" name="billing_total_voided" reporter:datatype="money" field_groups="bill" sr:suggest_transform="sum"/>
+             <field reporter:label="Billing Total (Overdue)" name="billing_overdue_amount" reporter:datatype="money" field_groups="bill" sr:suggest_transform="sum"/>
+             <field reporter:label="Billing Total (Lost)" name="billing_lost_amount" reporter:datatype="money" field_groups="bill" sr:suggest_transform="sum"/>
+             <field reporter:label="Billing Total (Long Overdue)" name="billing_long_od_amount" reporter:datatype="money" field_groups="bill" sr:suggest_transform="sum"/>
+             <field reporter:label="Billing Total (Damaged)" name="billing_damaged_amount" reporter:datatype="money" field_groups="bill" sr:suggest_transform="sum"/>
+             <field reporter:label="Billing Total (Deposit)" name="billing_deposit_amount" reporter:datatype="money" field_groups="bill" sr:suggest_transform="sum"/>
+             <field reporter:label="Billing Total (Rental)" name="billing_rental_amount" reporter:datatype="money" field_groups="bill" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Grand Total (Includes Voids)" name="payment_grand_total" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Total" name="payment_total" reporter:datatype="money" field_groups="pay,common" sr:suggest_transform="sum"/>
+             <field reporter:label="Voided Payments" name="payment_voided_count" reporter:datatype="text" field_groups="pay,common"/>
+             <field reporter:label="All Payment Types (Includes Voids)" name="all_payment_types" reporter:datatype="text" field_groups="pay" sr:suggest_operator="contains"/>
+             <field reporter:label="Payment Types" name="payment_types" reporter:datatype="text" field_groups="pay,common" sr:suggest_operator="contains"/>
+             <field reporter:label="Payment Amount Voided" name="payment_total_voided" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Total (Account Adjustment)" name="payment_account_adjustment_amount" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Total (Cash)" name="payment_cash_amount" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Total (Check)" name="payment_check_amount" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Total (Credit Card)" name="payment_credit_card_amount" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Total (Debit Card)" name="payment_debit_card_amount" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Total (Patron Credit)" name="payment_credit_amount" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Total (Forgiven)" name="payment_forgive_amount" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Total (Work)" name="payment_work_amount" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Total (Goods)" name="payment_goods_amount" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Payment Total (Currency)" name="payment_currency_amount" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Paymnt Total (Non-Currency)" name="payment_non_currency_amount" reporter:datatype="money" field_groups="pay" sr:suggest_transform="sum"/>
+             <field reporter:label="Transaction Start Date / Time" name="xact_start" reporter:datatype="timestamp" sr:suggest_filter="true" field_groups="dates,common"/>
+             <field reporter:label="Transaction Start Year" name="xact_start_year" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Transaction Start Year and Month" name="xact_start_year_mon" reporter:datatype="text" field_groups="dates,common"/>
+             <field reporter:label="Transaction Start Date" name="xact_start_date" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Transaction Finish Date / Time" name="xact_finish" reporter:datatype="timestamp" field_groups="dates"/>
+             <field reporter:label="Transaction Finish Year" name="xact_finish_year" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="Transaction Finish Year and Month" name="xact_finish_year_mon" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="Transaction Finish Date" name="xact_finish_date" reporter:datatype="text" field_groups="dates"/>
+             <field reporter:label="First Billing Date / Time" name="earliest_billing_ts" reporter:datatype="timestamp" sr:suggest_filter="true" field_groups="bill,dates,common"/>
+             <field reporter:label="First Billing Year" name="earliest_billing_year" reporter:datatype="int" field_groups="bill,dates"/>
+             <field reporter:label="First Billing Year and Month" name="earliest_billing_year_mon" reporter:datatype="text" field_groups="bill,dates"/>
+             <field reporter:label="First Billing Date" name="earliest_billing_date" reporter:datatype="text" field_groups="bill,dates"/>
+             <field reporter:label="Last Billing Date / Time" name="latest_billing_ts" reporter:datatype="timestamp" field_groups="bill,dates,common"/>
+             <field reporter:label="Last Billing Year" name="latest_billing_year" reporter:datatype="int" field_groups="bill,dates"/>
+             <field reporter:label="Last Billing Year and Month" name="latest_billing_year_mon" reporter:datatype="text" field_groups="bill,dates"/>
+             <field reporter:label="Last Billing Date" name="latest_billing_date" reporter:datatype="text" field_groups="bill,dates"/>
+             <field reporter:label="First Payment Date / Time" name="earliest_payment_ts" reporter:datatype="timestamp" sr:suggest_filter="true" field_groups="pay,dates,common"/>
+             <field reporter:label="First Payment Year" name="earliest_payment_year" reporter:datatype="int" field_groups="dates"/>
+             <field reporter:label="First Payment Year and Month" name="earliest_payment_year_mon" reporter:datatype="text" field_groups="pay,dates,common"/>
+             <field reporter:label="First Payment Date" name="earliest_payment_date" reporter:datatype="text" field_groups="pay,dates"/>
+             <field reporter:label="Last Payment Date / Time" name="latest_payment_ts" reporter:datatype="timestamp" field_groups="pay,dates,common"/>
+             <field reporter:label="Last Payment Year" name="latest_payment_year" reporter:datatype="int" field_groups="pay,dates"/>
+             <field reporter:label="Last Payment Year and Month" name="latest_payment_year_mon" reporter:datatype="text" field_groups="pay,dates,common"/>
+             <field reporter:label="Last Payment Date" name="latest_payment_date" reporter:datatype="text" field_groups="pay,dates"/>
+             <field reporter:label="Transaction Type" name="xact_type" reporter:datatype="text" sr:suggest_filter="true" field_groups="common"/>
+             <field reporter:label="Transaction Closed?" name="xact_closed" sr:suggest_filter="true" reporter:datatype="bool"/>
+        </fields>
+    </class>
+
        <!-- ********************************************************************************************************************* -->
 </IDL>
 
index 82cf1ec..1ad986f 100644 (file)
@@ -26,6 +26,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  xmlns:oils_persist="http://open-ils.org/spec/opensrf/IDL/persistence/v1"
  xmlns:oils_obj="http://open-ils.org/spec/opensrf/IDL/objects/v1"
  xmlns:reporter="http://open-ils.org/spec/opensrf/IDL/reporter/v1"
+ xmlns:sr="http://open-ils.org/spec/opensrf/IDL/simple-reporter/v1"
  xmlns:crud="http://open-ils.org/spec/opensrf/IDL/permacrud/v1"
  targetNamespace="http://opensrf.org/spec/IDL/base/v1"
  elementFormDefault="qualified"
@@ -41,6 +42,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
 <xs:import namespace="http://open-ils.org/spec/opensrf/IDL/reporter/v1"
  schemaLocation="reporter.xsd"/>
 
+<xs:import namespace="http://open-ils.org/spec/opensrf/IDL/simple-reporter/v1"
+ schemaLocation="simple-reporter.xsd"/>
+
 <xs:import namespace="http://open-ils.org/spec/opensrf/IDL/permacrud/v1"
  schemaLocation="permacrud.xsd"/>
 
@@ -61,7 +65,16 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
   <xs:attribute ref="reporter:label"/>
   <xs:attribute ref="reporter:datatype"/>
   <xs:attribute ref="reporter:selector"/>
-  <xs:attribute ref="config_field"/>
+  <xs:attribute ref="sr:hide_from"/>
+  <xs:attribute ref="sr:suggest_transform"/>
+  <xs:attribute ref="sr:force_transform"/>
+  <xs:attribute ref="sr:suggest_operator"/>
+  <xs:attribute ref="sr:suggest_filter"/>
+  <xs:attribute ref="sr:force_filter"/>
+  <xs:attribute ref="sr:force_filtervalues"/>
+  <xs:attribute ref="sr:org_filter_field"/>
+  <xs:attribute name="field_groups"/>
+  <xs:attribute name="config_field"/>
  </xs:complexType>
 </xs:element>
 
@@ -75,6 +88,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
   <xs:attribute name="map" type="xs:string" use="required"/>
   <xs:attribute name="class" type="xs:string" use="required"/>
   <xs:attribute ref="reporter:label"/>
+  <xs:attribute ref="sr:org_filter_field"/>
  </xs:complexType>
 </xs:element>
 
@@ -96,11 +110,27 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
  </xs:complexType>
 </xs:element>
 
+<xs:element name="group" nillable="true">
+ <xs:complexType>
+  <xs:attribute name="name" type="xs:string" use="required"/>
+  <xs:attribute ref="reporter:label"/>
+ </xs:complexType>
+</xs:element>
+
+<xs:element name="field_groups">
+ <xs:complexType>
+  <xs:sequence>
+   <xs:element ref="idl:group" minOccurs="0" maxOccurs="unbounded"/>
+  </xs:sequence>
+ </xs:complexType>
+</xs:element>
+
 <xs:element name="class">
  <xs:complexType>
   <xs:sequence>
    <xs:element ref="idl:description" minOccurs="0" maxOccurs="1"/>
    <xs:element ref="oils_persist:source_definition" minOccurs="0" maxOccurs="unbounded"/>
+   <xs:element ref="idl:field_groups" minOccurs="0" maxOccurs="1"/>
    <xs:element ref="idl:fields"/>
    <xs:element ref="idl:links" minOccurs="0"/>
    <xs:element ref="crud:permacrud" minOccurs="0"/>
index 01e297b..c6bab4b 100755 (executable)
@@ -17,9 +17,9 @@ else
 fi
 
 # ---------------------------------------------------------------------------
-# Make sure we're running as the correct user
+# Make sure we're not running as the root user
 # ---------------------------------------------------------------------------
-[ $(whoami) != 'opensrf' ] && echo 'Must run as user "opensrf"' && exit;
+[ `id -u` -eq 0 ] && echo 'Not to be run as root' && exit 1;
 
 
 function usage {
index c713fa3..05d945f 100644 (file)
@@ -796,6 +796,99 @@ vim:et:ts=4:sw=4:
                     <min_spare_children>1</min_spare_children>
                     <max_spare_children>5</max_spare_children>
                 </unix_config>
+                <app_settings>
+                    <oai>
+                        <!-- Where necessary, override the default settings here in the app_settings element. -->
+
+                        <!-- The OAI endpoint. The domain is the name of your proxy or frontend opac website. -->
+                        <!-- <base_url>http://mydomain.org/opac/extras/oai</base_url> -->
+
+                        <!-- <repository_name>My organization(s)</repository_name> -->
+                        <!-- <admin_email>admin@mydomain.org</admin_email> -->
+
+                        <!-- The maximum number of records in a ListRecords and ListIdentifiers response. -->
+                        <!-- <max_count>50</max_count> -->
+
+                        <!-- <granularity>YYYY-MM-DDThh:mm:ss</granularity> -->
+                        <!-- <earliest_datestamp>0001-01-01</earliest_datestamp> -->
+                        <!-- <deleted_record>yes</deleted_record> -->
+                        <!-- <scheme>oai</scheme> -->
+                        <!-- <repository_identifier>mydomain.org</repository_identifier> -->
+                        <!-- <delimiter>:</delimiter> -->
+                        <!-- <sample_identifier>oai:mydomain.org:12345</sample_identifier> -->
+
+                        <!--
+                        The metadataformat element contains the schema for the oai_dc and marcxml metadata formats.
+                        Each schema needs a reference to an xslt document.
+                        You can replace them with your custom xslt stylesheets.
+                        Place those in the /<openils sysdir>/var/xsl folder.
+                        You can also extend the OAI2 service further with new metadata schema.
+
+                        Bibliographic and authority records share the same stylesheet.
+                        Should you want to render them differently, use the
+                        marc:datafield[@tag='901']/marc:subfield[@code='t']
+                        value to identify the record type. -->
+
+                        <!--
+                        <metadataformat>
+                            <oai_dc>
+                                <namespace_uri>http://www.openarchives.org/OAI/2.0/oai_dc/</namespace_uri>
+                                <schema_location>http://www.openarchives.org/OAI/2.0/oai_dc.xsd</schema_location>
+                                <xslt>MARC21slim2OAIDC.xsl</xslt>
+                            </oai_dc>
+                            <marcxml>
+                                <namespace_uri>http://www.loc.gov/MARC21/slim</namespace_uri>
+                                <schema_location>http://www.loc.gov/standards/marcxml/schema/MARC21slim.xsd</schema_location>
+                            </marcxml>
+                        </metadataformat> -->
+
+                        <!--
+                        You can add different schema to the metadataformat element thus:
+                            <mods>
+                                <namespace_uri>http://www.loc.gov/mods/</namespace_uri>
+                                <schema_location>http://www.loc.gov/standards/mods/mods.xsd</schema_location>
+                                <xslt>my-custom-marc2mods.xsl</xslt>
+                            </mods>
+                            <my-metadata_prefix>
+                                <namespace_uri>my-namespace_uri</namespace_uri>
+                                <schema_location>my-schema_location</schema_location>
+                                <xslt>my-marc2my-metadata.xsl</xslt>
+                            </my-metadata_prefix>
+                        -->
+
+                        <!-- Change the way the asset copy values are mapped to which subfield codes: -->
+                        <!--
+                        <copies>
+                            <a>location</a>
+                            <b>owning_lib</b>
+                            <c>callnumber</c>
+                            <d>circlib</d>
+                            <g>barcode</g>
+                            <n>status</n>
+                        </copies>
+                        -->
+                        <!-- Or add static values to the copies element like this:
+                            <z>A value that always should for example be in the 852$z</z>
+                        -->
+
+                        <!-- Accept only 852$[barcode] values that match this regular expression. E.g.
+                        <barcode_filter>^[A-Za-z0-9]+</barcode_filter>
+                        only renders 852 datafields that contain barcodes values that begin with letters and numbers.
+                        -->
+                        <!--
+                        <barcode_filter><barcode_filter>
+                        -->
+
+                        <!-- Accept only 852$[status] values that match this regular expression. E.g.
+                        <status_filter>^Available$</status_filter>
+                        only renders 852 datafields that contain status code values that exactly match the string 'Available'.
+                        -->
+                        <!--
+                        <status_filter></status_filter>
+                        -->
+                    </oai>
+                </app_settings>
+
             </open-ils.supercat>
 
             <!-- server for accessing user info -->
@@ -1226,6 +1319,8 @@ vim:et:ts=4:sw=4:
                             *note:  in a multi-brick environment, this will need to
                             be on a write-able NFS share.  -->
                         <importer>/tmp</importer>
+                        <!-- permanent location for locally added content -->
+                        <jackets>/openils/var/web/opac/extras/ac</jackets>
                     </databases>
                 </app_settings>
             </open-ils.vandelay>
@@ -1362,7 +1457,7 @@ vim:et:ts=4:sw=4:
                 <appname>open-ils.storage</appname>  
                 <appname>open-ils.justintime</appname>  
                 <appname>open-ils.cstore</appname>  
-                <appname>open-ils.collections</appname>  
+                <appname>open-ils.collections</appname>
                 <appname>open-ils.qstore</appname>
                 <appname>open-ils.reporter</appname>  
                 <appname>open-ils.reporter-store</appname>  
diff --git a/Open-ILS/examples/simple-reporter.xsd b/Open-ILS/examples/simple-reporter.xsd
new file mode 100644 (file)
index 0000000..073a959
--- /dev/null
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!--
+
+Copyright (C) 2007 Laurentian University
+Dan Scott <dscott@laurentian.ca>
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+-->
+
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+ xmlns="http://open-ils.org/spec/opensrf/IDL/simple-reporter/v1"
+ targetNamespace="http://open-ils.org/spec/opensrf/IDL/simple-reporter/v1"
+ elementFormDefault="unqualified"
+ attributeFormDefault="unqualified"
+>
+
+<xs:attribute name="hide_from"/>
+<xs:attribute name="suggest_transform"/>
+<xs:attribute name="force_transform"/>
+<xs:attribute name="suggest_operator"/>
+<xs:attribute name="suggest_filter" type="xs:boolean"/>
+<xs:attribute name="force_filter"/>
+<xs:attribute name="force_filtervalues"/>
+<xs:attribute name="org_filter_field"/>
+
+</xs:schema>
index 21e6ae4..dc5e35e 100644 (file)
       }
     },
     "@angular-devkit/architect": {
-      "version": "0.1202.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.11.tgz",
-      "integrity": "sha512-9veul0Hse+4yGxfQW6AfeWYhxE6CM/EtrvGkv4JCrYJVVkfGW64EVG1p2nJt4yVk69iA2f+On3c4t1uXKtLy/Q==",
+      "version": "0.1202.17",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1202.17.tgz",
+      "integrity": "sha512-uUQcHcLbPvr9adALQSLU1MTDduVUR2kZAHi2e7SmL9ioel84pPVXBoD0WpSBeUMKwPiDs3TQDaxDB49hl0nBSQ==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "12.2.11",
+        "@angular-devkit/core": "12.2.17",
         "rxjs": "6.6.7"
       }
     },
     "@angular-devkit/build-angular": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.2.11.tgz",
-      "integrity": "sha512-chMVR0ZEw0sRlny5eXZQ83dK0KNOzBJaa6ERwIubuQLB555DWpkn9L0E2EnRb7qwe2k+Uggx9GiZD2Nq9z+88A==",
+      "version": "12.2.17",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-12.2.17.tgz",
+      "integrity": "sha512-uc3HGHVQyatqQ/M53oxYBvhz0jx0hgdc7WT+L56GLHvgz7Ct2VEbpWaMfwHkFfE1F1iHkIgnTKHKWacJl1yQIg==",
       "dev": true,
       "requires": {
         "@ampproject/remapping": "1.0.1",
-        "@angular-devkit/architect": "0.1202.11",
-        "@angular-devkit/build-optimizer": "0.1202.11",
-        "@angular-devkit/build-webpack": "0.1202.11",
-        "@angular-devkit/core": "12.2.11",
+        "@angular-devkit/architect": "0.1202.17",
+        "@angular-devkit/build-optimizer": "0.1202.17",
+        "@angular-devkit/build-webpack": "0.1202.17",
+        "@angular-devkit/core": "12.2.17",
         "@babel/core": "7.14.8",
         "@babel/generator": "7.14.8",
         "@babel/helper-annotate-as-pure": "7.14.5",
@@ -46,7 +46,7 @@
         "@babel/template": "7.14.5",
         "@discoveryjs/json-ext": "0.5.3",
         "@jsdevtools/coverage-istanbul-loader": "3.0.5",
-        "@ngtools/webpack": "12.2.11",
+        "@ngtools/webpack": "12.2.17",
         "ansi-colors": "4.1.1",
         "babel-loader": "8.2.2",
         "browserslist": "^4.9.1",
@@ -55,7 +55,7 @@
         "circular-dependency-plugin": "5.2.2",
         "copy-webpack-plugin": "9.0.1",
         "core-js": "3.16.0",
-        "critters": "0.0.11",
+        "critters": "0.0.12",
         "css-loader": "6.2.0",
         "css-minimizer-webpack-plugin": "3.0.2",
         "esbuild": "0.13.8",
@@ -97,7 +97,7 @@
         "tslib": "2.3.0",
         "webpack": "5.50.0",
         "webpack-dev-middleware": "5.0.0",
-        "webpack-dev-server": "3.11.2",
+        "webpack-dev-server": "3.11.3",
         "webpack-merge": "5.8.0",
         "webpack-subresource-integrity": "1.5.2"
       },
             "@babel/types": "^7.14.5"
           }
         },
-        "ansi-styles": {
-          "version": "4.3.0",
-          "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
-          "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
-          "dev": true,
-          "requires": {
-            "color-convert": "^2.0.1"
-          }
-        },
-        "chalk": {
-          "version": "4.1.2",
-          "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
-          "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
-          "dev": true,
-          "requires": {
-            "ansi-styles": "^4.1.0",
-            "supports-color": "^7.1.0"
-          }
-        },
-        "color-convert": {
-          "version": "2.0.1",
-          "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
-          "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
-          "dev": true,
-          "requires": {
-            "color-name": "~1.1.4"
-          }
-        },
-        "color-name": {
-          "version": "1.1.4",
-          "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
-          "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
-          "dev": true
-        },
         "core-js": {
           "version": "3.16.0",
           "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.16.0.tgz",
           "integrity": "sha512-5+5VxRFmSf97nM8Jr2wzOwLqRo6zphH2aX+7KsAUONObyzakDNq2G/bgbhinxB4PoV9L3aXQYhiDKyIKWd2c8g==",
           "dev": true
         },
-        "critters": {
-          "version": "0.0.11",
-          "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.11.tgz",
-          "integrity": "sha512-E1XlhQTmf0Y2Q6hYVrXKxibxps2LNarpZaDCRNaxA1LA5LxlgoIPN0rcOzFVlwRD47iNYhVtD4DmGtgr2edrlQ==",
-          "dev": true,
-          "requires": {
-            "chalk": "^4.1.0",
-            "css-select": "^1.2.0",
-            "parse5": "^6.0.1",
-            "parse5-htmlparser2-tree-adapter": "^6.0.1",
-            "postcss": "^8.3.7",
-            "pretty-bytes": "^5.3.0"
-          },
-          "dependencies": {
-            "postcss": {
-              "version": "8.3.11",
-              "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz",
-              "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==",
-              "dev": true,
-              "requires": {
-                "nanoid": "^3.1.30",
-                "picocolors": "^1.0.0",
-                "source-map-js": "^0.6.2"
-              }
-            }
-          }
-        },
         "esbuild": {
           "version": "0.13.8",
           "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.13.8.tgz",
             "esbuild-windows-arm64": "0.13.8"
           }
         },
-        "has-flag": {
-          "version": "4.0.0",
-          "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
-          "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
-          "dev": true
+        "https-proxy-agent": {
+          "version": "5.0.0",
+          "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz",
+          "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==",
+          "dev": true,
+          "requires": {
+            "agent-base": "6",
+            "debug": "4"
+          }
+        },
+        "minimatch": {
+          "version": "3.0.4",
+          "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+          "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
+          "dev": true,
+          "requires": {
+            "brace-expansion": "^1.1.7"
+          }
+        },
+        "postcss": {
+          "version": "8.3.6",
+          "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz",
+          "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==",
+          "dev": true,
+          "requires": {
+            "colorette": "^1.2.2",
+            "nanoid": "^3.1.23",
+            "source-map-js": "^0.6.2"
+          }
         },
         "semver": {
           "version": "7.3.5",
             "lru-cache": "^6.0.0"
           }
         },
-        "supports-color": {
-          "version": "7.2.0",
-          "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
-          "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
-          "dev": true,
-          "requires": {
-            "has-flag": "^4.0.0"
-          }
+        "source-map-js": {
+          "version": "0.6.2",
+          "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz",
+          "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==",
+          "dev": true
         },
         "tslib": {
           "version": "2.3.0",
       }
     },
     "@angular-devkit/build-optimizer": {
-      "version": "0.1202.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.11.tgz",
-      "integrity": "sha512-3iU2q8QYrF7bSxffcrvYrvs9BQrLGHLe3MFyNfU3ps38c6CmnMsnR3RODmDZZgkgk9jN45y+WGmkF46ydiOHtA==",
+      "version": "0.1202.17",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-optimizer/-/build-optimizer-0.1202.17.tgz",
+      "integrity": "sha512-1qWGWw7cCNADB4LZ/zjiSK0GLmr2kebYyNG0KutCE8GNVxv2h6w6dJP6t1C/BgskRuBPCAhvE+lEKN8ljSutag==",
       "dev": true,
       "requires": {
         "source-map": "0.7.3",
       }
     },
     "@angular-devkit/build-webpack": {
-      "version": "0.1202.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1202.11.tgz",
-      "integrity": "sha512-xex0/8G2o9v0gr+oVAc3QdRyPKTBWmmhOR3K3fj4a7gvhpnE9ByHxemzflZcDwpE8K7YkMX8kTlFjkog/dSXNw==",
+      "version": "0.1202.17",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1202.17.tgz",
+      "integrity": "sha512-z7FW43DJ4p8UZwbFRmMrh2ohqhI2Wtdg3+FZiTnl4opb3zYheGiNxPlTuiyKjG21JUkGCdthkkBLCNfaUU0U/Q==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.1202.11",
+        "@angular-devkit/architect": "0.1202.17",
         "rxjs": "6.6.7"
       }
     },
     "@angular-devkit/core": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.11.tgz",
-      "integrity": "sha512-JgOKDr6zQu/uVZ5le5shgCeIoq3zQvybZGwxjkdWZdoO8rc5oggoiB2PZrPStolhIjFkQ2/mUvhtqnn7D+w8UA==",
+      "version": "12.2.17",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-12.2.17.tgz",
+      "integrity": "sha512-PyOY7LGUPPd6rakxUYbfQN6zAdOCMCouVp5tERY1WTdMdEiuULOtHsPee8kNbh75pD59KbJNU+fwozPRMuIm5g==",
       "dev": true,
       "requires": {
         "ajv": "8.6.2",
       }
     },
     "@angular-devkit/schematics": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.11.tgz",
-      "integrity": "sha512-7ucnRGGRGsWqXhvFuK7oAgXMkWO58jmA9CQzXTWCNT5EFCUeyBj2eNNndI4NlWE/LgeKYn7UhUNREzdBrcDiKw==",
+      "version": "12.2.17",
+      "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-12.2.17.tgz",
+      "integrity": "sha512-c0eNu/nx1Mnu7KcZgYTYHP736H4Y9pSyLBSmLAHYZv3t3m0dIPbhifRcLQX7hHQ8fGT2ZFxmOpaQG5/DcIghSw==",
       "dev": true,
       "requires": {
-        "@angular-devkit/core": "12.2.11",
+        "@angular-devkit/core": "12.2.17",
         "ora": "5.4.1",
         "rxjs": "6.6.7"
       }
     },
     "@angular/animations": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.11.tgz",
-      "integrity": "sha512-J6tXNCEgI3SYPfFy9F0QDQNx0g4F8gfJA05iaf6scpZvqziQ80g0vwrBQdV6JqkFvSPQqLJDxyIxDQJSrCt8YA==",
+      "version": "12.2.16",
+      "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-12.2.16.tgz",
+      "integrity": "sha512-Kf6C7Ta+fCMq5DvT9JNVhBkcECrqFa3wumiC6ssGo5sNaEzXz+tlep9ZgEbqfxSn7gAN7L1DgsbS9u0O6tbUkg==",
       "requires": {
         "tslib": "^2.2.0"
       }
     },
     "@angular/cli": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.2.11.tgz",
-      "integrity": "sha512-zstz/oH0BBWC1n1a6oSFLSaSCDUCoaawG8a83E61MN65wYaCuwIW+Z7Lz3FiF7P4Ce16T56ZwJPIA5SjS7KBhg==",
+      "version": "12.2.17",
+      "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-12.2.17.tgz",
+      "integrity": "sha512-mubRPp5hRIK/q0J8q6kVAqbYYuBUKMMBljUCqT4fHsl+qXYD27rgG3EqNzycKBMHUIlykotrDSdy47voD+atOg==",
       "dev": true,
       "requires": {
-        "@angular-devkit/architect": "0.1202.11",
-        "@angular-devkit/core": "12.2.11",
-        "@angular-devkit/schematics": "12.2.11",
-        "@schematics/angular": "12.2.11",
+        "@angular-devkit/architect": "0.1202.17",
+        "@angular-devkit/core": "12.2.17",
+        "@angular-devkit/schematics": "12.2.17",
+        "@schematics/angular": "12.2.17",
         "@yarnpkg/lockfile": "1.1.0",
         "ansi-colors": "4.1.1",
         "debug": "4.3.2",
         "npm-pick-manifest": "6.1.1",
         "open": "8.2.1",
         "ora": "5.4.1",
-        "pacote": "11.3.5",
+        "pacote": "12.0.2",
         "resolve": "1.20.0",
         "semver": "7.3.5",
         "symbol-observable": "4.0.0",
         "uuid": "8.3.2"
       },
       "dependencies": {
+        "debug": {
+          "version": "4.3.2",
+          "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz",
+          "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==",
+          "dev": true,
+          "requires": {
+            "ms": "2.1.2"
+          }
+        },
+        "resolve": {
+          "version": "1.20.0",
+          "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
+          "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
+          "dev": true,
+          "requires": {
+            "is-core-module": "^2.2.0",
+            "path-parse": "^1.0.6"
+          }
+        },
         "semver": {
           "version": "7.3.5",
           "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
           "requires": {
             "lru-cache": "^6.0.0"
           }
-        },
-        "uuid": {
-          "version": "8.3.2",
-          "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
-          "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
-          "dev": true
         }
       }
     },
     "@angular/common": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.11.tgz",
-      "integrity": "sha512-/3QS5YaHfm2taJYUVes076ZMpL2GRYVW3HDbHXiRNjoC9EMqQ7ahRD9RPFC8XUk709JuqzonE3bB+N5Ld3mzIA==",
+      "version": "12.2.16",
+      "resolved": "https://registry.npmjs.org/@angular/common/-/common-12.2.16.tgz",
+      "integrity": "sha512-FEqTXTEsnbDInqV1yFlm97Tz1OFqZS5t0TUkm8gzXRgpIce/F/jLwAg0u1VQkgOsno6cNm0xTWPoZgu85NI4ug==",
       "requires": {
         "tslib": "^2.2.0"
       }
     },
     "@angular/compiler": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.11.tgz",
-      "integrity": "sha512-78b5Uf+79gOKEyF/ixFAGJANNHnhueofSxgToBmJkTTpqTX6Xzdfzw8W+ehpJADp52eBjmZ+rv7b9sgBsiJ1tg==",
+      "version": "12.2.16",
+      "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-12.2.16.tgz",
+      "integrity": "sha512-nsYEw+yu8QyeqPf9nAmG419i1mtGM4v8+U+S3eQHQFXTgJzLymMykWHYu2ETdjUpNSLK6xcIQDBWtWnWSfJjAA==",
       "requires": {
         "tslib": "^2.2.0"
       }
     },
     "@angular/compiler-cli": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.11.tgz",
-      "integrity": "sha512-mOEyAQQS28omIGOw71jXnAI+GLxLVHhsa5vcS9Cy+HLfgJzysTngwdKNO7iJvalsyAsb9EjJ3R82XRKKJspV0g==",
+      "version": "12.2.16",
+      "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-12.2.16.tgz",
+      "integrity": "sha512-tlalh8SJvdCWbUPRUR5GamaP+wSc/GuCsoUZpSbcczGKgSlbaEVXUYtVXm8/wuT6Slk2sSEbRs7tXGF2i7qxVw==",
       "dev": true,
       "requires": {
         "@babel/core": "^7.8.6",
         "yargs": "^17.0.0"
       },
       "dependencies": {
+        "@ampproject/remapping": {
+          "version": "2.1.2",
+          "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.1.2.tgz",
+          "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==",
+          "dev": true,
+          "requires": {
+            "@jridgewell/trace-mapping": "^0.3.0"
+          }
+        },
         "@babel/core": {
-          "version": "7.15.8",
-          "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.15.8.tgz",
-          "integrity": "sha512-3UG9dsxvYBMYwRv+gS41WKHno4K60/9GPy1CJaH6xy3Elq8CTtvtjT5R5jmNhXfCYLX2mTw+7/aq5ak/gOE0og==",
-          "dev": true,
-          "requires": {
-            "@babel/code-frame": "^7.15.8",
-            "@babel/generator": "^7.15.8",
-            "@babel/helper-compilation-targets": "^7.15.4",
-            "@babel/helper-module-transforms": "^7.15.8",
-            "@babel/helpers": "^7.15.4",
-            "@babel/parser": "^7.15.8",
-            "@babel/template": "^7.15.4",
-            "@babel/traverse": "^7.15.4",
-            "@babel/types": "^7.15.6",
+          "version": "7.17.9",
+          "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.17.9.tgz",
+          "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==",
+          "dev": true,
+          "requires": {
+            "@ampproject/remapping": "^2.1.0",
+            "@babel/code-frame": "^7.16.7",
+            "@babel/generator": "^7.17.9",
+            "@babel/helper-compilation-targets": "^7.17.7",
+            "@babel/helper-module-transforms": "^7.17.7",
+            "@babel/helpers": "^7.17.9",
+            "@babel/parser": "^7.17.9",
+            "@babel/template": "^7.16.7",
+            "@babel/traverse": "^7.17.9",
+            "@babel/types": "^7.17.0",
             "convert-source-map": "^1.7.0",
             "debug": "^4.1.0",
             "gensync": "^1.0.0-beta.2",
-            "json5": "^2.1.2",
-            "semver": "^6.3.0",
-            "source-map": "^0.5.0"
+            "json5": "^2.2.1",
+            "semver": "^6.3.0"
           },
           "dependencies": {
             "semver": {
               "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
               "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
               "dev": true
-            },
-            "source-map": {
-              "version": "0.5.7",
-              "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
-              "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
-              "dev": true
             }
           }
         },
         "semver": {
-          "version": "7.3.5",
-          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz",
-          "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==",
+          "version": "7.3.7",
+          "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz",
+          "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==",
           "dev": true,
           "requires": {
             "lru-cache": "^6.0.0"
       }
     },
     "@angular/core": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.11.tgz",
-      "integrity": "sha512-wzCFtVFdQlXJlzWpWNz3w8cDzhYzuO1qDqey15Wd4zPR8c8pDx3/XCZXSziskaUzA+fVzgHHSwQnOi9XSFFjzA==",
+      "version": "12.2.16",
+      "resolved": "https://registry.npmjs.org/@angular/core/-/core-12.2.16.tgz",
+      "integrity": "sha512-jsmvaRdAfng99z2a9mAmkfcsCE1wm+tBYVDxnc5JquSXznwtncjzcoc2X0J0dzrkCDvzFfpTsZ9vehylytBc+A==",
       "requires": {
         "tslib": "^2.2.0"
       }
     },
     "@angular/forms": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.11.tgz",
-      "integrity": "sha512-mylti7rtz2FcM3hwPSj2JnX8y8BrXmzrjEWjcLlXmwoMzv/M3vY5HlgKzOmPN03bVgxC7b7EFfGMXfJ3YoPWpg==",
+      "version": "12.2.16",
+      "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-12.2.16.tgz",
+      "integrity": "sha512-sb+gpNun5aN7CZfHXS6X7vJcd/0A1P/gRBZpYtQTzBYnqEFCOFIvR62eb05aHQ4JhgKaSPpIXrbz/bAwY/njZw==",
       "requires": {
         "tslib": "^2.2.0"
       }
     },
     "@angular/language-service": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-12.2.11.tgz",
-      "integrity": "sha512-ag0YlWvVmNQWKGB14SFgaPcWuYQJpr8OrD2JoY91P+WWpv6oawemHRVF1rvFjmPf9byXv4mnPK1h36qI7EJSpw==",
+      "version": "12.2.16",
+      "resolved": "https://registry.npmjs.org/@angular/language-service/-/language-service-12.2.16.tgz",
+      "integrity": "sha512-eDOd46Lu+4Nc/UA9q4G1xUTeIT2JXDdpedSRCk1fM+trYUZm7Xy2FZasP3pUSdtz04wt0kV9Mi5i3oCxfqU2Wg==",
       "dev": true
     },
     "@angular/localize": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-12.2.11.tgz",
-      "integrity": "sha512-ZT4Jt80vTCPHhR4a9DP5+/CA1QYerMRwoIcWQUzTDS/PP3fL3pDIVBUNNqefANplAL39y52HYc8qnpEa8mbd8A==",
+      "version": "12.2.16",
+      "resolved": "https://registry.npmjs.org/@angular/localize/-/localize-12.2.16.tgz",
+      "integrity": "sha512-peWauKtqy7XG5OiG9L4uLg/yIMw0b/ipKOiovzpuj+DCghmeuYzle5kjCLvWydFeQqBoIdf2kcJYeskrYCAHfQ==",
       "requires": {
         "@babel/core": "7.8.3",
         "glob": "7.1.7",
       }
     },
     "@angular/platform-browser": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.11.tgz",
-      "integrity": "sha512-uJEnVOK3M1SrCWJoW2jFx5F8pUCbSISai7dbTBVc+/Gx6e9ZuNzBVOooLvSzV96DurhTV7xGSXR5Ry75UNZ48A==",
+      "version": "12.2.16",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-12.2.16.tgz",
+      "integrity": "sha512-T855ppLeQO6hRHi7lGf5fwPoUVt+c0h2rgkV5jHElc3ylaGnhecmZc6fnWLX4pw82TMJUgUV88CY8JCFabJWwg==",
       "requires": {
         "tslib": "^2.2.0"
       }
     },
     "@angular/platform-browser-dynamic": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.11.tgz",
-      "integrity": "sha512-TF80norTsBbJiUsqo6IUNALV2W1YkEa5QAB6RkTrb1K/V6oGcWcGfqSyCMbjRHPEZTwiAzz4cYEmip5kFtE+oQ==",
+      "version": "12.2.16",
+      "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-12.2.16.tgz",
+      "integrity": "sha512-XGxoACAMW/bc3atiVRpaiYwU4LkobYwVzwlxTT/BxOfsdt8ILb5wU8Fx1TMKNECOQHSGdK0qqhch4pTBZ3cb2g==",
       "requires": {
         "tslib": "^2.2.0"
       }
     },
     "@angular/router": {
-      "version": "12.2.11",
-      "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.11.tgz",
-      "integrity": "sha512-iqQujHKLDpE+xJwXqRY1U83xfDnmb7LIQ0UL6ORSw6mqDTxIeMXfVKRqux1dIlWX+ysU0uTHuug49R8T9q0fhg==",
+      "version": "12.2.16",
+      "resolved": "https://registry.npmjs.org/@angular/router/-/router-12.2.16.tgz",
+      "integrity": "sha512-LuFXSMIvX/VrB4jbYhigG2Y2pGQ9ULsSBUwDWwQCf4kr0eVI37LBJ2Vr74GBEznjgQ0UmWE89E+XYI80UhERTw==",
       "requires": {
         "tslib": "^2.2.0"
       }
       "dev": true
     },
     "@babel/code-frame": {
-      "version": "7.15.8",
-      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.15.8.tgz",
-      "integrity": "sha512-2IAnmn8zbvC/jKYhq5Ki9I+DwjlrtMPUCH/CpHvqI4dNnlwHwsxoIhlc8WcYY5LSYknXQtAlFYuHfqAFCvQ4Wg==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.16.7.tgz",
+      "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==",
       "requires": {
-        "@babel/highlight": "^7.14.5"
+        "@babel/highlight": "^7.16.7"
       }
     },
     "@babel/compat-data": {
-      "version": "7.15.0",
-      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.15.0.tgz",
-      "integrity": "sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==",
+      "version": "7.17.7",
+      "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.17.7.tgz",
+      "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==",
       "dev": true
     },
     "@babel/core": {
       }
     },
     "@babel/generator": {
-      "version": "7.15.8",
-      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.15.8.tgz",
-      "integrity": "sha512-ECmAKstXbp1cvpTTZciZCgfOt6iN64lR0d+euv3UZisU5awfRawOvg07Utn/qBGuH4bRIEZKrA/4LzZyXhZr8g==",
+      "version": "7.17.9",
+      "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz",
+      "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==",
       "requires": {
-        "@babel/types": "^7.15.6",
+        "@babel/types": "^7.17.0",
         "jsesc": "^2.5.1",
         "source-map": "^0.5.0"
       }
       }
     },
     "@babel/helper-builder-binary-assignment-operator-visitor": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.15.4.tgz",
-      "integrity": "sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz",
+      "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==",
       "dev": true,
       "requires": {
-        "@babel/helper-explode-assignable-expression": "^7.15.4",
-        "@babel/types": "^7.15.4"
+        "@babel/helper-explode-assignable-expression": "^7.16.7",
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-compilation-targets": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.15.4.tgz",
-      "integrity": "sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==",
+      "version": "7.17.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz",
+      "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==",
       "dev": true,
       "requires": {
-        "@babel/compat-data": "^7.15.0",
-        "@babel/helper-validator-option": "^7.14.5",
-        "browserslist": "^4.16.6",
+        "@babel/compat-data": "^7.17.7",
+        "@babel/helper-validator-option": "^7.16.7",
+        "browserslist": "^4.17.5",
         "semver": "^6.3.0"
       },
       "dependencies": {
       }
     },
     "@babel/helper-create-class-features-plugin": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.15.4.tgz",
-      "integrity": "sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==",
+      "version": "7.17.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz",
+      "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.15.4",
-        "@babel/helper-function-name": "^7.15.4",
-        "@babel/helper-member-expression-to-functions": "^7.15.4",
-        "@babel/helper-optimise-call-expression": "^7.15.4",
-        "@babel/helper-replace-supers": "^7.15.4",
-        "@babel/helper-split-export-declaration": "^7.15.4"
+        "@babel/helper-annotate-as-pure": "^7.16.7",
+        "@babel/helper-environment-visitor": "^7.16.7",
+        "@babel/helper-function-name": "^7.17.9",
+        "@babel/helper-member-expression-to-functions": "^7.17.7",
+        "@babel/helper-optimise-call-expression": "^7.16.7",
+        "@babel/helper-replace-supers": "^7.16.7",
+        "@babel/helper-split-export-declaration": "^7.16.7"
       },
       "dependencies": {
         "@babel/helper-annotate-as-pure": {
-          "version": "7.15.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz",
-          "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==",
+          "version": "7.16.7",
+          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz",
+          "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==",
           "dev": true,
           "requires": {
-            "@babel/types": "^7.15.4"
+            "@babel/types": "^7.16.7"
           }
         }
       }
     },
     "@babel/helper-create-regexp-features-plugin": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz",
-      "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==",
+      "version": "7.17.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz",
+      "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.14.5",
-        "regexpu-core": "^4.7.1"
+        "@babel/helper-annotate-as-pure": "^7.16.7",
+        "regexpu-core": "^5.0.1"
+      },
+      "dependencies": {
+        "@babel/helper-annotate-as-pure": {
+          "version": "7.16.7",
+          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz",
+          "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==",
+          "dev": true,
+          "requires": {
+            "@babel/types": "^7.16.7"
+          }
+        }
       }
     },
     "@babel/helper-define-polyfill-provider": {
-      "version": "0.2.3",
-      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz",
-      "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==",
+      "version": "0.2.4",
+      "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.4.tgz",
+      "integrity": "sha512-OrpPZ97s+aPi6h2n1OXzdhVis1SGSsMU2aMHgLcOKfsp4/v1NWpx3CWT3lBj5eeBq9cDkPkh+YCfdF7O12uNDQ==",
       "dev": true,
       "requires": {
         "@babel/helper-compilation-targets": "^7.13.0",
         }
       }
     },
-    "@babel/helper-explode-assignable-expression": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.15.4.tgz",
-      "integrity": "sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==",
-      "dev": true,
+    "@babel/helper-environment-visitor": {
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz",
+      "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==",
       "requires": {
-        "@babel/types": "^7.15.4"
+        "@babel/types": "^7.16.7"
       }
     },
-    "@babel/helper-function-name": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.15.4.tgz",
-      "integrity": "sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==",
+    "@babel/helper-explode-assignable-expression": {
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz",
+      "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==",
+      "dev": true,
       "requires": {
-        "@babel/helper-get-function-arity": "^7.15.4",
-        "@babel/template": "^7.15.4",
-        "@babel/types": "^7.15.4"
+        "@babel/types": "^7.16.7"
       }
     },
-    "@babel/helper-get-function-arity": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.15.4.tgz",
-      "integrity": "sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==",
+    "@babel/helper-function-name": {
+      "version": "7.17.9",
+      "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz",
+      "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==",
       "requires": {
-        "@babel/types": "^7.15.4"
+        "@babel/template": "^7.16.7",
+        "@babel/types": "^7.17.0"
       }
     },
     "@babel/helper-hoist-variables": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.15.4.tgz",
-      "integrity": "sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz",
+      "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==",
       "requires": {
-        "@babel/types": "^7.15.4"
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-member-expression-to-functions": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.15.4.tgz",
-      "integrity": "sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==",
+      "version": "7.17.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz",
+      "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.15.4"
+        "@babel/types": "^7.17.0"
       }
     },
     "@babel/helper-module-imports": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.15.4.tgz",
-      "integrity": "sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz",
+      "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.15.4"
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-module-transforms": {
-      "version": "7.15.8",
-      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.15.8.tgz",
-      "integrity": "sha512-DfAfA6PfpG8t4S6npwzLvTUpp0sS7JrcuaMiy1Y5645laRJIp/LiLGIBbQKaXSInK8tiGNI7FL7L8UvB8gdUZg==",
+      "version": "7.17.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz",
+      "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-imports": "^7.15.4",
-        "@babel/helper-replace-supers": "^7.15.4",
-        "@babel/helper-simple-access": "^7.15.4",
-        "@babel/helper-split-export-declaration": "^7.15.4",
-        "@babel/helper-validator-identifier": "^7.15.7",
-        "@babel/template": "^7.15.4",
-        "@babel/traverse": "^7.15.4",
-        "@babel/types": "^7.15.6"
+        "@babel/helper-environment-visitor": "^7.16.7",
+        "@babel/helper-module-imports": "^7.16.7",
+        "@babel/helper-simple-access": "^7.17.7",
+        "@babel/helper-split-export-declaration": "^7.16.7",
+        "@babel/helper-validator-identifier": "^7.16.7",
+        "@babel/template": "^7.16.7",
+        "@babel/traverse": "^7.17.3",
+        "@babel/types": "^7.17.0"
       }
     },
     "@babel/helper-optimise-call-expression": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.15.4.tgz",
-      "integrity": "sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz",
+      "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.15.4"
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-plugin-utils": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz",
-      "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz",
+      "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==",
       "dev": true
     },
     "@babel/helper-remap-async-to-generator": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.15.4.tgz",
-      "integrity": "sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz",
+      "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.15.4",
-        "@babel/helper-wrap-function": "^7.15.4",
-        "@babel/types": "^7.15.4"
+        "@babel/helper-annotate-as-pure": "^7.16.7",
+        "@babel/helper-wrap-function": "^7.16.8",
+        "@babel/types": "^7.16.8"
       },
       "dependencies": {
         "@babel/helper-annotate-as-pure": {
-          "version": "7.15.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz",
-          "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==",
+          "version": "7.16.7",
+          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz",
+          "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==",
           "dev": true,
           "requires": {
-            "@babel/types": "^7.15.4"
+            "@babel/types": "^7.16.7"
           }
         }
       }
     },
     "@babel/helper-replace-supers": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.15.4.tgz",
-      "integrity": "sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz",
+      "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==",
       "dev": true,
       "requires": {
-        "@babel/helper-member-expression-to-functions": "^7.15.4",
-        "@babel/helper-optimise-call-expression": "^7.15.4",
-        "@babel/traverse": "^7.15.4",
-        "@babel/types": "^7.15.4"
+        "@babel/helper-environment-visitor": "^7.16.7",
+        "@babel/helper-member-expression-to-functions": "^7.16.7",
+        "@babel/helper-optimise-call-expression": "^7.16.7",
+        "@babel/traverse": "^7.16.7",
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-simple-access": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.15.4.tgz",
-      "integrity": "sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==",
+      "version": "7.17.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz",
+      "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.15.4"
+        "@babel/types": "^7.17.0"
       }
     },
     "@babel/helper-skip-transparent-expression-wrappers": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.15.4.tgz",
-      "integrity": "sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==",
+      "version": "7.16.0",
+      "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz",
+      "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==",
       "dev": true,
       "requires": {
-        "@babel/types": "^7.15.4"
+        "@babel/types": "^7.16.0"
       }
     },
     "@babel/helper-split-export-declaration": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.15.4.tgz",
-      "integrity": "sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz",
+      "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==",
       "requires": {
-        "@babel/types": "^7.15.4"
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/helper-validator-identifier": {
-      "version": "7.15.7",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz",
-      "integrity": "sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w=="
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz",
+      "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw=="
     },
     "@babel/helper-validator-option": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz",
-      "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz",
+      "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==",
       "dev": true
     },
     "@babel/helper-wrap-function": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.15.4.tgz",
-      "integrity": "sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz",
+      "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.15.4",
-        "@babel/template": "^7.15.4",
-        "@babel/traverse": "^7.15.4",
-        "@babel/types": "^7.15.4"
+        "@babel/helper-function-name": "^7.16.7",
+        "@babel/template": "^7.16.7",
+        "@babel/traverse": "^7.16.8",
+        "@babel/types": "^7.16.8"
       }
     },
     "@babel/helpers": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.15.4.tgz",
-      "integrity": "sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==",
+      "version": "7.17.9",
+      "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz",
+      "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==",
       "requires": {
-        "@babel/template": "^7.15.4",
-        "@babel/traverse": "^7.15.4",
-        "@babel/types": "^7.15.4"
+        "@babel/template": "^7.16.7",
+        "@babel/traverse": "^7.17.9",
+        "@babel/types": "^7.17.0"
       }
     },
     "@babel/highlight": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz",
-      "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==",
+      "version": "7.17.9",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz",
+      "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==",
       "requires": {
-        "@babel/helper-validator-identifier": "^7.14.5",
+        "@babel/helper-validator-identifier": "^7.16.7",
         "chalk": "^2.0.0",
         "js-tokens": "^4.0.0"
       }
     },
     "@babel/parser": {
-      "version": "7.15.8",
-      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.15.8.tgz",
-      "integrity": "sha512-BRYa3wcQnjS/nqI8Ac94pYYpJfojHVvVXJ97+IDCImX4Jc8W8Xv1+47enbruk+q1etOpsQNwnfFcNGw+gtPGxA=="
+      "version": "7.17.9",
+      "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz",
+      "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg=="
     },
     "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.15.4.tgz",
-      "integrity": "sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.16.7.tgz",
+      "integrity": "sha512-di8vUHRdf+4aJ7ltXhaDbPoszdkh59AQtJM5soLsuHpQJdFQZOA4uGj0V2u/CZ8bJ/u8ULDL5yq6FO/bCXnKHw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4",
-        "@babel/plugin-proposal-optional-chaining": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
+        "@babel/plugin-proposal-optional-chaining": "^7.16.7"
       }
     },
     "@babel/plugin-proposal-async-generator-functions": {
       }
     },
     "@babel/plugin-proposal-class-properties": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz",
-      "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz",
+      "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.14.5",
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-create-class-features-plugin": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-proposal-class-static-block": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.15.4.tgz",
-      "integrity": "sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==",
+      "version": "7.17.6",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.17.6.tgz",
+      "integrity": "sha512-X/tididvL2zbs7jZCeeRJ8167U/+Ac135AM6jCAx6gYXDUviZV5Ku9UDvWS2NCuWlFjIRXklYhwo6HhAC7ETnA==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.15.4",
-        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-create-class-features-plugin": "^7.17.6",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-class-static-block": "^7.14.5"
       }
     },
     "@babel/plugin-proposal-dynamic-import": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz",
-      "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.16.7.tgz",
+      "integrity": "sha512-I8SW9Ho3/8DRSdmDdH3gORdyUuYnk1m4cMxUAdu5oy4n3OfN8flDEH+d60iG7dUfi0KkYwSvoalHzzdRzpWHTg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-dynamic-import": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-export-namespace-from": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz",
-      "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.16.7.tgz",
+      "integrity": "sha512-ZxdtqDXLRGBL64ocZcs7ovt71L3jhC1RGSyR996svrCi3PYqHNkb3SwPJCs8RIzD86s+WPpt2S73+EHCGO+NUA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-json-strings": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz",
-      "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz",
+      "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-json-strings": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-logical-assignment-operators": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz",
-      "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.16.7.tgz",
+      "integrity": "sha512-K3XzyZJGQCr00+EtYtrDjmwX7o7PLK6U9bi1nCwkQioRFVUv6dJoxbQjtWVtP+bCPy82bONBKG8NPyQ4+i6yjg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
       }
     },
     "@babel/plugin-proposal-nullish-coalescing-operator": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz",
-      "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.16.7.tgz",
+      "integrity": "sha512-aUOrYU3EVtjf62jQrCj63pYZ7k6vns2h/DQvHPWGmsJRYzWXZ6/AsfgpiRy6XiuIDADhJzP2Q9MwSMKauBQ+UQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-numeric-separator": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz",
-      "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.16.7.tgz",
+      "integrity": "sha512-vQgPMknOIgiuVqbokToyXbkY/OmmjAzr/0lhSIbG/KmnzXPGwW/AdhdKpi+O4X/VkWiWjnkKOBiqJrTaC98VKw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-numeric-separator": "^7.10.4"
       }
     },
     "@babel/plugin-proposal-object-rest-spread": {
-      "version": "7.15.6",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.15.6.tgz",
-      "integrity": "sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==",
+      "version": "7.17.3",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz",
+      "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==",
       "dev": true,
       "requires": {
-        "@babel/compat-data": "^7.15.0",
-        "@babel/helper-compilation-targets": "^7.15.4",
-        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/compat-data": "^7.17.0",
+        "@babel/helper-compilation-targets": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
-        "@babel/plugin-transform-parameters": "^7.15.4"
+        "@babel/plugin-transform-parameters": "^7.16.7"
       }
     },
     "@babel/plugin-proposal-optional-catch-binding": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz",
-      "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz",
+      "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-optional-chaining": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz",
-      "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.16.7.tgz",
+      "integrity": "sha512-eC3xy+ZrUcBtP7x+sq62Q/HYd674pPTb/77XZMb5wbDPGWIdUbSr4Agr052+zaUPSb+gGRnjxXfKFvx5iMJ+DA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5",
+        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0",
         "@babel/plugin-syntax-optional-chaining": "^7.8.3"
       }
     },
     "@babel/plugin-proposal-private-methods": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz",
-      "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==",
+      "version": "7.16.11",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.16.11.tgz",
+      "integrity": "sha512-F/2uAkPlXDr8+BHpZvo19w3hLFKge+k75XUprE6jaqKxjGkSYcK+4c+bup5PdW/7W/Rpjwql7FTVEDW+fRAQsw==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-class-features-plugin": "^7.14.5",
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-create-class-features-plugin": "^7.16.10",
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-proposal-private-property-in-object": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.15.4.tgz",
-      "integrity": "sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.16.7.tgz",
+      "integrity": "sha512-rMQkjcOFbm+ufe3bTZLyOfsOUOxyvLXZJCTARhJr+8UMSoZmqTe1K1BgkFcrW37rAchWg57yI69ORxiWvUINuQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-annotate-as-pure": "^7.15.4",
-        "@babel/helper-create-class-features-plugin": "^7.15.4",
-        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-annotate-as-pure": "^7.16.7",
+        "@babel/helper-create-class-features-plugin": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
       },
       "dependencies": {
         "@babel/helper-annotate-as-pure": {
-          "version": "7.15.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz",
-          "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==",
+          "version": "7.16.7",
+          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz",
+          "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==",
           "dev": true,
           "requires": {
-            "@babel/types": "^7.15.4"
+            "@babel/types": "^7.16.7"
           }
         }
       }
     },
     "@babel/plugin-proposal-unicode-property-regex": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz",
-      "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz",
+      "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.14.5",
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-create-regexp-features-plugin": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-syntax-async-generators": {
       }
     },
     "@babel/plugin-transform-arrow-functions": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz",
-      "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz",
+      "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-async-to-generator": {
       }
     },
     "@babel/plugin-transform-block-scoped-functions": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz",
-      "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz",
+      "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-block-scoping": {
-      "version": "7.15.3",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.15.3.tgz",
-      "integrity": "sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz",
+      "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-classes": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.15.4.tgz",
-      "integrity": "sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==",
-      "dev": true,
-      "requires": {
-        "@babel/helper-annotate-as-pure": "^7.15.4",
-        "@babel/helper-function-name": "^7.15.4",
-        "@babel/helper-optimise-call-expression": "^7.15.4",
-        "@babel/helper-plugin-utils": "^7.14.5",
-        "@babel/helper-replace-supers": "^7.15.4",
-        "@babel/helper-split-export-declaration": "^7.15.4",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz",
+      "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==",
+      "dev": true,
+      "requires": {
+        "@babel/helper-annotate-as-pure": "^7.16.7",
+        "@babel/helper-environment-visitor": "^7.16.7",
+        "@babel/helper-function-name": "^7.16.7",
+        "@babel/helper-optimise-call-expression": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-replace-supers": "^7.16.7",
+        "@babel/helper-split-export-declaration": "^7.16.7",
         "globals": "^11.1.0"
       },
       "dependencies": {
         "@babel/helper-annotate-as-pure": {
-          "version": "7.15.4",
-          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.15.4.tgz",
-          "integrity": "sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==",
+          "version": "7.16.7",
+          "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz",
+          "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==",
           "dev": true,
           "requires": {
-            "@babel/types": "^7.15.4"
+            "@babel/types": "^7.16.7"
           }
         }
       }
     },
     "@babel/plugin-transform-computed-properties": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz",
-      "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz",
+      "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-destructuring": {
-      "version": "7.14.7",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz",
-      "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==",
+      "version": "7.17.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz",
+      "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-dotall-regex": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz",
-      "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz",
+      "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.14.5",
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-create-regexp-features-plugin": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-duplicate-keys": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz",
-      "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz",
+      "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-exponentiation-operator": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz",
-      "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz",
+      "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==",
       "dev": true,
       "requires": {
-        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5",
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-for-of": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.15.4.tgz",
-      "integrity": "sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz",
+      "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-function-name": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz",
-      "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz",
+      "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==",
       "dev": true,
       "requires": {
-        "@babel/helper-function-name": "^7.14.5",
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-compilation-targets": "^7.16.7",
+        "@babel/helper-function-name": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-literals": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz",
-      "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz",
+      "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-member-expression-literals": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz",
-      "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.16.7.tgz",
+      "integrity": "sha512-mBruRMbktKQwbxaJof32LT9KLy2f3gH+27a5XSuXo6h7R3vqltl0PgZ80C8ZMKw98Bf8bqt6BEVi3svOh2PzMw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-modules-amd": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz",
-      "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz",
+      "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.14.5",
-        "@babel/helper-plugin-utils": "^7.14.5",
+        "@babel/helper-module-transforms": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.16.7",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-commonjs": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.15.4.tgz",
-      "integrity": "sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==",
+      "version": "7.17.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz",
+      "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.15.4",
-        "@babel/helper-plugin-utils": "^7.14.5",
-        "@babel/helper-simple-access": "^7.15.4",
+        "@babel/helper-module-transforms": "^7.17.7",
+        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-simple-access": "^7.17.7",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-systemjs": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.15.4.tgz",
-      "integrity": "sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==",
+      "version": "7.17.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz",
+      "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==",
       "dev": true,
       "requires": {
-        "@babel/helper-hoist-variables": "^7.15.4",
-        "@babel/helper-module-transforms": "^7.15.4",
-        "@babel/helper-plugin-utils": "^7.14.5",
-        "@babel/helper-validator-identifier": "^7.14.9",
+        "@babel/helper-hoist-variables": "^7.16.7",
+        "@babel/helper-module-transforms": "^7.17.7",
+        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-validator-identifier": "^7.16.7",
         "babel-plugin-dynamic-import-node": "^2.3.3"
       }
     },
     "@babel/plugin-transform-modules-umd": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz",
-      "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz",
+      "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-module-transforms": "^7.14.5",
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-module-transforms": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-named-capturing-groups-regex": {
-      "version": "7.14.9",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.9.tgz",
-      "integrity": "sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==",
+      "version": "7.16.8",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz",
+      "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.14.5"
+        "@babel/helper-create-regexp-features-plugin": "^7.16.7"
       }
     },
     "@babel/plugin-transform-new-target": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz",
-      "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz",
+      "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-object-super": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz",
-      "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz",
+      "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5",
-        "@babel/helper-replace-supers": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-replace-supers": "^7.16.7"
       }
     },
     "@babel/plugin-transform-parameters": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.15.4.tgz",
-      "integrity": "sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz",
+      "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-property-literals": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz",
-      "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.16.7.tgz",
+      "integrity": "sha512-z4FGr9NMGdoIl1RqavCqGG+ZuYjfZ/hkCIeuH6Do7tXmSm0ls11nYVSJqFEUOSJbDab5wC6lRE/w6YjVcr6Hqw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-regenerator": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz",
-      "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==",
+      "version": "7.17.9",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz",
+      "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==",
       "dev": true,
       "requires": {
-        "regenerator-transform": "^0.14.2"
+        "regenerator-transform": "^0.15.0"
       }
     },
     "@babel/plugin-transform-reserved-words": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz",
-      "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.16.7.tgz",
+      "integrity": "sha512-KQzzDnZ9hWQBjwi5lpY5v9shmm6IVG0U9pB18zvMu2i4H90xpT4gmqwPYsn8rObiadYe2M0gmgsiOIF5A/2rtg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-runtime": {
       }
     },
     "@babel/plugin-transform-shorthand-properties": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz",
-      "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz",
+      "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-spread": {
-      "version": "7.15.8",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.15.8.tgz",
-      "integrity": "sha512-/daZ8s2tNaRekl9YJa9X4bzjpeRZLt122cpgFnQPLGUe61PH8zMEBmYqKkW5xF5JUEh5buEGXJoQpqBmIbpmEQ==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz",
+      "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5",
-        "@babel/helper-skip-transparent-expression-wrappers": "^7.15.4"
+        "@babel/helper-plugin-utils": "^7.16.7",
+        "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0"
       }
     },
     "@babel/plugin-transform-sticky-regex": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz",
-      "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz",
+      "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-template-literals": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz",
-      "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz",
+      "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-typeof-symbol": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz",
-      "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz",
+      "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-unicode-escapes": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz",
-      "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.16.7.tgz",
+      "integrity": "sha512-TAV5IGahIz3yZ9/Hfv35TV2xEm+kaBDaZQCn2S/hG9/CZ0DktxJv9eKfPc7yYCvOYR4JGx1h8C+jcSOvgaaI/Q==",
       "dev": true,
       "requires": {
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/plugin-transform-unicode-regex": {
-      "version": "7.14.5",
-      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz",
-      "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz",
+      "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==",
       "dev": true,
       "requires": {
-        "@babel/helper-create-regexp-features-plugin": "^7.14.5",
-        "@babel/helper-plugin-utils": "^7.14.5"
+        "@babel/helper-create-regexp-features-plugin": "^7.16.7",
+        "@babel/helper-plugin-utils": "^7.16.7"
       }
     },
     "@babel/preset-env": {
       }
     },
     "@babel/preset-modules": {
-      "version": "0.1.4",
-      "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz",
-      "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==",
+      "version": "0.1.5",
+      "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz",
+      "integrity": "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==",
       "dev": true,
       "requires": {
         "@babel/helper-plugin-utils": "^7.0.0",
       }
     },
     "@babel/template": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.15.4.tgz",
-      "integrity": "sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==",
+      "version": "7.16.7",
+      "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.16.7.tgz",
+      "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==",
       "requires": {
-        "@babel/code-frame": "^7.14.5",
-        "@babel/parser": "^7.15.4",
-        "@babel/types": "^7.15.4"
+        "@babel/code-frame": "^7.16.7",
+        "@babel/parser": "^7.16.7",
+        "@babel/types": "^7.16.7"
       }
     },
     "@babel/traverse": {
-      "version": "7.15.4",
-      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.15.4.tgz",
-      "integrity": "sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==",
-      "requires": {
-        "@babel/code-frame": "^7.14.5",
-        "@babel/generator": "^7.15.4",
-        "@babel/helper-function-name": "^7.15.4",
-        "@babel/helper-hoist-variables": "^7.15.4",
-        "@babel/helper-split-export-declaration": "^7.15.4",
-        "@babel/parser": "^7.15.4",
-        "@babel/types": "^7.15.4",
+      "version": "7.17.9",
+      "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz",
+      "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==",
+      "requires": {
+        "@babel/code-frame": "^7.16.7",
+        "@babel/generator": "^7.17.9",
+        "@babel/helper-environment-visitor": "^7.16.7",
+        "@babel/helper-function-name": "^7.17.9",
+        "@babel/helper-hoist-variables":&nbs